如何在PHP中处理多个相同的表单字段?

时间:2012-05-23 08:45:47

标签: php arrays forms

我有一张表格如下:

<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处理这个表单?

2 个答案:

答案 0 :(得分:2)

这样的代码是有问题的,因为productqty数组的元素必须保持同步,但表单提交的HTML4(和HTML5)模型并没有说明这些{{1控件必须是successful。因此,浏览器可能会选择不提交它们的值,这会弄乱跨数组索引。

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

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>

答案 1 :(得分:1)

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

<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>