Помогите написать корзину на сессиях

robinner

Новичок
Помогите написать корзину на сессиях

Всем привет.
Не могу написать скрипт корзины покупателя...
Реально не понимаю. Как можно реализовать?
Чтобы на странице отображало количество товара и общуюу сумму , и можно было добавлять и удалять.
А на странице корзины уже все остальные операции. Товар идентифицируется по id.
В нете не могу найти работающий скрипт, просто я бы посмотрел и понял как работает
Помогите плиз.
 

Фанат

oncle terrible
Команда форума
сначала потренируйся без сессий.
потому что корзина - это обычный массив.
Когда научишься из массива вывести количество и сумму - просто положишь его целиком в сессию
 

robinner

Новичок
вот я и не знаю как оно работает.пытался разобраться.
что-то не получилось я так понял нужно номеру массива присвоить значение я как то не особо догоняю
 

baev

‹°°¬•
Команда форума
robinner, сделайте массиву print_r() или var_dump().
Может тогда «догоните»…
 

robinner

Новичок
а как лучше передать ид?скрытое поле и методом пост или еще как?
 

Фанат

oncle terrible
Команда форума
ну так тебе не сессии, а формы надо учить
напиши гостевую сначала с редактированием

-~{}~ 27.12.09 17:56:

показывай, что делал и что не получается.
 

robinner

Новичок
та гостевую я уже давно написал:)гостевая это уже пройденый этап.

А по поводу корзины даже не могу придумать с чего начать
 

Фанат

oncle terrible
Команда форума
добавление товара в корзину это новното же самое, что и редактирование гостевой.
ты при редактирвоании как id записи передаешь?
Вот и в корзину передавай точно так же.
а как лучше передать ид?скрытое поле и методом пост
ну а как еще-то?
ты уже попробовал?
 

robinner

Новичок
:)Корзину сделал на половину:)то есть то что сделал работает безупречно, остановился потому что пока другим занят.
хочу спросить ваше мнение...
1 у меня выводится на странице товаров кол-во товара общая сумма и плюс список товара с отдельной стоимостью, как думаете это лучше?
просто везде только сумма общая и кол-во ,но мне кажется что это дополнение удобно

единственный момент мне не нравится когда скролл внизу то после добавления товара он прокручивается в начало страницы, а это напрягает, как можно убрать этот баг?спасибо
 

dimagolov

Новичок
единственный момент мне не нравится когда скролл внизу то после добавления товара он прокручивается в начало страницы, а это напрягает, как можно убрать этот баг?
в html есть якоря (тег <a>) для таких случаев.
 

robinner

Новичок
спасибо

-~{}~ 03.01.10 17:59:

Что-то я так и не понял как обрабатывать данные из формы, где несколько одинаковых переменных

вот код

<?php
$tovar_id = $_POST['tovar_id'];
$cart_del = $_POST['cart_del'];
$n_tov = $_POST['n_tov'];
$to_count = $_POST['to_count'];
$sub_one = $_POST['sub_one'];
//Очистка корзины единственное что работает
if(isset($cart_del))
{
unset($_SESSION['cart']);
unset($_SESSION['tovar']);
unset($_SESSION['n_tovar']);
}
//присваивание коэффициэнта количества тут не доделано и работает не правильно
if(isset($to_count))
{
$_SESSION['n_tovar'][$tovar_id] = $n_tov;
}
if(!empty($_SESSION['cart']))
{
$k = $_SESSION['valute'];
$ed = $_SESSION['ed'];
//удаление одного товара вообще не удаляет
if(isset($sub_one))
{
unset($_SESSION['cart'][$tovar_id]);
unset($_SESSION['tovar'][$tovar_id]);
unset($_SESSION['n_tovar'][$tovar_id]);
}
echo "<table id=cart_t><form method=post><tr><td class=td1>Наименование:</td><td>Цена:</td><td>Выполнить:</td></tr>";
//Вывод товара по циклу
foreach ($_SESSION['tovar'] as $n => $tovar)
{
echo "<tr><td class=td1>".preg_replace("/\|/", " ", $tovar)."</td><td>".ceil($_SESSION['cart'][$n] / $k)." ".$ed."</td><td>Кол-во: <input name=n_tov[$n] type=text value='".$_SESSION['n_tovar'][$n]."' class=cart_in><input name=tovar_id[$n] type=hidden value=$n id=$n><a onclick=cartPlus(); title=+1>+</a><a onclick=cartMinus(); title=-1>-</a><input type=image src=images/cart_del.gif name=sub_one[$n] title=Удалить></td></tr>";
}
$a = $_SESSION['cart'];
echo "<tr><td class=td2 colspan=3>Кол-во товаров: ".count($a)." шт. Общая сумма: ".ceil(array_sum($a) / $k)." ".$ed." <input type=submit name=to_count value=Пересчитать id=cart_sub><input type=submit name=cart_del value=Очистить id=cart_sub></td></tr></form></table>";
}
else
{
echo "Корзина пуста";
}
?>

