Foreach将多行插入数据库

时间:2015-03-12 16:27:43

标签: php mysqli foreach insert rows

我试图通过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 ++;

我真的很感激一些帮助!

1 个答案:

答案 0 :(得分:1)

您容易受到sql injection attacks的攻击。并且在编写代码片段时,您在foreach循环中使用了错误的键/值。

表单将生成以下键:

item_name[0] -> $obj->product
item_code[0] -> $product_code

你的foreach:

foreach($_POST as $key => $val) 

会将item_nameitem_code作为键,而$val则是每个名称的值的ARRAY。当您执行$product和$ $代码分配时,您将访问不存在的数组键。

你想要这个:

foreach($_POST['item_name'] as $key => $product) {
              ^^^^^^^^^^^^^            ^^^^^^^^                      
    $name = $_POST['item_code'][$key];
    ... query goes here ...
}