как ограничить общее количество отправок форм в день

Может ли кто-нибудь посоветовать мне, как настроить форму для включения в течение определенного периода времени в день.

Или как ограничить общее количество отправок форм в день или в неделю и т. Д.

Например,

Мне нужно, чтобы форма автоматически отключалась, как только будет отправлено 100 форм в день, час и т. Д.

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

Требование: нам нужно обрабатывать определенное количество вопросов / материалов в день. Форма должна быть отключена, когда количество представлений в определенной таблице достигнет 100 или любого другого числа.

Какие запросы MySQL я могу использовать?

Или форму можно отключить с помощью Javascript?

Вот простая форма:

<p><label for="name">Name</label><br />
   <input type="text" name="name" value="name" id="name" size="37" /></p>

<p><label for="email">Email Address</label><br />
   <input type="text" name="email" value="email" id="email" size="37" /></p>

<p><label for="comment">Comment</label><br />
   <textarea name="comment" rows="8" cols="35" id="comment">comment</textarea></p>

<p><input type="submit" name="submit" value="Submit" /></p>

Обновление: благодаря Квентину

вот код, который я достиг.

SELECT count(*) AS count FROM data where channel_id='2'"; 

if (count <= 100) {show the form} else {show a message that the form is closed} 

В таблице 3 поля: [год] [месяц] и [день]. как использовать CURDATE () таким образом, когда дата разделена на 3 поля?


person Ibn Saeed    schedule 25.05.2011    source источник
comment
Ограничить ... чем? Айпи адрес? Cookie? Любимый цвет?   -  person AJ.    schedule 25.05.2011
comment
Если это глобальный предел, просто подсчитайте его в файле.   -  person JohnP    schedule 25.05.2011
comment
@AJ Общее количество (упомянуто в вопросе)   -  person Dave    schedule 25.05.2011
comment
Разве он не мог сделать что-то вроде - оператора mysql, у которого было WHERE, которое проверяло, если SUM (submissions WHERE date ...) <100 ... У меня нет времени проверить это через банкомат, но - я конечно, кто-то здесь мог бы просто списать это с макушки :)   -  person Dave    schedule 25.05.2011


Ответы (5)


Вы не можете сделать это на стороне клиента.

Запрос по строкам:

select count(*) from myTable where myDateColumn >= CURDATE();

должен сделать свое дело.

Используйте его при принятии решения о создании формы и при принятии решения о принятии отправки формы.

person Quentin    schedule 25.05.2011
comment
Как автоматически скрыть HTML-форму при достижении количества отправок? - person Ibn Saeed; 25.05.2011
comment
if (ваш результат = ›100) {показать сообщение с сожалением} else {показать форму} - person Quentin; 25.05.2011
comment
@Quentin Вот код, который у меня есть: SELECT count(*) AS count FROM data where channel_id='2'"; if (count <= 100) {show the form} else {show a message that the form is closed} Код работает нормально В таблице есть 3 поля, [год] [месяц] и [день], как мне использовать CURDATE () таким образом, поскольку дата делится на 3 поля? - person Ibn Saeed; 25.05.2011
comment
@Quentin, я использовал следующий код mysql select count(*) AS count from exp_channel_titles`, где channel_id = 2 и day = CURDATE (); `он не работает. Да, [день] - это поле в таблице, может быть, день конфликтует с функцией дня mysql? - person Ibn Saeed; 25.05.2011
comment
Это поле даты? Определить не получается, какой результат? - person Quentin; 25.05.2011
comment
@Quentin, у меня есть код mysql для отображения того, что мне нужно. Я отправил код в качестве ответа. Но как мне протестировать это вживую в cms, например оператор sql отлично работает в запросе phpmyadmin и дает правильный результат. Когда mysql меняет дату? Это происходит в полночь? - person Ibn Saeed; 25.05.2011
comment
да. Текущая дата - это текущая дата. Когда меняется дата, изменяется и curdate (). - person Quentin; 25.05.2011
comment
@Quentin, так должно работать. До полуночи осталось около 8 минут. Плохой тест, чтобы увидеть, уменьшив количество записей до 20, и введите тестовые записи, чтобы увидеть, будет ли форма автоматически скрываться или нет. Я обновлю здесь. - person Ibn Saeed; 25.05.2011
comment
@Quentin, мне кажется, я отличался от вашего кода. `myDateColumn› = CURDATE (); `Я получил 0 результатов с› =, но когда я изменил его на ‹=, я получил правильный результат. - person Ibn Saeed; 25.05.2011
comment
@Quentin, это сработало отлично. Я снизил количество записей до 20 в день. Завтра попробую еще раз. Спасибо @Quentin. - person Ibn Saeed; 25.05.2011
comment
@Quentin, проверено после 12 полуночи, форма не появлялась автоматически. Похоже, что teh ‹= также происходит за предыдущий день. Я пробовал использовать SELECT count(*) AS count FROM exp_channel_titles where channel_id='2' and day` = CURDATE () `с оператором =, но он дает 0 записей, хотя записи есть. я застрял, что делать? - person Ibn Saeed; 26.05.2011
comment
day поле даты? Какие ценности у него есть? - person Quentin; 26.05.2011
comment
день - это поле дня, например, day = 26, month - это поле для месяца, например (месяц = ​​май) и год - это поле года, например (год = 2011), есть еще поле entry_date, здесь значение из entry_date = 1306356678 - person Ibn Saeed; 26.05.2011
comment
значение дня 26, его сегодняшняя дата, только часть дня - person Ibn Saeed; 26.05.2011
comment
Является ли 1306356678 датой в стиле Unix ?, это для поля entry_date - person Ibn Saeed; 26.05.2011
comment
Тогда это будет проблемой. Похоже, это целое число, а не дата. CURDATE () возвращает дату (с использованием стандартного форматирования MySQL: 2010-05-25). - person Quentin; 26.05.2011
comment
Вместо этого используйте DAY(CURDATE()), чтобы получить день месяца как целое число. Ожидайте, что он сломается, как только вы получите больше, чем за месяц данных! Вам придется либо иметь дело с несколькими столбцами, либо реорганизовать таблицу, чтобы использовать тип данных даты, либо сбросить старые данные в этот момент. - person Quentin; 26.05.2011
comment
@ Квентин, спасибо, я попробую. А как насчет 1306356678? это дата в стиле UNix, поскольку в поле четко указано entry_date и используется форматирование даты типа {date format =% F% d% Y}, чтобы получить дату в удобочитаемой форме. - person Ibn Saeed; 26.05.2011
comment
Вы можете получить текущее время unix через dev.mysql.com/doc/refman/5.5/en/, я думаю. Но вам придется все усложнять, тренируясь, когда сегодня началось, и находя время для этого. - person Quentin; 26.05.2011
comment
@Quentin, ваше предложение использовать DAY(CURDATE()) сработало. Вот последний оператор sql ----- SELECT count(*) AS count FROM exp_channel_titles where channel_id='2' and day` = DAY (CURDATE ()) `Большое спасибо. - person Ibn Saeed; 26.05.2011
comment
@Quentin, я искал по всему Google, но не нашел решения. Но вы дали довольно простой. Я попытался найти DAY(CURDATE()) решение, которое вы дали в Google, я не увидел ни одного результата в DAY (CURDATE ()). Как ты узнал ? - person Ibn Saeed; 26.05.2011
comment
@Quentin, кстати, поле day в таблице имеет свой Datatype как Char - person Ibn Saeed; 26.05.2011
comment
Я смотрел на таблицу с датами в MySQL. Char - довольно странный выбор поля для чего-то, что будет содержать число. - person Quentin; 26.05.2011
comment
@Quentin, я использую ExpressionEngine CMS. Вот как они это устроили. - person Ibn Saeed; 26.05.2011

