2011-11-14 15 views
1

私は基本的なショッピングカートを構築しています。カートに保管されているセッションには製品IDが使用されます。PHPセッションからの値の削除

アイテムを追加して削除できます。

アイテムが複数回追加された場合、カートは複数のエントリをカウントしています。

これらの数量を変更する方法がわかりません。

カートのセッションを爆発

が、それは次のようになります。1,2,1,1

あり3×製品1と1×製品1

私は、製品1を削除した場合、それ1つのIDがすべて削除されます。

しかし、私はそれらのうちの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; 

任意のアイデア?

おかげ

ロブ

答えて

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"; 
+0

ああ、私はあなたがそこに配列を格納することができなかった、私は配列に配列を爆発されたので、これははるかに良い作品です。私は、セッションを読んでいたコードの他の部分を大部分が使えました。ありがとう – Greybeard

2

ショッピングカートにアイテムを追加するとき、あなたはこのようなフォーマットを使用することができます。

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

だから、製品を追加するとき

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

この場合、削除は単純に逆になります。削除される製品の数量を減らすだけです。

+0

ありがとう!上記のコメントの横にこれを使用すると、それを得るのに役立ちました。乾杯 – Greybeard

関連する問題