我目前正在尝试创建购物车并通过$ _SESSION变量发送它。
但是当我尝试通过$ _POST更新项目时,它只会更新购物车中的最后一个产品。
这是我的表格
<form method="post">
<?php foreach ($_SESSION['cart'] as $product) {
$productDetail = Products::getProduct($product['id']);
?>
<input type="hidden" name="id" value="<?= $product['id']; ?>">
<input name="qty" size="5" maxlength="50" type="text" value="<?= $product['quantity']; ?>">
<input name="width" size="5" maxlength="50" type="text" value="<?= $product['width']; ?>">
<input name="length" size="5" maxlength="5" type="text" value="<?= $product['length']; ?>">
<?php } ?>
<input type="submit" value="send" />
</form>
这是我如何更新我的购物车
$item_id = $data['id'];
$quantity = $data['qty'];
$width = $data['width'];
$length = $data['length'];
$_SESSION['cart'][$item_id]['quantity'] = $quantity;
$_SESSION['cart'][$item_id]['width'] = $width;
$_SESSION['cart'][$item_id]['length'] = $length;
它始终只更新表格中的最后一个。
这个问题是否有一些或更好的解决方案? 我非常赞赏它。
谢谢。
答案 0 :(得分:1)
您需要将[]
添加到输入名称以获取$_POST
值中的数组:
<form method="post">
<?php foreach ($_SESSION['cart'] as $product) {
$productDetail = Products::getProduct($product['id']);
?>
<input type="hidden" name="id[]" value="<?= $product['id']; ?>">
<input name="qty[]" size="5" maxlength="50" type="text" value="<?= $product['quantity']; ?>">
<input name="width[]" size="5" maxlength="50" type="text" value="<?= $product['width']; ?>">
<input name="length[]" size="5" maxlength="5" type="text" value="<?= $product['length']; ?>">
<?php } ?>
<input type="submit" value="send" />
</form>
然后你可以迭代$data['id']
数组(我假设它与$_POST['id']
相同),利用这4个数组对给定数据集具有相同对应键的事实:
$item_ids = $data['id'];
$quantitys = $data['qty'];
$widths = $data['width'];
$lengths = $data['length'];
foreach($item_ids as $k=>$item_id){
$_SESSION['cart'][$item_id]['quantity'] = $quantitys[$k];
$_SESSION['cart'][$item_id]['width'] = $widths[$k];
$_SESSION['cart'][$item_id]['length'] = $lengths[$k];
}