如何在 PHP 中处理多个相同的表单字段快捷方式


How to handle multiple same form fields shortway in PHP?

我有一个表格如下:

<table>
  <thead>
     <th>PRODUCT TYPE</th>
     <th>QUANTITY</th>
     <th>WEIGHT</th>
     <th>WEIGHT PRICE</th>
     <th>TOTAL</th>
  </thead>
  <tr>
     <td>DRINKS</td>
     <input type="hidden" name="product[]" value="1" />
     <td><input type="text" name="qty[]" /></td>
     <td>LITER</td>
     <input type="hidden" name="unitPrice[]" value="34.92" />
     <td><input type="text" name="total[]" readonly="readonly" /></td>
   </tr>
  <tr>
     <td>DRY FOODS</td>
     <input type="hidden" name="product[]" value="1" />
     <td><input type="text" name="qty[]" /></td>
     <td>KG</td>
     <input type="hidden" name="unitPrice[]" value="16.30" />
     <td><input type="text" name="total[]" readonly="readonly" /></td>
   </tr>
  <tr>
     <td>FRESH FOOD</td>
     <input type="hidden" name="product[]" value="1" />
     <td><input type="text" name="qty[]" /></td>
     <td>TON</td>
     <input type="hidden" name="unitPrice[]" value="26.45" />
     <td><input type="text" name="total[]" readonly="readonly" /></td>
   </tr>
  <tr>
     <td>SWEET CONFECTIONARY</td>
     <input type="hidden" name="product[]" value="1" />
     <td><input type="text" name="qty[]" /></td>
     <td>TON</td>
     <input type="hidden" name="unitPrice[]" value="65.10" />
     <td><input type="text" name="total[]" readonly="readonly" /></td>
   </tr>
</table>

所以,这里有一个问题:我想检查输入值qty,如果qty被填充,那么将取相关的产品值。但是,不需要填写所有这些字段来重要的事情。员工可以填写一个或多个字段!

任何人都可以向我介绍如何使用 PHP 处理此表单吗?

这样的代码是有问题的,因为product数组和qty数组的元素必须保持同步,但是用于表单提交的HTML4(和HTML5(模型并没有说这些qty控件必须成功。因此,浏览器可能会选择不提交其值,这会弄乱跨数组索引。

最干净的解决方案是在每个控件的名称中显式指定数组的索引:

  <tr>
     <td>DRINKS</td>
     <input type="hidden" name="product[0]" value="1" />
     <td><input type="text" name="qty[0]" /></td>
     <td>LITER</td>
     <input type="hidden" name="unitPrice[0]" value="34.92" />
     <td><input type="text" name="total[0]" readonly="readonly" /></td>
   </tr>
  <tr>
     <td>DRY FOODS</td>
     <input type="hidden" name="product[1]" value="1" />
     <td><input type="text" name="qty[1]" /></td>
     <td>KG</td>
     <input type="hidden" name="unitPrice[1]" value="16.30" />
     <td><input type="text" name="total[1]" readonly="readonly" /></td>
   </tr>

这样你就可以做

foreach ($POST['product'] as $i => $val) {
    if (!empty($POST['qty'][$i])) {
        // the product has a nonzero quantity
    }
}

您可能需要考虑的另一个选项是:

  <tr>
     <td>DRINKS</td>
     <input type="hidden" name="product[0][product]" value="1" />
     <td><input type="text" name="product[0][qty]" /></td>
     <td>LITER</td>
     <input type="hidden" name="product[0][unitPrice]" value="34.92" />
     <td><input type="text" name="product[0][total]" readonly="readonly" /></td>
   </tr>

这将与

foreach ($POST['product'] as $product) {
    if (!empty($product['qty'])) {
        // the product has a nonzero quantity
    }
}

您可以在数组上分配唯一索引

<input type="hidden" name="product[1]" value="1" />
<td><input type="text" name="qty[1]" /></td>
...
<input type="hidden" name="product[2]" value="2" />
<td><input type="text" name="qty[2]" /></td>