2014-03-28 40 views
0

我一直在努力尋找一個簡單的購物車與$_SESSION解決方案。 我一直是很簡單的,這是我的代碼現在PHP會話購物車:更新產品,如果它已經是會話編號

if (Input::isPost('add')) { 

    $id = Input::get('id'); 
    $qta = Input::post('qta'); 
    $size = Input::post('size'); 

    if (!isset($_SESSION['cart'])) { 
     $_SESSION['cart'] = array(); 
    } 

    if (array_key_exists($id, $_SESSION['cart'])) { 
     if ($_SESSION['cart'][$id][0] == $size) { 
      $_SESSION['cart'][$id][1]+=$qta; 
     } else { 
      $_SESSION['cart'][$id] = array($size, $qta); 
     } 
    } else { 
     $_SESSION['cart'][$id] = array($size, $qta); 
    } 

} 

那麼,這是什麼代碼呢?

1)如果$_SESSION['cart']不存在,創建它,否則添加新項目。 2)當您將物品添加到購物車時,您必須爲該物品選擇尺寸和數量。 3)如果該商品已經存在於購物車陣列中,請檢查尺寸是否相同,如果是,請更新數量。這裏是問題,如果該項目已經存在(檢查$_SESSION['cart'][$id]),但大小不同,請不要更新當前項目,而是創建一個新項目。問題是,當前的一個正在被替換而不是添加一個,因此,而不是兩個產品具有相同的id但不同的size,我只有最近的一個。

如果你能幫我解決它,我會非常感謝!

預先感謝您。

回答

1

嘗試使用大小作爲多維數組中的額外維的關鍵點。您目前的代碼只允許您爲每件商品添加一種尺寸。

你最終會得到這樣的:

if (Input::isPost('add')) { 

    $id = Input::get('id'); 
    $qta = Input::post('qta'); 
    $size = Input::post('size'); 

    if (!isset($_SESSION['cart'])) { 
     $_SESSION['cart'] = array(); 
    } 

    if (array_key_exists($_SESSION['cart'][$id][$size])) { 
     $_SESSION['cart'][$id][$size] += $qta; 
    } else { 
     $_SESSION['cart'][$id][$size] = $qta; 
    } 
} 
+0

哦,男人,不能夠感謝你。儘管我不得不修改if語句並檢查isset($ _ SESSION ['cart'] [$ id] [$ size])而不是array_key_exists(),因爲數量會替換而不是添加到當前數據。再次感謝你 ! –

+0

不用擔心,很高興能夠幫助! –

1

更好的方法是創建另一個名爲sizes的數組,並在其中存儲大小。所以,你的代碼看起來像

if (in_array($size, $_SESSION['cart'][$id]['sizes'])) { 
    //The size has been added to the cart 
} else { 
    //The size isn't in the cart so add it 
    $_SESSION['cart'][$id]['sizes'][] = $size; 
} 

此外,而不是存儲量就像

$_SESSION['cart'][$id][1]+=$qta; 

你爲什麼不有更多的有意義的鍵字這樣你就可以瞭解數組的內容更好。例如

$_SESSION['cart'][$id]['qty']+=$qta; 
1

的問題是在這裏:

if ($_SESSION['cart'][$id][0] == $size) { 
    $_SESSION['cart'][$id][1]+=$qta; 
} else { 
    $_SESSION['cart'][$id] = array($size, $qta); 
} 

如果大小是不同的,您可以通過一個新的數組(該集團的else更換)。 這就是你的數組:

Array(
    'cart'=>array(
     'id'=>array('size', 'qta') 
    ) 
) 

有了這個結構,你可以有一個ID只有一個尺寸,所以如果你想添加另一個,而不是取代舊的,你應該考慮與工作:

Array(
    'cart'=>array(
     'id'=>array(0=>array('size1'=>'qta1'), 1=>array('size2'=>'qta2')) 
    ) 
) 

當然,這意味着您需要遍歷數組以找到正確的大小,然後更新qta。不好玩。

這種結構可能更有趣的一起工作:

Array(
    'cart'=>array(
     'id'=>array('size1'=>'qta1', 'size2'=>'qta2') 
    ) 
) 

所以,不是檢查$_SESSION['cart'][$id][0] == $size,你只需要檢查是否存在$_SESSION['cart'][$id][$size](與array_key_exists),並繼續:)

+0

謝謝,與@JoseB相同的解決方案,並稍微修改它的工作。 –

0
$postedQuantity = intval($_POST['quantity']); 
$postedProduct = $_POST['product']; 
$postedSize = $_POST['size']; 

$productId = $_POST['product'] . $_POST['size'];// concat the product name/Id and //the size form a new array-key.it will be unique. 

if(empty($_SESSION)){ 
$_SESSION['cart_items'] = array(); 
} 

if(empty($_SESSION['cart_items'])) { 
    $_SESSION['cart_items'][$productId] = array('name'=> $_POST['product'], 
              'quantity'=> intval($_POST['quantity']), 
              'size'=>$_POST['size'], 
           ); 
} elseif(!array_key_exists($productId,$_SESSION['cart_items'])) { 
    $_SESSION['cart_items'][$productId] = array('name'=> $_POST['product'], 
            'quantity'=> intval($_POST['quantity']), 
            'size'=>$_POST['size'], 
           ); 
} 
else { 
    $_SESSION['cart_items'][$productId]['quantity'] += $postedQuantity; 
}