0

我总是在网上冲浪和堆栈溢出来寻找答案,我只是在找不到答案的时候问。

我已经使用 jquery 和 php 构建了一个小型购物车。

只有一个错误我无法弄清楚。

当用户添加一个项目时,该项目的数量为 1。如果他再次添加相同的项目,数量变为 2,依此类推。

假设用户选择了一个项目并且数量为 2。如果他单击删除按钮一次,该项目的数量变为 1。这就是我想要的,但如果他再次单击删除按钮,该项目将被删除。

问题是当用户添加他刚刚删除的相同项目时。当他添加它时,该项目的数量变为 4。

这是添加项目的代码:

    @$new = $_POST['item'];

    if($new) {
        if(!isset($_SESSION['cart'])) {
            $_SESSION['cart'] = array();
            $_SESSION['items'] = 0;
            $_SESSION['total_price'] = '0.00';
        }

        if(isset($_SESSION['cart'][$new])) {
            $_SESSION['cart'][$new]++;
        } else {
            $_SESSION['cart'][$new] = 1;
        }

    }

这是删除项目的代码..

    @$remove = $_GET['remove'];
    if($remove) {

        if(isset($_SESSION['cart'][$remove])) {
            $_SESSION['cart'][$remove]--;

                foreach ($_SESSION['cart'] as $item => $qty) {
                    if($qty < 1) {
                        unset($_SESSION['cart'][$qty]);
                        unset($_SESSION['cart'][$item]);
                    }
                }

        } else {
            $_SESSION['cart'][$remove];
        }


    }

我是 php 和一般编程的新手;我1个月前开始学习。

编辑:问题出在javascript代码上,禁用了javscript,购物车运行良好,启用javascript时,当我添加一个项目时,我在数量中得到2而不是1,如果我删除该项目并将其再次添加到购物车,它会成倍增加数量从 2 到 4,依此类推。

    $(".shop_cart").submit(function() {
    var data = $(this).serialize();

    $.ajax({
        type: 'post',
        url: 'cart.inc.php',
        data: data,
        cache: false,
        success: function(data) {
            $("#cart").html(data);
        }
    });

    return false;
});

这是从购物车中删除的代码

    $(".remove").click(function() {
    var remove = 'remove=' + $(this).attr('id')

        $.ajax({
            type: 'get',
            url: 'cart.inc.php',
            cahce: false,
            data: remove,
            success: function(data) {
                $("#cart").html(data);
            }
        })
    return false;
});
4

1 回答 1

2

从购物车中删除商品时,您正在取消设置错误的值:

unset($_SESSION['cart'][$remove]);

应该是你所需要的。


    } else {
        $_SESSION['cart'][$remove];
    }

这段代码是您需要unset()从上面进行调用的地方。就目前而言,这个声明没有任何作用。

于 2011-05-19T17:57:47.790 回答