【问题标题】:shopping cart a bug when removing an item购物车移除物品时出现错误
【发布时间】:2011-05-19 17:43:51
【问题描述】:

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

我已经使用 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 时,当我添加一个项目时,我会在 qty 中得到 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;
});

【问题讨论】:

  • 请更仔细地解释您的问题,我无法理解这一点“当用户添加他刚刚删除的相同项目时的问题 id,当他添加该项目时,该项目的数量变为 4” !
  • 假设用户刚刚进入网站并且会话变量为空,然后用户将商品添加到购物车,该商品的数量将变为 1,但随后他将其从购物车中删除,但那么如果他再次添加它,数量将变为 2 而不是 1
  • 您是否在两个 php 文件中使用相同的会话处理代码?删除后是否保存会话状态?
  • 我的问题中的所有 php 代码都在一个 php 文件中。

标签: php jquery cart shopping


【解决方案1】:

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

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

应该是你所需要的。


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

这段代码是您需要从上面调用unset() 的地方。就目前而言,这个语句什么都不做。

【讨论】:

  • 是的,我试过这个删除了测试的 cookie,但仍然是同样的问题
  • 如果你的意思是我需要从 if 中删除 unset 并将其放入 else 我这样做了,仍然是同样的问题,我尝试在 if 和 else 中都放入 unset 哈哈,仍然没有什么问题可能出在添加新项目的代码上。
  • 不,该代码看起来不错。但是,如果从购物车中删除“4”项,然后添加其他内容使其计数为“5”,那么您没有正确地从购物车中删除该项目。 PHP 不记得你有 4 个,除非那个 4 还在会话中。
  • 所以你说这个错误是当用户删除一个项目时它没有正确删除它,如果是这样,也许我需要取消设置数量?
  • 是的。在您进行任何购物车操作之前和之后执行print_r($_SESSION['cart']),看看发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多