我正在尝试在我的照片库中添加一个简单的购物车系统,目前我正在创建一种简单的方式来更新所选产品的类型和数量。但是我遇到了在PHP端处理数据的问题。
因为我发送的字段名称相同,所以PHP会覆盖数据,只创建1个数组。理想情况下,我希望它在PHP中成为这个;
array(item, product, quantity),
array(item, product, quantity),
array(item, product, quantity)
处理此问题的最佳方式是什么。
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 });
},
});
感谢。
答案 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中,它们表示该值是一个数组。