我正在建立一个基本的购物车。购物车存储在会话中使用产品ID。
我可以添加项目并将其删除。
如果项目被多次添加,则购物车会计算多个条目。
我不确定如何更改这些数量。
当爆炸推车会话时,它看起来像这样:1,2,1,1
有3 x产品1和1 x产品1.
如果我删除了产品1,它会删除所有正确的1个ID。
但我不确定如何删除其中的一个或设置应该有多少。
这是我的处理代码:
// Process actions
$cart = $_SESSION['cart'];
@$action = $_GET['action'];
switch ($action) {
case 'add':
if ($cart) {
$cart .= ','.$_GET['id'];
} else {
$cart = $_GET['id'];
}
break;
case 'delete':
if ($cart) {
$items = explode(',',$cart);
$newcart = '';
foreach ($items as $item) {
if ($_GET['id'] != $item) {
if ($newcart != '') {
$newcart .= ','.$item;
} else {
$newcart = $item;
}
}
}
$cart = $newcart;
}
break;
$cart = $newcart;
break;
}
$_SESSION['cart'] = $cart;
有什么想法吗?
由于
罗布
答案 0 :(得分:3)
您不应该使用逗号分隔的字符串来存储购物车。相反,$_SESSION['cart']
应该是包含产品数量的数组。
数组的结构变为$_SESSION['cart'][$product_id] = $quantity_in_cart
这允许您从购物车增加/减少数量。当它们达到0时,如果您愿意,可以完全删除它们。这比实现修改逗号分隔的字符串更容易实现和跟踪。
// Initialize the array
$_SESSION['cart'] = array();
// Add product id 1
// If the array key already exists, it is incremented, otherwise it is initialized to quantity 1
$_SESSION['cart'][1] = isset($_SESSION['cart'][1]) ? $_SESSION['cart'][1]++ : 1;
// Add another (now it has 2)
$_SESSION['cart'][1] = isset($_SESSION['cart'][1]) ? $_SESSION['cart'][1]++ : 1;
// Remove one of the product id 1s
$_SESSION['cart'][1]--;
// Add product id 3
$_SESSION['cart'][3] = isset($_SESSION['cart'][3]) ? $_SESSION['cart'][3]++ : 1;
// Delete the item if it reaches 0 (optional)
if ($_SESSION['cart'][1] === 0) {
unset($_SESSION['cart'][1]);
}
然后免费,您可以轻松查看商品数量:
// How many product 2's do I have?
$prod_id = 2;
echo isset($_SESSION['cart'][$prod_id]) ? $_SESSION['cart'][$prod_id] : "You have not added this product to your cart";
答案 1 :(得分:2)
将商品添加到购物车时,您可以使用以下格式:
$_SESSION['cart'][$productId] = $quantity
所以,在添加产品时
if (isset($_SESSION['cart'][$productId])
$_SESSION['cart'][$productId]++;
else
$_SESSION['cart'][$productId] = 1;
在这种情况下,删除只是反过来。只需减少要移除的产品的数量。