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. 我已经坚持了几个小时,对于我认为很简单的事情,我已经尝试了一切:(

开机自检参数

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 回答