【问题标题】:Foreach insert multiple rows to databaseForeach 向数据库中插入多行
【发布时间】:2015-05-14 22:18:12
【问题描述】:

我正在尝试通过 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 ++;

非常感谢您的帮助!

【问题讨论】:

    标签: php mysqli foreach insert rows


    【解决方案1】:

    您很容易受到sql injection attacks 的攻击。在编写代码 sn-p 时,您在 foreach 循环中使用了错误的键/值。

    表单将生成以下键:

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

    还有你的 foreach:

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

    将给出item_nameitem_code 作为键,$val 是每个名称的值的数组。当您执行 $product 和 `$code 分配时,您正在访问不存在的数组键。

    你想要这个:

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

    【讨论】:

    • 感谢您的回答!但是,当我这样做时,数据库中根本没有插入任何内容。
    • 基本调试:var_dump($sql) 并查看您正在构建的查询是什么样的。 var_dump($_POST) 以查看表单中的内容。
    • SQL 完全为空,表单只发送最新的产品。但我真的不知道为什么我会说实话!
    猜你喜欢
    • 2015-12-25
    • 2017-09-08
    • 1970-01-01
    • 2014-02-10
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多