Резервирование товара в ИМ - примерный алгоритм

12 3
P
На сайте с 06.01.2009
Offline
592
823

Добрый день. Поправьте, подскажите, пож-та, что знаете...

Хочу понять алгоритм резервирования товара в ИМ.

Допустим есть ИМ с 100 товарами. Каждый товар в одном экземпляре. Задача - если юзер нажал кнопку "купить" товар должен зарезервироваться и быть недоступным другому юзеру. Но. При этом юзер то может не выкупить товар, просто уйти с сайта... Вариант оставить нескольким юзерам кнопку купить активной (даже если кто-то уже зарезервировал) пока что не рассматривается. В данном случае это решение не подойдет.

Я предполагаю так.

Юзер нажал кнопку "купить", в базу у товара ставится какой либо идентификатор с значением "1". У таких товаров на сайте кнопка "купить" не активна. Но вот как потом поменять идентификатор с "1" на "0", если юзер просто закрыл страницу или недозаполнил форму заказа - не понимаю. Не понимаю, как именно скрипт может определить отказ.

Намекнтите, поясните, пож-та если знаете. Спасибо

Вижу один вариант. Указать в скрипте время резервирования - например 30 минут.

С любым заходом нового юзера, система смотри все резервированные товары и если времени с резервирования прошло более 30 минут, идентификатор обнуляется.

ps Ребят. Параллельно второй вопрос. На странице есть форма. Юзер её заполнил, отправил. Как данные формы обнулить (я не про $_POST), чтобы когда юзер хайдет в след раз начиная заполнять форму ему не вываливались подсказки?..(данные которые он раньше отправлял).

IL
На сайте с 20.04.2007
Offline
435
#1
postavkin:
чтобы когда юзер хайдет в след раз начиная заполнять форму ему не вываливались подсказки?..(данные которые он раньше отправлял).

<input autocomplete="off" ... />


---------- Добавлено 10.07.2019 в 14:32 ----------

* или для формы целиком

<form autocomplete="off" ... />

https://www.w3schools.com/tags/att_input_autocomplete.asp

https://www.w3schools.com/tags/att_form_autocomplete.asp

---------- Добавлено 10.07.2019 в 15:11 ----------

postavkin:
Не понимаю, как именно скрипт может определить отказ.

Разве что, сбрасывать через **цать минут после первого (или последнего) обращения.. (как, например, билеты в РЖД или на концерты - забронировано, у вас есть на 15 минут на оплату)

Для уверенности, что страничка открыта, можно AJAX-ом опрашивать.. но и это не является гарантией..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
samimages
На сайте с 31.05.2009
Offline
427
#2
postavkin:
Намекнтите, поясните,

Вам приходит уведомление о заказе, вы блокируете наличие и/или изменяете его.

Что касается браузерных решений...

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

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

Второго отвлек телефонный звонок

Третий — купил

Вопрос: как вы измените количество и/или заблокируете кнопку у первых двух?

Если не найдете на него внятного ответа, то и городить огород смысла нет.

