2

フォトギャラリーに簡単なカートシステムを追加しようとしています。現時点では、選択した商品を種類と数量で更新する簡単な方法を作成しています。しかし、PHP側でデータを処理する際に問題が発生しました。

同じフィールド名の行を送信しているため、PHPはデータを上書きして1つの配列のみを作成しています。理想的には、PHPでこれにしたいと思います。

array(item, product, quantity), 
array(item, product, quantity), 
array(item, product, quantity)

これを処理する最良の方法は何でしょうか。

  1. ある種の一意の識別子を使用してフィールド名を作成してから、PHPにpost配列を再処理させます。
  2. JSを使用して配列を作成し、それらを行として配列として送信します。私の場合は3つの配列です。POST中に文字列に変換されるため、機能するかどうかわかりませんか?
  3. キーが「item_gallery_id」フィールドである投稿配列を作成する方法はありますか?
  4. 私はこれに何時間も立ち往生していて、簡単だと思った何かのために、私はすべてを試しました:(

POSTパラメータ

cart_id 1
item_gallery_id 6
item_gallery_id 3
item_gallery_id4
product_options 12
product_options 12
product_options 12
quantity    1
quantity    1
quantity    1

私は次のHTMLを持っています

<form id="order_photo_form">
<table width="100%" border="0">
  <thead>
    <tr>
      <th>Item</th>
      <th>Album/Item</th>
      <th>Product/Price</th>
      <th>Quantity</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <input class="form_data" name="item_gallery_id" value="6" type="hidden">
      <td><img src="img" width="100"></td>
      <td>Item</td>
      <td><select class="form_data" name="product_options">
          <option value="12">Canvas 100x150cm - $550</option>
          <option value="11">Canvas 100x100cm - $350</option>
        </select></td>
      <td><select class="form_data" name="quantity">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select></td>
    </tr>
    <tr>
      <input class="form_data" name="item_gallery_id" value="3" type="hidden">
      <td><img src="img" width="100"></td>
      <td>Item</td>
      <td><select class="form_data" name="product_options">
          <option value="12">Canvas 100x150cm - $550</option>
          <option value="11">Canvas 100x100cm - $350</option>
    </select></td>
      <td><select class="form_data" name="quantity">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select></td>
    </tr>
    <tr>
      <input class="form_data" name="item_gallery_id" value="4" type="hidden">
      <td><img src="img" width="100"></td>
      <td>Item</td>
      <td><select class="form_data" name="product_options">
          <option value="12">Canvas 100x150cm - $550</option>
          <option value="11">Canvas 100x100cm - $350</option>
        </select></td>
      <td><select class="form_data" name="quantity">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select></td>
    </tr>
  </tbody>
</table>
</form>

次に、いくつかの単純なjQuery;

$.ajax({
   url: "ajax.php?update_cart",
   type: "POST",
   data: $('#order_photo_form').serialize(),
      success: function(data){
         $.jGrowl(data, { life: 10000 });                           
      },
});

ありがとう。

4

2 に答える 2

3

id / counterを追加してフォーム要素に一意の名前を付け、後でpost配列をループして、投稿されたデータを読み取って処理する必要があります。

正確なコードは、フォームフィールド名を正確に決定する方法によって異なりますが、1から始まり、1ずつ増加するカウンターを使用すると仮定すると、phpスクリプトで次のようなことができます(テストされていませんが、アイデアが示されています)。

$orders = array();

for($i=1;array_key_exists($_POST, "item_gallery_id" . $i);$i++){
    //read the values and store them
    $newOrder = array(
        "id" => $_POST['item_gallery_id' . $i],  
        "options" => $_POST['product_options' . $i],  
        "quantity" => $_POST['quantity' . $i]
    );        

    array_push($orders, $newOrder);
}
于 2012-08-28T14:20:00.673 に答える
0

次のことができます。

<form id="form" name="form" action="">
  <input name="items[]" type="text" id="item_1" />
  <input name="items[]" type="text" id="item_2" />
</form>

$_POST['items']これで配列になり、ループできます。

for ($i = 0; $i < count($_POST['items']); $i++) {
    $item = $_POST['items'][$i];
}

ただし、これはPHPでのみ機能します。JavaScriptで要素を参照する場合は、次のことを行う必要がありますdocument.getElementsByName('items[]')。JavaScriptでわかるように、角かっこは名前の一部ですが、PHPでは、値が配列であることを示しています。

于 2012-08-28T14:34:38.467 に答える