【问题标题】:How do I insert multiple products when quantity is unknown?数量未知时如何插入多个产品?
【发布时间】:2013-10-09 05:26:43
【问题描述】:

我正在尝试建立一个库存系统来跟踪我公司的一些产品。它不是在线商店或任何东西,只是我跟踪运输中、电工卡车库存中或办公室中的产品的一种方式。

我已经建立了一些页面来显示当前的库存水平,包括处于不确定状态的物品(运送到技术人员或办公室)、技术人员拥有的物品以及办公室里的物品。我还可以查看每种技术的库存。现在,当我们的供应商直接发货时,我只需要一种方法将产品分配到其中一个位置。

“插入库存”页面有一个表单,显示我们跟踪的每个项目的字段,旁边还有一个数量框。它还有一个选择框,用于选择将库存分配到什么以及下一步打算去哪里。 (例如:运输 -> 技术)

所以,它可能看起来像这样:


选择位置类型选择列表

选择前往选择列表

12/2 室内线(只读)............数量字段

10/2 室外电缆(只读)......................数量字段

提交按钮


此页面上实际上将有大约 60 种产品。理想情况下,如果他们将 10 放在 12/2 线字段中,它将向数据库中插入 10 条记录:

id(AI)、product_id、location_type_id、location_going_id、日期

如果我将 3 放在 10/2 数量上,那么它也会插入 3 条记录。

这是我的表单的代码。现在没有什么其他的了。

      <form action="insert2.php" id="form1" name="form1" method="POST">
  <table width="500" border="0">
    <tr>
      <td><input name="product_name[]" type="text" value="10/2 Outdoor Cable" readonly="readonly"></td>
      <td><input name="qty[]" type="text" size="5"></td>
    </tr>
    <tr>
      <td><input name="product_name[]" type="text" value="12/2 Indoor Wire" readonly id="product_name[]"></td>
      <td><input name="qty[]" type="text" size="5" id="qty[]"></td>
    </tr>
  </table>

    <p>
      <input type="submit" name="submit" id="submit" value="Submit">
              </p>
</form>

然后我让它进入第二页以将其插入数据库:

<?php
for($i = 0; $i < count($_POST['product_name']); $i++) {
$product = $_POST['product_name'][$i];
for ($j = 0; $j < $_POST['qty'][$i]; $j++) {

mysqli_query($con,"INSERT INTO inv_inventory (product_name)
VALUES ('$product')");
}

}
?>

当我进入第二页时,它显示:string(16) "12/2 Indoor Wire" 并插入了 10/2 室外电缆项目中的 1 个。我把 3 个用于户外,4 个用于室内产品。

【问题讨论】:

  • var_dump($_POST) 在 for 循环之前得到什么?
  • 它说:array(2) { [0]=> string(18) "10/2 Outdoor Cable" [1]=> string(16) "12/2 Indoor Wire" }
  • 似乎qty[] 没有发布。上面的 HTML 是您的确切代码吗?这看起来很奇怪。
  • 是的,除了 html,head 标签。我将 var_dump for qty 放在另一个下面,它说:array(2) { [0]=> string(18) "10/2 Outdoor Cable" [1]=> string(16) "12/2 Indoor Wire " } 数组(2) { [0]=> 字符串(1) "3" [1]=> 字符串(1) "2" }
  • 哦,好的。我以为您实际上已根据我的建议添加了 var_dump($_POST) - 而不是某些特定的发布值。好的。现在会发生什么?它是否只插入一种产品?

标签: php mysql database sql-insert inventory


【解决方案1】:

您可以将 HTML 更改为

<input name="product_name[]" .. />

然后您将能够将$_POST["product_name"] 操作为一个包含所有已发布值的数组。

您需要对product_name 输入和qty 输入执行上述操作,以便您可以执行任何必要的操作。

如果您想根据数量插入多条记录,您的代码必须类似于:

<?php
  for($i = 0; $i < count($_POST['product_name']); $i++) {
    $product = $_POST['product_name'][$i];
    for ($j = 0; $j < $_POST['qty'][$i]; $j++) {
      // insert $product
    }
  }
?>

如果您的数量只是产品表中的另一列,那么您的代码应如下所示:

<?php
  for($i = 0; $i < count($_POST['product_name']); $i++) {
    $product = $_POST['product_name'][$i];
    $query = 'INSERT INTO .. (`product_name`, `qty`) '.
             ' VALUES ("'.$product.'", "'.$_POST['qty'][$i].'")';
  }
?>

请记住,这只是一个示例。您需要在实际代码中检查和转义值。

【讨论】:

  • 是的,我试过了。但它只在表格上插入每个产品一次。我如何知道是否有人在每个产品的数量字段中输入了一个数字以插入那么多特定产品?
  • 这对我不起作用。它插入一条记录:(现在,我只有第一个产品字段和数量字段。&lt;input name="product_name[]" type="text" value="xti"&gt;&lt;input name="qty[]" type="text" size="5"&gt; 然后在第 2 页我有:&lt;?php for($i = 0; $i &lt; count($_POST['product_name']); $i++) { $product = $_POST['product_name'][$i]; for ($j = 0; $j &lt; $_POST['qty'][$i]; $j++) { // insert $product /* verify data, do sql escaping */ mysqli_query($con,"INSERT INTO inv_inventory (product_name) VALUES ('$product')"); } } ?&gt;
  • 您要添加到您的问题、您对代码所做的更新以及您的$_POSTvar_dump 吗?
  • 现在就这样做。抱歉,我不知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 2018-12-06
  • 2016-10-03
  • 2019-02-12
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
相关资源
最近更新 更多