Повторное срабатывания кода.

Opik

Новичок
Повторное срабатывания кода.

Есть форма, при быстром повторе нажатий субмита формы иногда срабатывает повторно один и тот же код.
Скажите нужно делать редирект? ну так ф5 и ничего подобного юзер не жмет. Так как бороться с этим?
 

zarus

Хитрожопый макак
ИМХО:

Записывать в сессию данные сабмита и проверять идентичность данных. Или же просто записывать в сессию сам факт сабмита и время - и если между сабмитами прошло менее 5-10 секунд - не исполнять код.

Для SQL можно сделать выборку SELECT (TOP/LIMIT) WHERE `a`= a, `b` = b ..., где a,b,.. - вставляемые в базу значения. Если запрос вернет ненулевой результат, то не исполнять код. "Слегка" нагрузит сервер, но поможет избежать сабмита одинаковых данных.
 

zarus

Хитрожопый макак
Автор оригинала: Кром
>Скажите нужно делать редирект?

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

Разгильдяй

Новичок
Автор оригинала: zarus
ИМХО:
Для SQL можно сделать выборку SELECT (TOP/LIMIT) WHERE `a`= a, `b` = b ..., где a,b,.. - вставляемые в базу значения. Если запрос вернет ненулевой результат, то не исполнять код. "Слегка" нагрузит сервер, но поможет избежать сабмита одинаковых данных.
Такой вариант подойдет только для хостевухи на 100 юзеров, в других случаях это самое неприемлимое решение из всех предложенных вариантов.
 

zarus

Хитрожопый макак
Автор оригинала: Разгильдяй
Такой вариант подойдет только для хостевухи на 100 юзеров, в других случаях это самое неприемлимое решение из всех предложенных вариантов.
Ну в общем, я такой подход применяю при сабмите новостей и статей на сайте. И я понимаю, что это не лучший вариант. Другой вопрос, а какой вариант лучший? :)
 

Разгильдяй

Новичок
Автор оригинала: zarus
Ну в общем, я такой подход применяю при сабмите новостей и статей на сайте. И я понимаю, что это не лучший вариант. Другой вопрос, а какой вариант лучший? :)
Думаю для большинства случаев подойдет этот вариант:
Автор оригинала: _RVK_
Дизаблить кнопку на онклик, например.
 

zarus

Хитрожопый макак
Дизаблить кнопку на онклик, например
... Делать редирект всегда
И как это поможет пользователю вернуться к редактированию данных после сабмита, если при этом не пользоваться передачей переменных в урле (скажем id вставленной записи)? Чисто гипотетический вопрос.
Более того, а если у пользователя выключена поддержка JS (параноик/хакер)?
 

Solid

Drosera anglica
Можно так:
PHP:
header('Location: '.$_SERVER['PHP_SELF']);
Правда не самый лучший вариант.
 

ksnk

прохожий
Узнать включен или нет у юзера JS можно заменив JavaScript'ом action у формы на что-то типа action="URL?JS=on". Тогда при обработке формы при наличии JS ничего особого не делаем.
А если юзер
(параноик/хакер)
, то и поступать с ним можно соответственно - в базу его ввод складировать, к примеру, как zarus и советует.
 

Кром

Новичок
А что делать в том случае, если после сабмита надо вывести те же данные на экран, но при этом не пользоваться передачей переменных в урле. Например, сохранение набранного текста и продолжение его редактирования.
В сессиию его, и потом выводить обратно.
 
Сверху