Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двойная отправка формы при двойном щелчке, как избежать с помощью PHP? 
:(
    Опции темы
Royan
Дата 30.8.2007, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Я думаю всем знакома ситуация когда из-за того, что пользователь жмет два раза на кнопку "Отправить"/"Зарегистрироваться" или нечто подобное по нажатию чего форма уходит на сервер возникает шанс отправки формы два раза (а то и того больше). Один из методов борьбы с этим - сделать кнопку disabled. У меня же возник вопрос, но ведь наверняка это возможно сделать и на стороне сервера, ведь существует куча сайтов у которых такие кнопки не становятся disabled. Кто знает как пожалуйста отзовитесь


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
ewolf
Дата 30.8.2007, 02:18 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



Попробуй сделать через сессии, например

в коде, генерирующем форму:

Код

<?
$_SESSION['validate'] = md5(mt_rand(0,1000));
?>
<form method="POST">
<input type="hidden" name="validate" value="<?= $_SESSION['validate']; ?>">
</form>


В обработчике соотвественно:

Код

if( isset($_SESSION['validate']) && $_POST['validate'] == $_SESSION['validate'] )
{
   // Обрабатываем форму
   unset($_SESSION['validate']);
}


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

В это случае можно завести в базе таблицу, куда сразу в обработчике писать о начале обратоки формы с таким-то кодом. И в нем же естественно проверя наличие подобной записи. Только старые записи надо не забывать удалять.

Можно оба метода совместить.
PM MAIL ICQ   Вверх
EvgenYakut
Дата 30.8.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 27.8.2007
Где: Украина Луганск

Репутация: нет
Всего: нет



Я использовал нечто похожее с сесиями:
создавл переменную и при каждом обновлении формы откудо добавляют данные я её забивал "1" а после каждой обработки данных я её онулял. и при этом делал проверку если переменная ==1 то проводим обработку формы иначе просто необрабатуем. Вообщем то система примитивна но мне её пока достаточно и она способна предотвратить повторное вбивание данных через возврат по страничке (я её собственно для этого и делал)
А вообщето самый точный и самый оптимальный способ это простая проверка в БД (или где там у вас данные хронятся) а нет ли там точной копии этой информации по всем полям перед обработкой данных с формы и если есть то можно просто проигнорить пришедшие данные а можно и сообщение сварганить

Это сообщение отредактировал(а) EvgenYakut - 30.8.2007, 11:03
PM MAIL   Вверх
Daevaorn
Дата 30.8.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Если контент из формы записывает в базу с установленной датой, то просто нужно делать некую временную дельту в которой нельзя больше принимать данных от этого пользователя.
PM MAIL WWW   Вверх
Alix36
Дата 30.8.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 6.11.2006

Репутация: 1
Всего: 3



1)картинка защитная- антифлуда.
2)очистка JSом обязательного поля формы тогда она начнет ругаться при отправке
3)как уже говорили сессии.
На мой взгляд разумнее 2 вариант, ибо нет никаких лишних запросов к серверу.


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
Royan
Дата 30.8.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Alix36, тебе + за идею, весьма дельные мысли


ewolf, тебе за усердие +

всем остальным тоже большое спасибо! тема исчерпана


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
EvgenYakut
  Дата 31.8.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 27.8.2007
Где: Украина Луганск

Репутация: нет
Всего: нет



Цитата(Alix36 @ 30.8.2007,  19:46)
2)очистка JSом обязательного поля формы тогда она начнет ругаться при отправке

На мой взгляд разумнее 2 вариант, ибо нет никаких лишних запросов к серверу.

Royan будь осторожен!!
Но я разок напаролся зделал всю проверку формы через JS при ошибке выводилил окошки с сообщениями здорово так мне нравилось а потом какойто юзверь взял и отключил JS, ничего страшного непроизошло БД защитилась но неприятно было когда мне это юзвер стал рассказывать шо моя система о ошибках его неинформирует. 
Вот такаявот загогулина. Если на JS полагаться то надо проверку вставлять а работает ли он вообще
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.