2012-02-19 36 views
-1

我正在寫代碼從購物車中刪除項目。我不想使用unset($_SESSION['cart'])來取消設置整個會話變量,而是針對各個數組元素。假設在物品行上按下remove按鈕將提交存儲在變量'isbn'中的唯一ID。PHP未設置會話變量由元素

爲什麼這不起作用? unset($_SESSION['cart'][$_POST['isbn']]) ;

我的解決方法:

$isbn[] = $_POST['isbn'] ; 
$_SESSION['cart'] = array_diff($_SESSION['cart'],$isbn); 
+1

你顯示的內容應該工作。這需要進行基本的調試:'$ _POST ['isbn']'包含什麼?它是否100%地匹配會話數組中的值?使用'print_r()'輸出數組並仔細檢查值。 – 2012-02-19 14:48:57

+0

我認爲問題可能是[9] => $ _POST ['isbn']是實際值,例如9780192814968但爲了這個工作,我需要告訴程序哪個鍵我想解除 – raoulbia 2012-02-19 15:00:47

+0

'$ isbn'中的值是一個字符串,而$ _SESSION ['cart']'中的鍵是一個整數? – thetaiko 2012-02-19 15:35:21

回答

0

得到它! :)

foreach ($_SESSION['cart'] as $key => $val) 
    { 
     if($val == $_POST['isbn']) 
     { 
      unset($_SESSION['cart'][$key]) ; 
      header('Location: .') ; 
      exit() ; 
     } 
    } 

不過,我並不完全知道背後的魔力:

header('Location: .') ; 
exit() ; 

什麼用這兩行到底會發生?爲什麼它不起作用?

+0

位置:。理論上應該刷新瀏覽器(當它重定向到當前頁面)並退出時終止腳本(類似於die()):http://php.net/manual/en/function.exit.php – Tyzoid 2012-11-22 04:39:48