我的网站上有购物车功能,我可以将商品添加到购物车中,除了放入购物车的第一件商品外,我可以删除所有商品。当我点击"删除"页面重新加载但项目仍在购物车中。除第一个项目外,添加到购物车的任何其他项目都将被删除。这是我添加到购物车代码:
<?php
session_start();
if(isset($_GET['id']) & !empty($_GET['id'])){
if(isset($_SESSION['cart']) & !empty($_SESSION['cart'])){
$items = $_SESSION['cart'];
$cartitems = explode(",", $items);
if(in_array($_GET['id'], $cartitems)){
header('location: cartIndex.php?status=incart');
}else{
$items .= "," . $_GET['id'];
$_SESSION['cart'] = $items;
header('location: cartIndex.php?status=success');
}
}else{
$items = $_GET['id'];
$_SESSION['cart'] = $items;
header('location: cartIndex.php?status=success');
}
}else{
header('location: cartIndex.php?status=failed');
}
?>
这是我从购物车代码中删除的内容:
<?php
session_start();
$items = $_SESSION['cart'];
$cartitems = explode(",", $items);
if(isset($_GET['remove']) & !empty($_GET['remove'])){
$delitem = $_GET['remove'];
unset($cartitems[$delitem]);
$itemids = implode(",", $cartitems);
$_SESSION['cart'] = $itemids;
}
header('location:cart.php')
?>
答案 0 :(得分:0)
正如评论中的人指出的那样,有更好的方法来管理购物车。通常,网站通过MySQL或MongoDB之类的服务将购物车存储在其服务器数据库中,然后在添加或从购物车中删除产品时执行XHR / AJAX调用以更新购物车。但这既不是这里也不是那里,您想修复特定的代码,所以我会帮您解决。
您最有可能遇到的问题(我之所以说是最有可能的问题,是因为很难确定何时可能与GET值本身相关的其他各种事情)是此行:
unset($cartitems[$delitem]);
这是在数组中搜索项$delitem
作为键,而不是您要执行的值。我的猜测是您要删除的$delitem
的ID等于1,对吗?良好的数组从0开始,这意味着它将删除第二个位置的项目,而不是ID匹配$delitem
的项目。
我添加的代码是:
if (($key = array_search($delitem, $cartitems)) !== false) {
unset($cartitems[$key]);
}
array_search()
返回找到的元素的键,可以使用unset()
从原始数组中删除该元素。如果失败,它将返回FALSE
,但是如果成功,它将返回false -y值(例如,您的密钥可能为0),这就是为什么使用严格比较!==
运算符的原因。
if()
语句将检查array_search()是否返回值,并且只会执行一个动作。
完成新代码:
<?php
session_start();
$items = $_SESSION['cart'];
$cartitems = explode(",", $items);
if(isset($_GET['remove']) & !empty($_GET['remove'])){
$delitem = $_GET['remove'];
if (($key = array_search($delitem, $cartitems)) !== false) {
unset($cartitems[$key]);
}
$itemids = implode(",", $cartitems);
$_SESSION['cart'] = $itemids;
}
header('location:cart.php');
?>