посмотрите, пожалуйста, подскажите ,да и вообще скажите что в коде глупо, подозреваю, что глупостей там хватает ,заранее спасибо
 

dimagolov

Новичок
Скажи, а почему ты создаешь массивы значений в форме, а работаешь с ними как со скалярами? не удивительно, что оно работает не так, как нужно.

Ну и как обычно, зачем копировать значения из $_POST в переменные? чтобы добавить к лог нотисов и потом было бы трудней было понять код?

Зачем делать скрытое поле tovar_id? может проще индексом всех массивов в форме сделать именно его, то есть избаивться от промежуточных индексов? И код упроститься.

И по-моему хранить корзину в сессии проще в виде массива типа
$_SESSION['cart']['id']=num, а все остальное, что ты там хранишь, брать из базы по id товара, так как пользователь их поменять не может, а значит и хранить их в сессии нету смысла.
 

robinner

Новичок
вот я не пойму что мне делать?!
просто вам реально, это легко , а я не понимаю.
ну скрытое поле перенес понятно с предшествующего кода там он вроде нужно было,тут наверное можно убрать,но тока надо понять что мне делать с нумерацией:
но тут запутался и не могу понять
у меня просто такое бывает могу бороду распутать а могу запутаться в простой ситуации и потом когда все таки распутаю стыдно становится, я просто чайник...

-~{}~ 04.01.10 01:38:

dimagolov ну я просто подумал зачем обращаться к БД постоянно? а вдруг,крупный сайт?пусть лучше в сессиях все храниться
 

dimagolov

Новичок
robinner, ты пока оптимизацией заниматься не пытайся. тебе во-первых еще долго она не понадобиться, а во-вторых все равно сделаешь только хуже.

ты ведь список товаров все равно из базы берешь? и там же есть товары те, что в корзине? так нахрена из еще в сессии хранить? и потом, обычный сервер БД отдает большую часть запросов из кеша, и твои товары будут в том кеше на 99%.

про индексы. сейчас ты в форму пихаешь индексы 0,1,2,3,4 и потом по массиву id выясняешь какой продукт выбрали. если у тебя нельзя класть в корзину несколько раз один и тот же товар, то в качестве индекса ты можешь использовать id товара, потом делаешь
PHP:
foreach($_POST['num'] as $id => $requested_num)
и получаешь пары $id => $requested_num для каждого выбранного в форме товара. никакие другие массивы смотреть не придется, чтобы посмотреть что заказано. аналогично смотришь удаленные. и убирать "лишние" кол-ва (до обработки $_POST['num']) по удаленным будет просто и понятно
PHP:
foreach($_POST['deleted'] as $id => $val) {
   if ($val)
      unset($_POST['num'][$id]);
}
 

robinner

Новичок
Все корзину сделал...:)
Решил велосипеды не городить, а сделать просто(ну , может еще проще можно было).на странице товаров показывает только количество товара и общую стоимость инфа храниться в в таком сесии [id][количество] думаю нормально

Спасибо всем кто, помогал!
 
Сверху