更新购物车更多变种

时间:2015-04-02 09:34:49

标签: php html forms shopping-cart

我目前正在尝试创建购物车并通过$ _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;

它始终只更新表格中的最后一个。

这个问题是否有一些或更好的解决方案? 我非常赞赏它。

谢谢。

1 个答案:

答案 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];
}