В вашем коде есть несколько ошибок:
1) $ _SESSION ['cart'] выглядит как строка id
s, разделенных запятыми, то есть string(10) "1, 2, 3, 4"
Таким образом, $cartitems = explode(",", $items)
вернет массив этих идентификаторов, т.е. array(4)[ 1, 2, 3, 4 ]
2) Предполагая, что $_GET['remove']
является строкой, содержащей элемент id
, т.е. 3
Вызов unset($cartitems[$delitem])
удалит последний элемент моего примера массива, 4
, так как массивы индексируются с нуля.
Чтобы удалить значение 3
, вам нужно вызвать:
$delitem = array_search($_GET['remove'], $cartitems);
unset($cartitems[$delitem]);
(см. http://php.net/array_search)
3) Могу ли я предложить использовать PDO?http://php.net/manual/en/book.pdo.php
Редактировать: поскольку я не могу комментировать, Бармар:
Учитывая, что элементы OP хранятся в базе данных, а id
, вероятно, является первичным ключом, маловероятно, что онУ меня был бы предмет с id
из 0
, поэтому empty () должен был бы идеально подходить для его нужд.Объясняя по этому пункту, однако, OP, Barmar является правильным, что если являются на самом деле на основе id
s, вы бы хотели использовать isset($_GET['remove'])
, а не !empty($_GET['remove'])
См. http://php.net/isset и http://php.net/empty для различий.