Что не так с этим циклом foreach? - PullRequest
0 голосов
/ 20 ноября 2010

Я пытаюсь позволить моим пользователям обновлять количества в базе данных, предоставляя им некоторые поля ввода, и я знаю, что запрос обновления sql идеален, потому что, если я НЕ пользуюсь циклом foreach, он отправит и обновит последний только текстовое поле.

Но мне нужен цикл foreach, чтобы он просматривал все текстовые поля и обновлял их все в базе данных. Может кто-нибудь, пожалуйста, помогите мне понять, почему это не обновляется с этим циклом foreach? Большое спасибо заранее:)

foreach($_POST['items'] as $p=>$q) 
{
   // working sql code is in here.
}

И поля динамически генерируются так:

  $ct->data[$key][0]='<input type="text" value="'.$ct->data[$key][0].'" name="product" />';
  $ct->data[$key][1]='<input type="text" value='.$ct->data[$key][1].' id="qty" name="items[' . $ct->data[$key][1] . ']" />';
  $ct->data[$key][2]='<input type="submit" value="Update Item">';
  $ct->data[$key][3]='<p name="price">'.$ct->data[$key][3].'</p>';

Ответы [ 3 ]

2 голосов
/ 20 ноября 2010

Вы должны ВСЕГДА проверять, существует ли переменная.Это не более, чем обычно, и это должно быть урок 1. Вы не можете перебрать $_POST['items'], если $_POST['items'] не существует (очевидно).Поэтому вы должны проверить, была ли отправлена ​​форма.

Один из способов:

if ( isset($_POST['items']) ) {
  // foreach ( $_POST['items'] ....
}

Мне всегда нравится быть в безопасности и проверять также и тип:

if ( isset($_POST['items']) ) {
  // form submitted at least
  if ( is_array($_POST['items']) ) {
    // and it's an array as it should be
    foreach ( ....
  }
}

Переменные POST никогда не устанавливаются в запросе GET, поэтому выполнение foreach в первый раз на странице бесполезно.Вот для чего проверка: «отправлена ​​ли форма и существуют ли необходимые почтовые переменные?»

0 голосов
/ 20 ноября 2010

Какие значения вы видите?

foreach($_POST['items'] as $p=>$q) {
   print "$p: $q\n";
}
0 голосов
/ 20 ноября 2010

Имя поля ввода items должно быть просто items[].

Итак:

# Good 
$ct->data[$key][1]='<input type="text" value='.$ct->data[$key][1].' id="qty" name="items[]" />';


# Bad 
$ct->data[$key][1]='<input type="text" value='.$ct->data[$key][1].' id="qty" name="items[' . $ct->data[$key][1] . ']" />';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...