#sql #forms #select #time #spam-prevention
#sql #формы #выберите #время #предотвращение нежелательной почты
Вопрос:
Чтобы предотвратить многократную отправку формы в пример таблицы, я хочу выбрать последний фрагмент данных из примера таблицы, где он был 10 секунд назад. Если возвращаемый результат равен 1, то они не могут отправить форму. Если возвращаемый результат равен 0, тогда они могут отправить форму.
Возможно ли это, если нет, не могли бы вы предложить другой метод блокировки отправки нескольких форм. Я не хочу использовать метод cookie, так как пользователь может легко заблокировать файлы cookie.
пример таблицы
|-----------------------------|
|user_id | content | date_time|
|-----------------------------|
|1 | content | something|
|-----------------------------|
|2 | test | something|
-----------------------------|
|3 | test | something|
------------------------------
Спасибо 🙂
Комментарии:
1. просто проверьте, есть ли какие-либо записи за последние 10 секунд, предполагая, что вы сохраняете
DateTime
эту отправку2. как будет выглядеть SQL-запрос?
3. возможно, если вы предоставите нам более подробную информацию о структуре вашей таблицы, будет предоставлена более подробная справка
4. в настоящее время оно хранится как отметка времени, но я мог бы ее изменить
5. Это зависит от ваших причин блокировать форму, но если нет особого стимула повторно отправлять форму, вы вполне можете положиться на файлы cookie: люди действительно их больше не блокируют. Тем не менее, вы можете сохранить время транзакции в таблице и выполнить свой выбор.
Ответ №1:
неясно, хотите ли вы ограничить пользователем или ограничить глобально
SELECT
CASE WHEN EXISTS (
SELECT 1 FROM [example] WHERE date_time > DATEADD (SS , -10 , GETDATE())
)
THEN cast(1 as bit)
ELSE cast(0 as bit)
END
FROM ( SELECT 1 AS X ) AS [SingleRowTable];
этот запрос вернет вам однорядный результирующий набор с битовым значением 1
или 0
, если за последние 10 секунд была запись, скорректируйте по мере необходимости в соответствии с вашими целями