我有一个表格如下:
<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>