Удаление значений из PHP-сессии - PullRequest
1 голос
/ 15 ноября 2011

Я строю основную корзину. Корзина хранится в сеансе с использованием идентификаторов продуктов.

Я могу добавлять предметы и удалять их.

Если товар добавлен более одного раза, корзина считает несколько записей.

Я не уверен, как изменить эти количества.

При взрыве сеанса корзины это выглядит так: 1,2,1,1

3 товара 1 и 1 товара 1.

Если я удаляю продукт 1, он удаляет все идентификаторы 1, что верно.

Но я не уверен, как удалить только 1 из них или установить, сколько должно быть там.

Это мой код обработки:

// 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;

Есть идеи?

Спасибо

Rob

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Вы не должны использовать строку с разделителями-запятыми для хранения вашей корзины вообще. Вместо этого $_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";
2 голосов
/ 15 ноября 2011

При добавлении товаров в корзину вы можете использовать такой формат:

$_SESSION['cart'][$productId] = $quantity

Таким образом, при добавлении товара

if (isset($_SESSION['cart'][$productId])
    $_SESSION['cart'][$productId]++;
else
    $_SESSION['cart'][$productId] = 1;

Удаление в этом случае будетбудь наоборот.Просто уменьшите количество удаляемого продукта.

...