分配工作是使表格显示一些带有“添加到购物车”链接的产品,该链接会将用户发送到另一个页面,该页面使用链接中的信息获取数据以显示购买总额。该表会添加被单击的新项目,但是当多次单击某个项目时,不会更新实际数量。
我已经尝试在购物车中已经存在的物品的支票上放置回显,并且确实在数量更新之前声明数量1,在更新之后声明数量2,但是由于某种原因,这实际上并没有更新。价格也一样。
<?php
session_start();
if(empty($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}
$cart = $_SESSION['cart'];
$id = $_GET['productid'];
$name = $_GET['productname'];
$price = $_GET['productprice'];
$qty = 1;
$alreadyHas = 0;
foreach($cart as $cartKey => $cartItem) {
if(!empty($cartItem['pid'])) {
if($cartItem['pid'] == $id) {
$cartItem['qty'] = $cartItem['qty'] + 1;
$cartItem['total'] = $cartItem['price'] * $cartItem['qty'];
$alreadyHas = 1;
}
}
}
if($alreadyHas == 0) {
$cartItem = array(
'pid' => $id,
'name' => $name,
'price' => $price,
'qty' => $qty,
'total' => $price
);
array_push($cart, $cartItem);
}
$_SESSION['cart'] = $cart;
?>
答案 0 :(得分:2)
您的问题出在您的foreach
循环中。您正在更新$cartitem
,但是因为您没有在循环中通过引用传递它,所以$cart
变量本身并未被更新。尝试将foreach
循环更改为此(注意,在$ cartItem之前添加&
)
foreach($cart as $cartKey => &$cartItem) {
请注意,您可以使用array_search
和array_column
来简化代码:
if (($k = array_search($id, array_column($cart, 'pid'))) !== false) {
$cart[$k]['qty'] = $cart[$k]['qty'] + 1;
$cart[$k]['total'] = $cart[$k]['price'] * $cart[$k]['qty'];
}
else {
$cartItem = array(
'pid' => $id,
'name' => $name,
'price' => $price,
'qty' => $qty,
'total' => $price
);
array_push($cart, $cartItem);
}