PHP从购物车中删除项目

时间:2015-04-15 13:00:32

标签: php session multidimensional-array

我创建了一个非常简单的购物车,只需添加项目并从中删除项目并清空购物车现在我知道我的代码中有很多问题,但我也试图修复它们

首先看我的代码

if (isset($_SESSION['cart'])) {
    foreach ($_SESSION['cart'] as $c) {
        echo $c['name'] . '<br />';
        echo $c['price'] . '<br />';
        echo '<a href="?pid=17&rc=' . $c['code'] . '">Remove item</a><br />';
    }
}


if (isset($_POST['buy'])) {
    //header("Location:?pid=18&pl=" . $pl);
    if (isset($_POST['buy'])) {
        $getData = $db->prepare('SELECT * FROM plans WHERE id=?');
        $getData->bind_param('i', $pl);
        if ($getData->execute()) {
            $res = $getData->get_result();
            if (($pn = $res->fetch_object()) !== null) {
                $proCode = rand(1, 100);

                $item['name'] = $pn->plan_name;
                $item['price'] = $pn->price_dollar;
                $item['code'] = $proCode;
                $_SESSION['cart'][] = $item;
            }
        }
    }
}

echo '<a href="?pid=17&ac=empty">Empty Cart</a>';

if (isset($_GET['rc']) && isset($_SESSION['cart'])) {
    $rem = $_GET['rc'];
    $ses = $_SESSION['cart'];

    foreach ($_SESSION['cart'] as $cartItem) {
        if ($cartItem["code"] == $rem) {
            unset($ses[$rem]);
        }
    }

    /*if (($key = array_search($rem, $ses)) !== false) {
        unset($ses[$key]);
    }*/
    var_dump($ses);
}

if (isset($_GET['ac']) == 'empty' && isset($_SESSION['cart'])) {
    unset($_SESSION['cart']);
}

现在添加新产品对我来说工作正常,但问题 当我试图从插入符号中移除一个项目时,它会返回并且注意到似乎发生了,并且该项目仍在购物车中

2 个答案:

答案 0 :(得分:1)

您未设置$ses变量而不是$_SESSION ...

请查看更新的代码,您甚至不需要使用forloop,您可以unset变量,如下所示

 if (isset($_GET['rc']) && isset($_SESSION['cart'])) 
 {
    $rem = $_GET['rc'];    
    if(isset($_SESSION['cart'][$rem]))
    {
       unset($_SESSION['cart'][$rem]);
    }
}

请告诉我这是否有帮助

修改

请将您的购买产品功能更新为以下...您使用的是auto increament key for array ..它应该是主键(此处为您的产品代码)

if (isset($_POST['buy'])) {
    //header("Location:?pid=18&pl=" . $pl);
    if (isset($_POST['buy'])) {
        $getData = $db->prepare('SELECT * FROM plans WHERE id=?');
        $getData->bind_param('i', $pl);
        if ($getData->execute()) {
            $res = $getData->get_result();
            if (($pn = $res->fetch_object()) !== null) {
                $proCode = rand(1, 100);

                $item['name'] = $pn->plan_name;
                $item['price'] = $pn->price_dollar;
                $item['code'] = $proCode;
                $_SESSION['cart'][$proCode] = $item;
            }
        }
    }
}

答案 1 :(得分:0)

尝试将删除周期更改为:

foreach ($_SESSION['cart'] as $key=>$cartItem) {
        if ($cartItem["code"] == $rem) {
            unset($_SESSION['cart'][$key]);
        }