2012-02-19 4 views
-1

Я пишу код для удаления элементов из корзины покупок. Вместо того, чтобы отменить всю переменную сеанса с помощью unset($_SESSION['cart']), я хотел бы настроить таргетинг на отдельные элементы массива. Предположим, что нажатие кнопки remove в строке позиции отправит уникальный идентификатор, сохраненный в переменной 'isbn'.PHP отключить переменную сеанса по элементу

Почему это не работает? unset($_SESSION['cart'][$_POST['isbn']]) ;

мой обходной путь:

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

То, что вы показываете, должно работать. Это требует базовой отладки: что содержит '$ _POST ['isbn']'? Соответствует ли это 100% значению в массиве сеансов? Используйте 'print_r()', чтобы вывести массив и дважды проверить значения. –

+0

Я думаю, проблема может заключаться в том, что [9] => $ _POST ['isbn'] является фактическим значением VALUE, например. 9780192814968, но для этого мне нужно сообщить программе, что KEY я хочу удалить – raoulbia

+0

Может ли значение в '$ isbn' быть строкой, а ключ в' $ _SESSION ['cart'] 'является целым числом? – thetaiko

ответ

0

получил его! :)

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

Однако, я не совсем уверен в магии позади:

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

, что происходит именно с этими двумя линиями? почему это не работает, если это опускается?

+0

Местонахождение:. должен теоретически обновлять браузер (поскольку он перенаправляет его на текущую страницу), а exit завершает сценарий (аналогично die()): http://php.net/manual/en/function.exit.php – Tyzoid

Смежные вопросы