PHP MySQL:从购物车中删除项目

时间:2018-04-22 19:41:29

标签: javascript php html mysql sql

我的网站上有购物车功能,我可以将商品添加到购物车中,除了放入购物车的第一件商品外,我可以删除所有商品。当我点击"删除"页面重新加载但项目仍在购物车中。除第一个项目外,添加到购物车的任何其他项目都将被删除。这是我添加到购物车代码:

<?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')
?>

1 个答案:

答案 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');
?>