powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Запрет повторной отправки формы
29 сообщений из 29, показаны все 2 страниц
Запрет повторной отправки формы
    #39258479
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После отправки формы, СКРИПТОМ ОБРАБОТКИ отправки выводится сообщение о том что данные успешно отправлены. Но при обновлении этой страницы в брауере, выскакивает сообщение о том что данные будет повторно отправлены...

Некоторые браузеры просто тупо еще раз шлют данные на сервер. И потом получается то что на сриншоте http://itmages.ru/image/view/4444099/7c7023ac

Есть стандартный вариант, способ решения этой пробл3емы: Вычислить мд5 из остылаемых данных и записать в строку таблицы вместе с сообщением. И каждый раз при отправке сначала проверять наличие мд5 в таблице.

Но может кто предложит вариант получше, или просто другой.

Есть идея что после отправки надо сделать редирект на страницу сообщения об успегной отправке. Но для этого нужно иметь эту страницу. ИЛИ редирект на страницу с параметром гет (?send=ok).

Вообщем я хочу увидеть разные варианты решения.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258481
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin, зачем Вам разные варианты?

Post/Redirect/Get — Википедия

Модель поведения веб-приложений, используемая разработчиками для защиты от повторной отправки данных веб-форм (от т. н. double submit problem). Модель PRG обеспечивает интуитивно понятное поведение веб-приложений при обновлении страниц в браузере и при использовании закладок в браузере.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258485
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinЕсть идея что после отправки надо сделать редирект на страницу сообщения об успегной отправке.Можно, конечно, но не обязательно. Достаточно редиректить "на саму себя", на ту же самую страницу.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258487
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAaliskin, зачем Вам разные варианты?
.
??? как "зачем". Хочу знать, просвещаться и развиваться ;:).
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258492
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinskyANAaliskin, зачем Вам разные варианты?
.
??? как "зачем". Хочу знать, просвещаться и развиваться ;:).
Там на Вики ссылки есть - почитайте.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258540
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал следующее:
1.
2. После отправки и записи данных, редирект на этот скрипт обработка формы, но с ГЕТ параметром (его значение не имеет никакого значения, эээ тоесть значение этого параметра нигде и никак не используется).

Код: php
1.
 header("Location: /send.php?sent=1");



А потом (указано в ответе 1.) Код размещен в начале скрипта обработки формы (форм).

Код: php
1.
2.
3.
4.
5.
   if (isset($_GET['sent'])) {
    //echo 'sent is SET.';

    ok(1);//вывод "сообщ отправлено успешно"
    }


И никаких сканирований таблиц, никаких дополнительных полей в таблицах, никаких лишних переменных в формах.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258557
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фтопку этот ваш гет-параметр. До перезагрузки страницы сохранить признак успешной отправки можно в сессии.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258571
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и так, но "Кто как хочет, так и делает" ;%))
---
Я же могу сказть что фтопку эту вашу сессию.

---
ИТОГ: Уже все решил.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258572
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Я же тоже могу сказать: "фтопку эту вашу сессию". %;
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258577
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin,

Да говорите, конечно же, на то он и форум. Только аргументы изложите, пожалуйста, чем лучше Ваш вариант.

Для сравнения. Если добавить в закладки или послать другу УРЛ страницы с "?sent=1", что будет при открытии страницы? Наверно, "Ваше сообщение успешно отправлено". Немного странно, на мой взгляд. И, теперь, те же действия при передаче сообщения об успешной отправке уведомления через с сессию. Есть сессионная переменная установлена - отдаём "успешно отправлено" (или "не отправлено", это уж по ситуации), нет переменной - отдаём пустую форму.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258584
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinИ никаких сканирований таблиц, никаких дополнительных полей в таблицах, никаких лишних переменных в формах.
Прям архитектор :)
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258585
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle, сессию фтопку. Мы же пишем высоконагруженные системы и у нас не один бекенд-сервер :)
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258587
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, о, тады да! :)
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258595
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запись в сессию это лишнее обращение к диску. И если после отправки данных и записи их в тбл записать триггер в сессию, то потом что??? Все равно нужно показать некую станицу (редирект). И на этой странице все равно нужно проверить этот триггер.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258596
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklealiskin,
Для сравнения. Если добавить в закладки или послать другу УРЛ страницы с "?sent=1", что будет при открытии страницы? Наверно, "Ваше сообщение успешно отправлено". Немного странно, на мой взгляд.

