|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Alexander V. Gaiduk 2:5020/400 09 Jan 2002 13:35:06 To : Alan Long Subject : Hа: многократный submit данных -------------------------------------------------------------------------------- > AL> Появились нехорошие люди которые путем быстрого нажимания на > AL> кнопку <input > AL> type=submit ...> делают все сообщения в этом файле своими ;-( > AK> я такую проблему решил так: > AK> После сабмита данные записываются, а пользователь редиректится > AK> на сам скрипт (или можно на страничку, с которой он пришел), в > AK> следствии чего у него все поля становятся чистые. по моему это единственно правильное решение, т.к. нет зависимости по времени и по IP, если юзер может послать две мессаги за 3 секунды, значит есть на то причины. а дупы так сделать очччень трудно. > У меня так и сделанно, другое дело, что если у пользователя чуть подзагружен > канал (ну качает от что-нибудь в паралель), то до отправки сообщения, то того > как форма очистится, данные из формы уже передаются. И если быстро и часть > покликать по кнопке submit, то можно получить изрядно количество одинаковых > сообщений на входе скрипта обрабатывающего форму... > > У меня сделанно примерно, так (иерархия вызовов). > 1. message.html (форма) =[POST]=> > 2. sendmsg.cgi (обработчик данных) =[redirect]=> > 3. redirect.html (выводит что сообщение отправляется) =[JavaScript/META]=> > 1. message.html (форма) ой, а зачем так сложно? три хтмля и скрыпт ешшо... у меня все это делается только одним скриптом: http://vodnik.lesobank.ru/cgi-bin/gb.pl?id=vodnik&action=view http://wood.lesobank.ru/cgi-bin/gb.pl?id=wood&action=view http://www.lesobank.ru/cgi-bin/gb.pl?id=lesobank&action=view кусок реального кода: # в %qsa лежит распарсеная QUERY_STRING if (lc($qsa{'action'}) eq "add") { &AddMessage; print "Status: 302 Moved Temporarily\n"; print "Location: http://$ENV{'SERVER_NAME'}$cgidir\/$gbname?id=$qsa{'id'}&action=view\n"; print "Content-type: text/html\n\n"; } зы. в таком виде этот кусок кода работает с начала 99 года и ни одного дупа не было, хотя умники разные попадаются см. количество сообщений в книге на http://vodnik.lesobank.ru ззы. по поводу поделится исходником: А вы готовы на сервере поставить Interbase 6 и IBPerl ? =GAV --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/11999382570ce.html, оценка из 5, голосов 10
|