这个foreach循环有什么问题?

时间:2010-11-20 16:57:55

标签: php html loops foreach

我试图允许我的用户通过提供一些输入字段来更新数据库中的数量,我知道sql更新查询是完美的,因为如果我不使用foreach循环,它将提交并更新最后一个仅限textfield。

但我需要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 个答案:

答案 0 :(得分:2)

您应该始终检查变量是否存在。这不再那么正常,而且本来应该是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是没用的。这是检查的目的:'是提交的表格,是否存在必要的后期变量?'

答案 1 :(得分:0)

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] . ']" />';

答案 2 :(得分:0)

你看到了什么价值?

foreach($_POST['items'] as $p=>$q) {
   print "$p: $q\n";
}