- $ _ SESSION - это просто массив.
- Массив хранится в $ _SESSION ['cart'].
- Кажется, вы перезаписываете этот массив, толькоНедавно добавленный элемент.
Например, этот код:
if (isset($_POST['submit']))
{
$cart= new Cart();
$cart->add($_POST['id'],2);
$item= $cart->getCart();
$_SESSION["cart"]=$cart;
}
можно изменить на:
if (isset($_POST['submit']))
{
$_SESSION["cart"][$_POST['id']] = 2;
}
Теперь просто добавимв массив, сохраненный в $ _SESSION ['cart'].Обратите внимание, что он вообще не использует корзину.
Попробуйте:
if (isset($_POST['submit']))
{
$cart= new Cart($_SESSION["cart"]); // this should bring in the previous items
$cart->add($_POST['id'],2); // what is this magic number '2'? Quantity? But where is it from?
$_SESSION["cart"] = $cart->getCart();
}
Редактировать: Еще несколько объяснений.
Конструктор класса корзины принимает параметрчто он хранит внутри:
private $cart;
function __construct($cart="") {
$this->cart = $cart;
}
Если честно, это должно быть немного умнее:
private $cart;
function __construct($cart = array()) {
if (is_array($cart))
{
$this->cart = $cart;
}
else
{
// maybe print some error, informing the developer that he's using the cart class incorrectly
// or better yet, trigger a PHP warning:
trigger_error('Cart class constructor expects an array parameter', E_USER_WARNING);
}
}
Это изменение защищает от предоставления чего-либо, кроме массива конструктору.Обратите внимание, что ему все еще может быть предоставлен массив, который класс не понимает, например, многомерный массив.В этой ситуации класс корзины не будет уничтожать существующие данные в массиве, если идентификатор элемента не соответствует одному из ключей в исходном массиве.