На вашей странице отображается форма: Запросите свою базу данных: используйте MySQL COUNT в индексе, чтобы получить количество строк (1 строка = 1 ответ ??), где submitday = today

см. следующие ссылки, особенно вторую, для извлечения времени / даты http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

если numrows = 100, используйте javascript для 'display: none' вашей формы, 'display: block' ваш div

есть <div id="toomuch" style="display:none;"><p>I'm sorry this form is closed for the day, try again tomorrow</p></div>

person Stefan Khan-Kernahan    schedule 25.05.2011
comment
Это не остановит автоматическую отправку - person NotMe; 25.05.2011

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

 SELECT count(id) from TABLE where DATA=CURDATE();

Затем вы можете реализовать в своем коде функцию для обработки отправки формы.

person Brice Favre    schedule 25.05.2011

Если я правильно понимаю, это форма, отображаемая на вашем веб-сайте (а не форма публикации панели управления?) - если так, это довольно просто. Проведите проверку количества записей в своей БД (если именно там вы храните данные формы) на основе метки времени, как это показали другие в примере оператора SQL. Когда вы достигнете своего предела, вы можете отобразить форму без значения сообщения и отключить ее с помощью javascript и стилизовать ее, чтобы она выглядела непригодной для использования (или не отображала все).

В псевдокоде:

Set timeframe  = week, day, etc.
Set maxsubmissions = 100 (or whatever)

Set sumbissioncount = Query db to get number of submissions within timeframe 

If submissioncount is less than maxsubmissions
 {embed form}
Else 
 {embed disabled form}
End if

Обратите внимание, что приведенные примеры sql будут считаться только за день, а не за неделю, вам нужно будет изменить это, например, на неделю - чтобы сделать его общим, используйте предложение between или plunk vars между диапазонами в примерах выше: см. Связанный поток: Запрос диапазона дат MySQL

person mahalie    schedule 26.05.2011
comment
Я смог получить то, что мне нужно, с помощью кода, который я вставил выше. Тем не менее, спасибо за вашу помощь - person Ibn Saeed; 26.05.2011

Следующий код работал:

SELECT count(*) AS count FROM `channel`

where `day` = DAY(CURDATE())

and `channel_id` = '2'

Теперь его нужно протестировать в реальном времени, работает он с CMS или нет. Скрывается форма или нет.

Форма скрывается, если я вручную пытаюсь отредактировать "{if count‹ = '100'} ", форма скрывается, но меня беспокоит, будет ли она работать автоматически. Я думаю, мне придется подождать до утра.

person Ibn Saeed    schedule 25.05.2011