так.
вобщем заказы мы будем хранить в $_SESSION['cart']
это у нас будет массив, элементами которого будут являться отдельные товары + их атрибуты
рассмотрим отдельный товар, это тоже массив, который включает в себя наименование, цену и кол-во
$tovar1 = array ('id' => '24', 'name'=>'Вагины резиновые', 'price' => 1500, 'count' => 3);
$tovar2 = array ('id' => '548', 'name'=>'Фалосы металические', 'price' => 3500, 'count' => 1);
вот здесь пример 2 товаров, первого товара — 3 штуки по 1500 за 1 и соответственно 1 шт. металических по 3500.
у каждого товара свой id (берется из базы)
их очень просто ложить в нашу "корзину"
$_SESSION['cart'][] = $tovar1; //положили вагины
$_SESSION['cart'][] = $tovar2; //положили фалосы
сейчас у нас "корзина" выглядит так:
$_SESSION['cart'] = array(
0 => array ('id' => '24', 'name'=>'Вагины резиновые', 'price' => 1500, 'count' => 3),
1 => array ('id' => '548', 'name'=>'Фалосы металические', 'price' => 3500, 'count' => 1)
);
так.
для удаления товара из корзины, мы воспользуемся этой функцией:
function delArrayElementByKey($array_with_elements, $key_name)
{
$key_index = array_keys(array_keys($array_with_elements), $key_name);
if (count($key_index) != '')
{
array_splice($array_with_elements, $key_index[0], 1);
}
return $array_with_elements;
}
т.е. нам необходимо передавать индекс массива $_SESSION['cart']
например, чтобы удалить вагины из корзины, мы будем передавать key=0, чтобы фалосы — key=1
Все изменения, удаления и т.д. требуют прохождения по массиву корзины foreach'em, т.к. мы идентифицируем наши товары по id (ну это id auto_increment'ная запись в базе):
удаление:
foreach ($_SESSION['cart'] as $pkey => $pgoods)
{
// $del_id — id записи, который мы передаём, чтобы удалить её
if ($pgoods['id'] == $del_id)
{
$_SESSION['cart'] = delArrayElementByKey($_SESSION['cart'], $pkey);
break;
}
}
изменение количества (кнопка пересчитать, когда мы оформляем заказ и изменяем кол-во товаров):
допустим, нам новый величины кол-ва пришли в $_POST в формате $_POST['id_товара'] = 'новое кол-во';
foreach($_POST as $id => $newq)
{
$newq = intval($newq);
if ($newq < 1)
$newq = 1;
foreach($_SESSION['cart'] as $cid => $good)
{
if ($good['id'] == $id)
$_SESSION['cart'][$cid]['count'] = $newq;
}
}
очистка корзины:
$_SESSION['cart'] = array();
данные хранятся на сервере, поэтому их нет необходимости перепроверять и пересчитывать общее кол-во товаров и общую стоимость, рекомендуется, при добавлении/удалении прибавлять к общей сумме цену товара и кол-во и хранить где-нить в $_SESSION['cart_sum'] и $_SESSION['cart_count']
все умрут, а я изумруд