从PHP Session中删除值

时间:2011-11-14 21:32:12

标签: php session explode

我正在建立一个基本的购物车。购物车存储在会话中使用产品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;

有什么想法吗?

由于

罗布

2 个答案:

答案 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;
在这种情况下,删除只是反过来。只需减少要移除的产品的数量。