我试图允许我的用户通过提供一些输入字段来更新数据库中的数量,我知道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>';
答案 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";
}