2012-02-19 35 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