@time_is_always_against_us

Как избежать ошибки лишней траты в онлайн магазине?

Код работает на PHP.
База данных: MySQL.

Есть онлайн магазин.
По клику на "Купить" число товара уменьшается на 1.

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

Такое впечатление, что запрос, одновременно выполняющийся с другим, проходит проверку наличия товара до того, как предыдущий запрос успеет это количество изменить.

Как решить данную проблему?
Из-за чего данная проблема возникает? (собственно свою догадку я высказал)
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@Vitsliputsli
На стороне СУБД блокируйте выбранные данные до момента обновления.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Главное, чтобы ему (боту) не удалось оформить товаров больше, чем есть на самом деле.
При переходе в оформление заказа всё пересчитать заново, если товаров набрано больше, чем есть, вывести ошибку или присвоить максимально допустимое кол-во.
Ответ написан
Комментировать
@PapaStifflera
Родился, вырос...
У вас с дизайном беда. Нельзя изменять количество доступного для покупки товара ДО оформления заказа. Иначе вам достаточно быстро скликают все стоки. От того, что пользователь положил товар в корзину, на складе его меньше не становится.
А уже в момент оформения заказа обновляйте стоки. И следите за тем, чтобы в корзину не положили товара больше, чем реально есть на складе.
Ответ написан
Комментировать
kawabanga
@kawabanga
1) блокировать кнопку на время выполнения скрипта
2) валидировать данные на сервере, и если значение больше чем нужно, то отображать ошибку, или приравнивать к максимальному значению.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы