Php 购物车删除项目时会出现错误
我总是在网上冲浪,寻找答案,我只是在找不到答案时问 我使用jquery和php构建了一个小型购物车 只有一个bug我想不出来 当用户添加项目时,该项目将添加数量1。如果他再次添加相同的项目,数量将变为2,依此类推Php 购物车删除项目时会出现错误,php,jquery,cart,shopping,Php,Jquery,Cart,Shopping,我总是在网上冲浪,寻找答案,我只是在找不到答案时问 我使用jquery和php构建了一个小型购物车 只有一个bug我想不出来 当用户添加项目时,该项目将添加数量1。如果他再次添加相同的项目,数量将变为2,依此类推 $(".shop_cart").submit(function() { var data = $(this).serialize(); $.ajax({ type: 'post', url: 'cart.inc.php',
$(".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;
});
假设用户选择了一个项目,数量为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];
}
}
这是从购物车中删除的代码
$(".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;
});
从购物车中删除项目时未设置错误的值:
unset($_SESSION['cart'][$remove]);
这应该是你所需要的
这一小段代码就是您需要从上面放置
unset()
调用的地方。就目前情况而言,此声明没有任何作用。请更仔细地解释您的问题,我无法理解这一点“当用户添加刚删除的同一项目时,问题id,该项目的数量变为4”!假设用户刚进入站点,会话变量为空,则用户将一个项目添加到购物车,该项目的数量将变为1,但随后他将其从购物车中删除,但如果他再次添加,则数量将变为2,而不是1。您是否在两个php文件中使用相同的会话处理代码?删除后是否保存会话状态?我问题中的所有php代码都在一个php文件中。是的,我尝试过删除测试的Cookie,但仍然存在相同的问题如果你的意思是我需要从if中删除unset并将其置于int中,则我执行了此操作,并且仍然存在相同的问题,我尝试将unset置于if和else lol中仍然没有什么问题,可能是添加新项目的代码有问题。不,代码看起来不错。但是,如果从购物车中删除“4”项,然后添加其他内容使其成为“5”计数,那么您没有正确地从购物车中删除该项。PHP不记得你有4个,除非那4个还在会话中。所以你说错误是当用户删除一个项目时,它没有正确地删除它,如果是这样的话,也许我需要取消设置数量?是的。在进行任何购物车操作之前和之后,执行print\r($\u SESSION['cart'])
以查看发生了什么。
} else {
$_SESSION['cart'][$remove];
}