jQuery POST表单数据行

时间:2012-08-28 14:07:59

标签: php javascript jquery ajax arrays

我正在尝试在我的照片库中添加一个简单的购物车系统,目前我正在创建一种简单的方式来更新所选产品的类型和数量。但是我遇到了在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. 我被困在这几个小时,而且我认为这很简单,我已经尝试了一切:(
  5. 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 });                           
          },
    });
    

    感谢。

2 个答案:

答案 0 :(得分:3)

您应该通过添加id / counter给表单元素唯一的名称,然后在post数组上循环读取您发布的数据并进行处理。

确切的代码取决于你如何确切地确定表单字段名称,但假设你使用从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);
}

答案 1 :(得分: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中,它们表示该值是一个数组。