Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
.
Как сделать корзину на сайте
Собственно топик не возник сам собой. На то есть причины.
А причины как всегда просты - повальное желание новичков взять эту "высоту".
И прямо таки в последние две недели - обострение вопросов на данную тему.
И как всегда каждый лепит велосипеды - кто во что горазд.
Так давайте же покажу вам как сделать все быстро просто понятно и красиво.
Сразу определяем задачи:
1) Работаем с MySQL.
2) Нужен учет позиций и их кол-во, т.е. так: "Товар 1 - 6 шт., Товар 2 - 1 шт."
3) Минимум запросов и вообще минимум кода.
Ну так поехали.
Создаем две таблицы.
Первая будет тестовой таблицей с продуктами.
Надо ж на чем то показывать что у нас все работает
Тут у нас айдишник товара, название и цена (DECIMAL) это типа если с копейками будет.
Вторая табличка, собственно, это сама корзина.
Называйте её как хотите, я назвал её basket.
Кому не нравится - дело ваше, именуйте её cart, сути не меняет.
Тут у нас хеш корзины пользака и айдишник товара.
Ну чтобы знать кто добавил и что добавил.
Кому не нравится MYISAM, тоже дело ваше, хотите, ставьте InnoDB.
Я не буду в данной статье вдаваться в подробности различия "движков" для таблиц.
Запиливаем тестовые товары в таблицу товаров.
Штук двести сразу, чтоб было из чего выбирать.
Коннект к БД я опустил, надеюсь что подключаться к базе вы умеете.
А если не умеете, то и эту статью читать вам рано
Простите уж за запросы в цикле, но в одну обсуждаемую тему не уместить всего того,
что необходимо делать правильно. Вобщем запросы в цикле - это очень плохо.
Надеюсь тут дядю (меня) читатели простят
Так же простите что использую DEPRECATEDmysql_*.
Но обсуждение данного вопроса, я так же намеренно опустил.
mysql_query("INSERT INTO products (id,name,price) VALUES (NULL,'$name',$price)");
}
Теперь, когда тестовые данные готовы, таблицы созданы, и солнце светит ярко...
Создадим наконец наш отдельный файл, который будет являться обработчиком для действий с корзиной basket.php:
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
ну это если пользователь, а если гость??? в основном таки все магазы так и работаю - вначале корзина, после как доходит дело до заказа - рега, или даже если зареген, но не авторизован - та же проблема. ИМХО айпишник нужно юзать в качестве принадлежности кукис и записей в базе
----- То что программа работает, не означает что она написана правильно!
KingStar
Отправлено: 31 Января, 2013 - 06:30:48
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
хотя... может и зря я принцип то тот же (Добавление)
посмотрел, смотря что понимать под хешем у меня как раз таки хеш есть хеш (Добавление)
я бы сделал тип таблицы int(10) unsigned и кидал бы IP с INET_ATON
----- То что программа работает, не означает что она написана правильно!
DeepVarvar
Отправлено: 31 Января, 2013 - 06:42:59
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
KingStar пишет:
IP с INET_ATON
Ну тут еще и заказчик может начать решать. Нужна ли ему жесткая привязка к IP или нет.
Может и не нужна. А так на деле всеравно манагер перезванивает покупателю и уточняет-подтверждает заказ.
И если покупатель не подтвердил лично - заказ аннулируется.
Смысл привязываться к IP?
Так же нет смысла держать какие-то сессии корзины у залогиненого пользака.
Когда дело дойдет до формы заказа - просто подставляем ФИО из профиля.
Вопросы скидок и спец-условий я тут не рассматривал.
Это уже сложнее, и может быть не понято с ходу
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
что там происходит потом -это уже дело рук самого человека, на страничке же нужно предоставить пользователю все возможные варианты. Привязав заказ к IP мы можем точно знать на время подключения, что тот или иной заказ принадлежит тому или иному пользователю, и если уж дело дошло до заказа товара - то на этом этапе уже следует добавлять товар в базу и привязать его к конкретному пользователю из базы (либо добавить нового и привязать к ластинсерт)
Цитата:
Так же нет смысла держать какие-то сессии корзины у залогиненого пользака.
так же как и нет смысла держать в базе заказы гостя, пока он не авторизуется или не зарегится
----- То что программа работает, не означает что она написана правильно!
DeepVarvar
Отправлено: 31 Января, 2013 - 07:48:19
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
KingStar пишет:
так же как и нет смысла держать в базе заказы гостя
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
Мелкий согласен - в этом минус, но по другому то как привязать товар к гостю??? (Добавление)
СТАПЕ!!! я не говорил чтобы товар привязывали в базе к IP, я говорю про кукисы - именно там на время сохраняем карзину без внесения данных в базу, а после заказа, как пользователь согласен будет на заказ - то он регится или авторизуется, и на этом этапе уже товар добавляется в базу и привязывается конкретно к пользователю
----- То что программа работает, не означает что она написана правильно!
DeepVarvar
Отправлено: 31 Января, 2013 - 08:12:21
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
KingStar пишет:
я говорю про кукисы - именно там на время сохраняем карзину
и запиливаем кучу ненужных циклов с добавляньями, удаляньями позиций товаров.
А табличку и почистить можно, по крону... Что ей пару тысяч записей ненужных понакапливать?
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
DeepVarvar пишет:
и запиливаем кучу ненужных циклов с добавляньями, удаляньями позиций товаров.
А табличку и почистить можно, по крону... Что ей пару тысяч записей ненужных понакапливать?
вообще не понял о чем ты можно табличку чистить, при том что кукисы сами чистятся, а добавление, удаление и так происходит, что мешает сделать это с кукисами. По моему ты сейчас просто уперся, и не хочешь признать то, что войдя в магазин, пользователь не сможет покласть товар в корзину, пока не зарегится / авторизуется, т.к. привязать товар нет возможности именно к нему
----- То что программа работает, не означает что она написана правильно!
DeepVarvar
Отправлено: 31 Января, 2013 - 08:30:44
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
KingStar пишет:
По моему ты сейчас просто уперся
Не уперся. Просто изначально предлагаю концепт без привязки к пользователю. А вот ты, возможно уперся
KingStar пишет:
вообще не понял о чем ты
Большую часть функционала по расчетам, добавлениям, удалениям, сортировке - я перенес на твердые плечи БД. В твоем же случае придется писать несколько костыликов с циклами по массиву корзинки на стороне приложения. Не так ли?
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
все же правильней было бы разноплановый концепт
----- То что программа работает, не означает что она написана правильно!
DeepVarvar
Отправлено: 31 Января, 2013 - 08:43:35
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
KingStar пишет:
се же правильней было бы разноплановый концепт
Разнплановый концепт размазывает конечные цели, увеличивает кол-во кода, усложняет поддержку и сводит на нет смысл инкапсуляции. Потому, что кому-то захотелось предусмотреть все. И если забыться, а так бывает часто, то выходит страшилище, с торчащими во все стороны атавизмами, жрущее немерено ресурсов. (Добавление)
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
ну прям уж страшилище
повесить на js - это сделать то же самое, но другими методами, и уж здесь точно теряется смысл инкапсуляции, т.к. все ровно без серверной части не обойдешься, а быть может скоро и css будет поддерживать - то и на него повесить можно ладно, не стану больше холиварить, свое мение я мною изложено выше
----- То что программа работает, не означает что она написана правильно!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.