Использование $ _POST в PHP-вопросе - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь получить некоторую информацию через $ _POST в PHP, в основном на данный момент я использую это:

$item_name1 = $_POST['item_name1']; 
$item_name2 = $_POST['item_name2']; 
$item_name3 = $_POST['item_name3']; 
$item_name4 = $_POST['item_name4'];

Я хочу вставить каждое из имен элементов в поле таблицы с помощью mysqlпоэтому я пытаюсь поэкспериментировать с циклом while php, поэтому у меня нет большого количества переменных $ item_name:

$number_of_items = $_POST['num_cart_items']; 

$i=1;
while($i<=$number_of_items)
  {  
    $test = $_POST['item_name'. $i'']; 
    $i++;
  }

Приведенный выше код не выполняется, его довольно сложно объяснить, но код должен найти все имя_позиции $_POST и сделайте его переменной для вставки mysql.

$ _POST ['num_cart_items'] - это общее количество элементов.

Код предназначен для прослушивателя PayPal IPN для корзины покупок.это продолжается.

Помощь оценена.

РЕДАКТИРОВАТЬ:

У меня есть еще один документ, который я только что понял:

$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}

Как можноя вставляю $ _POST ['item_name1'], $ _POST ['item_name2'] как переменную для вставки mysql?

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

Ваш цикл эффективно переопределяет переменную $test на каждой итерации:

$test = $_POST['item_name'. $i''];

Если вы хотите поместить их в массив, измените на $test[]. Также он содержит ошибку разбора, указанную brian_d.

Звучит немного страшно, если переменная num_cart_items отправляется вместе с формой. Вы устанавливаете это с помощью JavaScript? Пользователь может манипулировать им. Вы не должны полагаться на это. Я верю, что вам нужно сделать форму поля как:

<input type="text" name="item_name[]" />

Обратите внимание на квадратные скобки в конце названия. Это создаст массив в массиве $_POST: $_POST['item_name'] будет содержать имена всех элементов.

Тогда, как устроена ваша БД? Я думаю, вы хотите вставить их в один запрос как:

INSERT INTO ORDERS VALUES (item_name_1, ...), (item_name_2, ...)

Если это так, вы можете сделать строку из массива:

$query = 'INSERT INTO ORDERS VALUES ';
foreach($_POST['item_name'] as $item_name){
  $query .= '('.stripslashes($item_name). /*put other column values*/ '),';
}
$query = rtrim($query, ',');

Обратите внимание, что использование addslashes недостаточно для защиты от внедрения SQL.

4 голосов
/ 23 сентября 2011

$test = $_POST['item_name'. $i'']; - синтаксическая ошибка.
уберите конец '', чтобы он стал:

$test = $_POST['item_name'. $i];

...