1

我有一张如下表:

<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 处理此表单吗?

4

2 回答 2

2

像这样的代码是有问题的,因为productqty数组的元素必须保持同步,但是表单提交的 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
    }
}
于 2012-05-23T08:56:54.393 回答
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>
于 2012-05-23T09:02:07.903 回答