nastya97core
@nastya97core
Начинающий программист

Как должна работать функция добавления товара в корзину?

Здравствуйте. Пытаюсь сделать интернет магазин и столкнулась с проблемой: "Как сделать добавление товара в корзину?". На данный момент я сделала так:
  1. При нажатии на кнопку "в корзину", js обращается к родителю, а затем ищет ребёнка, у которого span.class = name и span.class = size
  2. Эти данные заносятся в массив, переводятся в json и загружаются в cookie (не сессия). То есть дешифрованные куки выглядят примерно так: [["apple", "big"],["orange", "medium"]];
  3. На странице корзины я через php ловлю куки и делаю запрос в базу, чтобы вытащить фотографии и цены. И вывожу всё это богатство через foreach в виде таблицы на страницу.
  4. Далее пользователь заполняет форму (имя, телефон), ждёт "оформить заказ" и в базу "заказы" отправляется содержимое куков.
  5. В базе "заказы" появляется новый заказ.


Я использую headless cms Cockpit, которая использует файловую MongoDB. Понимаю, что это ничего вам не даст, но просто говорю. Считайте, что cms у меня вообще нет.

Теперь вопросы.
1. Я уже сама понимаю, что 1 этап - не комильфо. Как минимум потому что можно в инспекторе изменить название блока name и в корзину уйдёт товар, которого вообще нет в базе.
Я предполагаю, что эту проблему можно решить с помощью ajax, который в начале отправит запрос в базу на проверку существования такого товара, а потом уже добавит его в куки в случае успеха. Скажите, на сколько я права? Так ли это делается и верно ли я мыслю?
2. Как должна происходить процедура "покупки"? Меня смущает, что пользователь имеет доступ кукам (как и первом случае заказ собирается из текста). Верно ли я мыслю, когда "оформляю заказ", отправляя куки? Как я должна действовать?
3. Так как заказ собирается из текста и из кук, то на сколько уязвимо это? Может ли злоумышленник изменить название товара так, чтобы получить доступ к БД и к моим API ключам. И если да, то как мне себя обезопасить?
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Перепишите код. Все равно у вас есть php так что стартуйте сессию и в неё пишите идентификаторы. По феншую клиент вообще должен у себя хранить только сессию и строить все на сервере. В этом случае все редиски остаются не у дел
Ответ написан
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
Как то все с самого начала не по феншую пошло...

Есть 3 подхода - хранить в сессии, хранить в бд и хранить в куках/локалсторэйдже.
По сути разницы особо нет, во всех 3 случаях хранится массив (в том или ином виде) - [ид товара=> количество], или, в более сложном случае, когда один товар имеет несколько вариаций - массив массивов, где уже хранятся доп. атрибуты товара, помимо количества. Подсчет корзины всегда выполняется на сервере, путем выбора из бд нужных товаров и сложения стоимости товаров.

По поводу реализации - самый простой имхо сессии + аякс, для удобства у вас либо все кнопки уже должны содержать нужные для корзины данные и при клике передаются аяксом, либо являться субмитами для форм, где эти данные вбиты в скрытых полях, ну и при субмите ловится событие и все так же отправляется аяксом на сервер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Искра Екатеринбург
от 80 000 до 100 000 ₽
Art gorka Санкт-Петербург
от 60 000 ₽