Опыт как иммунитет — приобретается в муках! Хостинг: экономия до 1300 руб + домен в подарок ( https://clck.ru/XLscf ) / Аудит семантики от 15К [долго] - ЛС
P
На сайте с 06.01.2009
Offline
592
#3
samimages:
Вам приходит уведомление о заказе, вы блокируете наличие и/или изменяете его.
Что касается браузерных решений...
Предположим на ваш сайт в течении минуты в карточку товара зашли трое, у всех троих отражается наличие 1шт.

Первый пошел налить чашку кофе, чтобы принять решение не торопясь
Второго отвлек телефонный звонок
Третий — купил

Вопрос: как вы измените количество и/или заблокируете кнопку у первых двух?
Если не найдете на него внятного ответа, то и городить огород смысла нет.

При нажатии "купить" - будет ответ - товар закончился. Или товар временно забронирован.

---------- Добавлено 10.07.2019 в 16:21 ----------

Сейчас читаю, как определять онлайн ли вообще юзер.

Т.е. нажав кнопку "купить", он его бронирует.

Заполнив форму и отправив заказ - тут все просто.

Задача определить момент когда юзер покидает сайт.

Если например он поставил в бронь (на 30минут), но при этом ушел с сайта(недооформив заказ) - товар должен освободиться.

IL
На сайте с 20.04.2007
Offline
435
#4
postavkin:
Задача определить момент когда юзер покидает сайт.

1. onbeforeunload

2. периодически посылать Ajax-запросы на сервер..

Но это не исключает ошибок как первого, так и второго рода..

JS может "подвиснуть", сервер может "не ответить" по таймауту (при нестабильном интернете), или же пользователь может просто "закрыть ноутбук"

p.s. Можно до websocket-ов дойти, если очень нужно... но опять же, вопрос нестабильного соединения они не решат.

P
На сайте с 06.01.2009
Offline
592
#5

Да, понимаю, почитал. Нужно минимизировать возможность "простоя" товара...

при этом конечно сервер не хотелось бы сильно нагружать.

Вот читаю и не понимаю, 100% определить закрытие браузера возможно или нет. Или тоже могут быть баги.

Именно нажатие на закрыть вкладку/браузер.

Тут конечно Ajax-запросы на сервер.. не самый лучший вариант, потому что при нестабильном соединение - юзер может остаться без товара (а это для нас критично). Такие баги недопустимы.

D.iK.iJ
На сайте с 26.05.2013
Offline
225
#6
postavkin:
Вот читаю и не понимаю, 100% определить закрытие браузера возможно или нет.

Ну, например, так (нужно подождать 10 секунд).

Как уже писали, это window.onbeforeunload = function(){} и небольшое невидимое поле сверху, чтобы ловить тянущихся к кнопке выхода.

Адаптивный дизайн в 2 строчки ( https://dikij.com/wm/adaptaciya-saytov.php ). + Принимаю заказы любой сложности ( https://searchengines.guru/ru/forum/926323 ). 💎 Еще я делаю классные кулоны с опалами ( https://mosaicopal.ru/ ).
P
На сайте с 06.01.2009
Offline
592
#7

window.onbeforeunload - прочитал про него. Кто то пишет нестабильно оно работает.

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

7раз закрыл ваш сайт. только 1раз определилось это.

D.iK.iJ
На сайте с 26.05.2013
Offline
225
#8
postavkin:
7раз закрыл ваш сайт. только 1раз определилось это.

У меня там таймер на 10 секунд (когда в правом верхнем углу рамка появляется). Если закрыть раньше - не сработает.

Ну а по наведению на правый верхний угол у меня просто картинка телефона появляется. Больше ничего не происходит. Это ведь только пример. По идее, там должен быть скрипт всплывающего окна "Не уходите, мы все простим!"

По идее, смену окна по потере фокуса можно отследить. Что-то вроде "onblur"

samimages
На сайте с 31.05.2009
Offline
427
#9
postavkin:
При нажатии "купить" - будет ответ - товар закончился. Или товар временно забронирован.

При таком ответе, вам скорее всего придется передавать бронь по "очереди", и дать возможность юзерам в нее становиться, иначе теряется логика второго варианта.

Первый: товар закончился - будет выбешивать каждый раз, так что его придется подавать мягко а-ля: товар временно забронирован, но вы можете занять очередь и выкупить его через 30 минут в случае отказа опередившего вас покупателя.

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

P
На сайте с 06.01.2009
Offline
592
#10

samimages, Рано над формулировкой думать, не нашел способа определить закрытие окна.

DiKiJ, 1 раз из 7ми закрытий ваш скрипт определил закрытие окна. про 10 сек я вижу.

---------- Добавлено 11.07.2019 в 09:36 ----------

samimages:

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

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

Одна задача не решена - определять явный отказ, т.е. закрытие браузера,

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий