我试图通过foreach在我的数据库中插入多行。我已经阅读了很多问题和答案,但似乎并没有找到解决方案。
这是我的代码:
foreach($_POST as $key=>$val) {
$product = $val['item_name'];
$code = $val['item_code'];
$sql = "INSERT INTO orderitems(product, code)VALUES('$product', '$code');";
$result = mysqli_query($db, $sql) or die(mysqli_error($db));
}
这会插入几个空行以及一行,其中包含提交按钮的第一个字母。无论我做什么,都不会设置插入超过最后一个条目。我有两个以上的字段而不仅仅是两个字段,所以我认为那些是插入空白的字段。
以下是我的表格中的一些代码:
$cart_items = 0;
echo '<input type="hidden" name="item_name['.$cart_items.']" value="'.$obj->product.'" />';
echo '<input type="hidden" name="item_code['.$cart_items.']" value="'.$product_code.'" />';
$cart_items ++;
我真的很感激一些帮助!
答案 0 :(得分:1)
您容易受到sql injection attacks的攻击。并且在编写代码片段时,您在foreach循环中使用了错误的键/值。
表单将生成以下键:
item_name[0] -> $obj->product
item_code[0] -> $product_code
你的foreach:
foreach($_POST as $key => $val)
会将item_name
和item_code
作为键,而$val
则是每个名称的值的ARRAY。当您执行$product
和$ $代码分配时,您将访问不存在的数组键。
你想要这个:
foreach($_POST['item_name'] as $key => $product) {
^^^^^^^^^^^^^ ^^^^^^^^
$name = $_POST['item_code'][$key];
... query goes here ...
}