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は、関連する製品値を取得します。ただし、これらすべてのフィールドに入力するために重要なことは必要ありません。従業員は1つ以上のフィールドに入力できます!

PHPでこのフォームをどのように処理できるかを誰かに教えてもらえますか?

4

2 に答える 2

2

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
    }
}
于 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 に答える