Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: таймаут на отправку формы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ajax + php + mysql
ninjajnin
Отправлено: 05 Ноября, 2015 - 09:30:55
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




В ajax я нуб полный.
Есть форма отправки сообщения в базу. Форма отправляется и обрабатывается ajax'ом асинхронным запросом. Все работает прекрасно, но есть минус: форму можно отправлять сколько угодно раз, просто тыкая по кнопке "отправить".

CODE (html):
скопировать код в буфер обмена
  1. <form id= "pac_form" action = ''>
  2. <input size = "15" type = "text" id = "pac_name" placeholder = "Имя"><br>
  3. <textarea placeholder = "Текст"></textarea><br>
  4. <input type = "submit" id = "bu" value = "Отправить"><br>
  5. </form>


Я решил пресечь это и написал простейший php скрипт, который сравнивает текущее время и время последнего сообщения в базе и если разница между ними меньше, чем 8 секунд, то происходит "действие".

PHP:
скопировать код в буфер обмена
  1. $result_stop_spam = mysql_query("SELECT * FROM `messages` WHERE `ip` = '$ip_usr' ORDER BY `date` DESC LIMIT 1") or die (mysql_error()) ;
  2.  
  3. while($data = mysql_fetch_array($result_stop_spam)) {
  4.  
  5. //$mod_date =  date("Y-m-d H:i:s", strtotime("- 1 hour")) ; //текущее время //если переводим время на час назад
  6.         $mod_date =  date("Y-m-d H:i:s") ; //текущее время
  7.         $last_date = date("Y-m-d H:i:s", strtotime ($data[4]) +8); //время последнего сообщения в базе
  8.         $undead = date("s") - date("s", strtotime ($data[4]) +8);
  9.  
  10.         if ($mod_date <= $last_date) {
  11.                 echo "снятие блокировки через ".$undead ;
  12.         }
  13. }


Ну вот, вопрос в следующем: каким образом лочить отправку форму при условии, что отправка форму происходит асинхронным запросом, а скрипт заработает только при перезагрузке?
 
 Top
SAD
Отправлено: 05 Ноября, 2015 - 09:46:02
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




перед отправкой формы сделайте disabled кнопке отправки. потом можно убрать, после ответа с сервера
 
 Top
ninjajnin
Отправлено: 05 Ноября, 2015 - 09:55:07
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Но что бы получить ответ с сервера нужно перезагрузить страницу, что бы скрипт сравнил время, а это не удобно и не желательно. Решение идеально, если реализовать ajax'ом, но его я не знаю, поэтому и бьюсь с php.

(Отредактировано автором: 05 Ноября, 2015 - 09:56:00)

 
 Top
SAD
Отправлено: 05 Ноября, 2015 - 10:34:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Ваш скрипт не нужен по проверке времени. просто дизейблите кнопку
 
 Top
ninjajnin
Отправлено: 05 Ноября, 2015 - 11:11:49
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Не совсем вас понял. Т.е. без условия? Тогда еще больше не понял...

(Отредактировано автором: 05 Ноября, 2015 - 11:14:57)

 
 Top
SAD
Отправлено: 05 Ноября, 2015 - 11:17:23
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. function formSubmit() {
  2.    var $button = $('#bu');
  3.  
  4.    $button.prop('disabled', true);
  5.  
  6.    $.ajax({...}).always(function () {
  7.        $button.prop('disabled', false);
  8.    });
  9. }
  10.  

(Отредактировано автором: 05 Ноября, 2015 - 11:17:58)

 
 Top
ninjajnin
Отправлено: 05 Ноября, 2015 - 11:26:35
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Угу... спасибо. Буду разбирать код.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB