Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как хранить товары в корзине?


Автор: Jiffi 27.5.2011, 13:11
У меня только одно соображение - в cookies, но возникает вопрос, как хранить там несколько товаров?

Автор: ayax2005 27.5.2011, 13:35
Корзина обычно хранится в сессии.

Автор: Jiffi 27.5.2011, 14:30
А если пользователь не сразу хочет оформить заказ, а потом?

Автор: wwwalera 27.5.2011, 21:38
Цитата(Jiffi @ 27.5.2011,  14:30)
А если пользователь не сразу хочет оформить заказ, а потом?

новую таблицу в бд и напоминание в следующих сессиях

Автор: Valinur 27.5.2011, 23:50
можно хранить в базе, создать строковое поле и добавлять туда ID товаров через запятую.
А когда будешь показывать товары в корзине делай обычный 
Код

select * from product where id IN('тут список id товаров в корзине')

Автор: Jiffi 28.5.2011, 00:21
а как тогда напомнить пользователю, что он выбрал в прошлый раз, ели сессию он разорвал?

Автор: wwwalera 28.5.2011, 00:43
Цитата(Jiffi @ 28.5.2011,  00:21)
а как тогда напомнить пользователю, что он выбрал в прошлый раз, ели сессию он разорвал?

ну обычно при совершении покупок с корзины ,а не через оператора, пользователь авторизируется 

Автор: skyboy 29.5.2011, 23:59
подытожу:
1. чисто список в куках. недостатком привязка к компьютеру и технические ограничения(сколько там в куку можно запихнуть?). достоинство - может хранится бесконечно в отличие от сесионной информации.
2. в сессии. так как идентификатор сессии по-прежнему в куках, то привязка к компьютеру остается. плюс через определенное время неактивности сборщик мусора кокнет сессию. что тоже минус.
3. в базе данных. минусом - обязательность регистрации(а к чему ещё привязываться, кроме логина и пароля? к сессии, которая истечет? к кукам, которые только на одном компьютере?). плюсом - на любом компе можно получиться доступ. плюс статистика на серверной стороне(уж не знаю, для чего).
из того, что встречал вживую и нахожу удобным: гибридная система. регистрация не требуется, корзина хранится в сессии(дополнительная безопасность: если компьютер общественный и человек не завершил оформление заказа, то через, скажем, полчаса другой пользователь уже не узнает, "что ж там Вася заказывал?"). при регистрации содержимое корзины сохраняется в БД и для залогиненных уже работает сохранение в БД. с одной стороны, обязательна возможность заказа без обязательной регистрации, с другой стороны, если уж надумал региться, чтоб не закончилось "#%#$%! Я столько товаров надобавлял, а после регистрации корзина обнулилась!"

Автор: Jiffi 30.5.2011, 00:45
магазин региональный (масштаб охвата не большой).

Регистрация я думаю лишняя (смысла пока что не вижу).

А если сделать такой гибрид:
В cookies хранить уникальный номер (PIN)
А в БД сделать таблицу: id | pin | id_tovara
И соответственно читать cookies и искать в этой таблице, какой товар лежит в корзине.
Так же можно выдавать этот пин пользователю и он может ввести его на другом компьютере и посмотреть корзину + можно дать возможность удалять cookies и никто не узнает  "что ж там Вася заказывал?"

Идея рабочая?

Автор: skyboy 30.5.2011, 16:07
Цитата(Jiffi @  29.5.2011,  23:45 Найти цитируемый пост)
Так же можно выдавать этот пин пользователю

и кто угодно сможет посмотреть в чужую "корзину"? И адрес доставки тоже увидеть?
а чем отличается этот "пин" от связки "логин+пароль"? 

Автор: xarakiry 30.5.2011, 20:11
Зачем же засорять базу информацией, которая вообще может и не понадобиться.

Я делаю на сессиях. К примеру у нас 3 товара с id 1,2 и 3

Бросаем в сессию

Код

$_SESSION['prod']['1']
$_SESSION['prod']['2']
$_SESSION['prod']['3']


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

Код

$_SESSION['prod']['1']['count']=2
$_SESSION['prod']['1']['price']=5.45


и т.д

А потом легко просто получить и общую стоимость товара и количество заказанных.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)