我正在构建的购物车似乎只更新了数组第一个元素的数量。例如,我的购物车中的第一个项目的数量为1,然后当我从产品页面添加另一个数量的2时,总数则变为3,这就是我想要的。但是,如果我为另一个项重复这些步骤,它会将它们分别添加到数组中,而不是将它们分组在一起
if(isset($_GET['add'])){
foreach ($_SESSION['cart'] as $key => $item){
if ($item['id'] == $itemID) {
$newQuan = $item['quantity'] + $quantity;
unset($_SESSION['cart'][$key]);
$_SESSION['cart'][] = array("id" => $itemID,"quantity" => $newQuan);
header('Location:xxx');//stops user contsanlty adding on refresh
exit;
}
else{
$_SESSION['cart'][] = array("id" => $itemID,"quantity" => $quantity);
header('xxx');//stops user contsanlty adding on refresh
exit;
}
}
}
任何人都可以帮我解释为什么第一个元素只会更新吗?
答案 0 :(得分:0)
你的问题是foreach循环中的else-case。第一个项目由if和then检查 - 当第一个项目不匹配时 - else案例激活并添加新项目。
else{
$_SESSION['cart'][] = array("id" => $itemID,"quantity" => $quantity);
header('xxx');//stops user contsanlty adding on refresh
exit;
}
您想要做的是检查整个购物车,然后 - 如果找不到文章 - 将其添加到购物车。为此,我建议使用变量来检查是否在循环内找到了条目。为了灵感,我插入了下面的代码。只需要进行微小的更改:添加found-variable并初始化它(找不到),将变量设置为在if-case中找到并检查变量是否在退出foreach-loop后设置(如果不是,您确定要将项目添加到购物车中。
$foundMyArticle = 0;
foreach ($_SESSION['cart'] as $key => $item){
if ($item['id'] == $itemID) {
$foundMyArticle = 1;
... THE OTHER CODE
} //end of the foreach
if($foundMyArticle == 0)
{ //COPY THE CODE FROM THE ELSE-CASE HERE }
答案 1 :(得分:0)
我没有测试过,但这可能有点简单:
if(isset($_GET['add']))
{
if(!isset($_SESSION['cart'])) $_SESSION['cart'] = array();
if(!isset($_SESSION['cart'][$itemID]))
{
$_SESSION['cart'][] = array('id' => $itemID, 'quantity' => $quantity);
}
else
{
$_SESSION['cart'][$itemID]['quantity'] += $quantity;
}
}
答案 2 :(得分:0)
首先,问题和代码似乎不够清楚,但我会尽力提出我认为可能有用的建议(我会做出一些假设)。
这些变量来自哪里?
$itemID, $quantity
假设他们进入$_GET
,我会说保存购物车信息会更好:
$itemCartIndex = strval($itemID);
//convert the integer item id to a string value -- or leave as string if already a string
$currentQuantity = (isset($_SESSION["cart"][$itemCartIndex]))? intval($_SESSION["cart"][$itemCartIndex]["quantity"]):0;
//set it by default if the index does not exist in the cart already
$currentQuantity += $quantity;
//update the quantity for this particular item
$_SESSION["cart"][$itemCartIndex] = array("quantity"=>$currentQuantity,...,"price"=>12.56);
//set up the index for this item -- this makes it easy to remove an item from the cart
//as easy as unset($_SESSION["cart"][$itemCartIndex]
完成后,向购买者展示/展示购物车是微不足道的。
祝你好运