та, да. как-то не таво. Может что-то изменю...
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258597
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПрям архитектор :)
от вам смешно ;%)) что бы вы без меня делали? Грустили бы?
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258598
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что будет если после отправки формы, пользователь в новой вкладке еще раз захочет отправить форму, а сессионный тригер отправки уже будет указывать на то что польхователь уже отправлял форму?

хм-м... нужно подумать...
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258599
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажись уже придумал. нужно еще во сне обдумать.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258636
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinЗапись в сессию это лишнее обращение к диску.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258637
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinА что будет если после отправки формы, пользователь в новой вкладке еще раз захочет отправить форму, а сессионный тригер отправки уже будет указывать на то что польхователь уже отправлял форму?

хм-м... нужно подумать...
Скорее всего пользователь захочет не того, что Вы ему понаделаете.



Основная мысль книги - проектирование взаимодействия должно предшествовать программированию.

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

И главное - есть несколько конретных примеров проектирования, хорошо иллюстрирующих, чего можно добиться применяя теорию Алана Купера на практике.

Как определиться для кого вы разрабатываете своё приложение?
Какие цели преследуют ваши пользователи? Как удовлетворить их требования?

Всё это вы можете узнать из книги.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258704
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAaliskinЗапись в сессию это лишнее обращение к диску.

что не так? или вы не знаете где на стороне сервера хранятся переменные сессии? http://itmages.ru/image/view/4446368/4b3c9f57

повторяюсь, но не потому что сам не знаю как решить, а потому что без ГЕТа тут я решения не вижу.
автор А что будет если после отправки формы, пользователь в новой вкладке еще раз захочет отправить форму, а сессионный тригер отправки уже будет указывать на то что польхователь уже отправлял форму?

Если есть какое-то другое решении без ГЕТа, то напишите (или не пишите %))

У меня тот же код что указан в 6 сообщении этой темы, но перед редиректом устанавливается сессионный трригар отправки формы.

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

---
О проэктировании: У меня все как-бэ параллельно как-то катится (идет).
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258711
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дочитался http://phpclub.ru/talk/threads/пример-обработки-формы.8683/

Код: php
1.
if ($_SERVER['REQUEST_METHOD']=='POST') {  


незн. нужно что-то выбрать...
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258749
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinне потому что сам не знаю как решить, а потому что без ГЕТа тут я решения не вижу.
автор А что будет если после отправки формы, пользователь в новой вкладке еще раз захочет отправить форму, а сессионный тригер отправки уже будет указывать на то что польхователь уже отправлял форму?

Если есть какое-то другое решении без ГЕТа, то напишитеПодробно, очень подробно прорабатывайте сценарии взаимодействия пользователя и приложения. Ваш случай довольно простой.

На сервер пришел запрос методом GET и нет переменной в триггере - отдаём пустую форму.
Запрос методом POST - обрабатываем данные формы, по результатам ставим в триггере переменную с информацией (успех, в данном случае).
Редирект "на себя".
Запрос GET и в триггере инфо об успехе - обнуляем триггер и отдаём клиенту инфо об успехе.
Всё!


Конечно, если до пользователя нужно донести ОЧЕНЬ важное сообщение, которое пользователь ни в коем разе не должен пропустить, то такой способ не годится.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258752
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
csrf токен?
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258834
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot vkle]aliskinКонечно, если до пользователя нужно донести ОЧЕНЬ важное сообщение, которое пользователь ни в коем разе не должен пропустить, то такой способ не годится.
потому что сообщение будет показано один раз. (?)
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258848
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin,

Да, именно так. И в этот самый один раз может что-то сглючить (вырубиться комп, зависнуть браузер и т.п.).
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258859
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
та я уже и сам проверил это.

блогодарю усех, хоть юмор мне не очень нравится (хотя бы потому, что над дураками хрех смиятця. А у меня образование... :( : доучился до седьмого класса в обычной школе, потом выгнали), но все таки уже все по научному работает!
---
А вот по поводу незавершенных транзакций я без понятия как и что. Ожидайте следующую кричалку о помощи.
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39258894
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запрет повторной отправки формы
    #39262127
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу показа сообщения один раз:

после запписи сообзения
Код: php
1.
2.
3.
 $_SESSION['sent'] =  time();
        header("Location: /send.php");
        exit;



и вначале скриппта

Код: php
1.
2.
3.
4.
5.
6.
if ($_SERVER['REQUEST_METHOD'] == 'GET' and isset($_SESSION['sent']) and $_SESSION['sent']+20 > time()) {
    //http://www.sql.ru/forum/1218881/zapret-povtornoy-otpravki-formy
    ok(1);
    exit;
}
    unset($_SESSION['sent']);



усь0.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Запрет повторной отправки формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]