Вы действительно хотите отправить форму повторно что это значит

Запретить/отключить повторную отправку формы php

Подробно о повторной отправке формы php

Пример повторной отправки формы

Разместим выше приведенный код прямо здесь:

Нажмите кнопку «Нажми на меня».

После перезагрузки страницы нажмите «F5».

Если вы нажмете «продолжить», то первые данные отправятся второй раз на сервер.

Если речь идет о комментариях, то тут появятся два абсолютно одинаковых комментария.

Как избавиться от «повторной отправки формы!?»

Отключаем повторную отправку формы php

Чтобы отключить «повторную отправку формы php» нам придется немного изменить код, который мы написали ранее.

Чем отличается выше приведенный код(в предыдущем пункте).

Создаем сессию «$_SESSION[example1]» и предаем туда данные из «_POST».

+ exit, чтобы программа дальше не пошла.

При перезагрузке проверяем существует ли сессия:

Соберем весь код отмены повторной отправки формы php

Как найду, так исправлю.

Если у вас тоже не срабатывает, то выделенное красным можно удалить.

Еще вариант отключения повторной отправки формы.

Как избавиться от повторной отправки формы? Для этого нам понадобится.

Сделать отдельную страницу, на которую произойдет переадресация после выполнения php.

Для вывода результата. тоже можно использовать сессию.

Об использовании этого варианта отключения повторной отправки формы?

Можно ли использовать такой вариант отключения повторной отправки формы? Вполне! Этот вариант

Как происходит процесс отключения повторной отправки формы в php?

Чтобы отключить повторную отправку формы через сторонний файл нам понадобится:

Пример формы, чтобы отправить первичный post запрос.

Чтобы не бродить по все странице ища результат выполнения скрипта, нам нужен якорь

Как работает отключение повторной отправки формы!?

Переходим к примеру. который отключит повторную отправку формы!

В поле ввода введите свой текст, либо оставьте так.

Нажмите кнопку Удали повторную отправку формы! :

После получения ответа. попробуйте нажать «F5».

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

Сообщение системы комментирования :

Форма пока доступна только админу. скоро все заработает. надеюсь.

Источник

Отмена повторной отправки формы

Вы действительно хотите отправить форму повторно что это значит. php resubmit. Вы действительно хотите отправить форму повторно что это значит фото. Вы действительно хотите отправить форму повторно что это значит-php resubmit. картинка Вы действительно хотите отправить форму повторно что это значит. картинка php resubmit. Разместим выше приведенный код прямо здесь:

Мне часто задают вопросы относительно отмены повторной отправки формы. Например, Вы сделали форму добавления комментария, добавили обработчик на эту же страницу. Затем при добавлении комментария он успешно добавляется, но стоит пользователю нажать F5, как форма будет отправлена ещё раз. А F5 пользователь может легко нажать, если страница будет долго грузиться. В итоге, вместо 1-го комментария будет целых 2, а то и больше. В этой статье я покажу, как этого можно избежать.

Для начала разберём более подробно проблему на примере этого кода:

Нажав на кнопку «Возвести в квадрат«, Вы увидите результат работы скрипта. Но стоит после этого пользователю нажать F5, как скрипт снова будет выполняться. В данном случае, это не так критично, как с добавлением комментарием, однако, зачем нужна лишняя нагрузка на сервер?

А код страницы с формой теперь будет выглядеть так:

Подведу итог того, как отменить повторную отправку формы:

Вот так это делается в простых скриптах. Да и, в сложных, в конечном счёте делается то же самое.

Вы действительно хотите отправить форму повторно что это значит. date article. Вы действительно хотите отправить форму повторно что это значит фото. Вы действительно хотите отправить форму повторно что это значит-date article. картинка Вы действительно хотите отправить форму повторно что это значит. картинка date article. Разместим выше приведенный код прямо здесь:

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 11 ):

Или написать в форме action=».»

При таком примере писать придется. Редирект убьет все POSTы

А я делал по проще: в форму добавил скрытый input, в котором храниться случайное число генерирующееся php. А также при генерации оно забивается в сессии. Затем при принятии формы сначала проверяется совпадение числа, и если нет совпадения форма не обрабатывается. Это как скрытая капча, которая сама вводиться

Я сделал так: if (isset($_POST[‘knopka’]))

А меня интересует совсем противоположный вопрос! А как зделать чтоб отправка формы продублировалясь три раза с интервалом в секунду! Какой обрабочик нужно добавить в код?

Здравствуйте. Не очень понял как делать. Изучаю Ваш курс основы PHP. Перепроверил код, но все равно при обновлении страницы комментарий дублируется. А у Вас на видео все нормально, без всяких редиректов. Вот сам код:

Добавить запись

Записи в гостевой книге:

Я конечно извиняюсь, но вы сами то запускали, тестили свои скрипты, во первых после нажатия и отправки запроса белый экран, результаты почему то выводятся в консоле, а во вторых это не работает, т.к. при обновлении данные отправляются повторно. Только что проверил!

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

Источник

Вы действительно хотите отправить форму повторно что это значит

Допустим, мы делаем скрипт, который принимает данные из формы, переданные методом POST. Скрипт данные принял, обработал и выдал страницу с результатом. Но если пользователь вздумает обновить страницу в этот момент — он увидит сообщение такого плана:

Вы действительно хотите отправить форму повторно что это значит. 95624. Вы действительно хотите отправить форму повторно что это значит фото. Вы действительно хотите отправить форму повторно что это значит-95624. картинка Вы действительно хотите отправить форму повторно что это значит. картинка 95624. Разместим выше приведенный код прямо здесь:

Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведённое действие (например, запрос на поиск или онлайн-покупка).

И две кнопки. Нажатие на одну из них отправит данные повторно, что часто нежелательно. Нажатие на вторую не произведет обновления страницы. В любом случае, пользователю не хорошо от такого сообщения. Пользователи вообще не очень любят всякие внезапно выскакивающие окошки.

Для начала, покажу скрипт, который мы будем дорабатывать.

Можете отправить форму один раз, а потом нажать Ctrl+R и увидеть злополучное окно. Давайте от него избавляться.

Но сперва слово спонсору поста — сайту с полезным контентом для телефонов Samsung, который предлагает темы для samsung gt s5230, обои и прочий стафф.

Предотвращение повторной отправки формы с помощью серверного редиректа

Чтобы предотвратить повторную отправку данных формы можно делать серверный редирект. Это делается путем посылки браузеру заголовка Location с нужным урл. Например, это должна быть страница с благодарностью за заполненную форму. Тогда мы напишем что-то в духе:

В этом случае сервер получит данные, обработает их и вместо показа результата отправит клиента на страницу, где этот результат будет показан.

Недостаток этого метода состоит в том, что пользователь может нажать кнопку «Назад» и вернуться на страницу с редиректом. Она снова швырнет его вперед и так пользователь с трудом сможет вернуться на две страницы назад, к форме, которую изначально заоплнял.

Предотвращение повторной отправки формы с помощью клиентского редиректа

Клиентский редирект называется клиентским потому что он происходит на стороне клиента. То есть в браузере. Клиентский редирект может происходить при помощи JavaScript и meta-тегов.

У JavaScript есть преимущество — он перезаписывает History браузера так, что даже если пользователь нажмет кнопку «Назад» браузера, он не вернется на страницу, которую отдал обработчик формы. То есть, окошко исчезнет капитально. Но JS у некоторых отключен.

У META-тегов, с другой стороны, есть преимущество в плане универсальности. Они редиректят всех и всегда.

Оптимально будет сочетать эти два способа. Как — описал Александр Шуркаев в заметке оптимальный редирект.

Используем его метод следующим образом.

Подтвердите повторную отправку формы?

Пробуем! Теперь, как видно, никакого окна не появляется. Что мы сделали? Мы проверили. Если данные пришли — мы выводим все необходимое для редиректа. В принципе, после этого уже можно даже делать exit, чтобы не грузить браузер лишними данными, которые все равно никто не увидит.

Понравилась статья? Поставь плюс один!

← Предыдущая статьяСледующая статья →

Способы защиты от повторной отправки формы при перезагрузке страницы

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

Вы действительно хотите отправить форму повторно что это значит. 22679. Вы действительно хотите отправить форму повторно что это значит фото. Вы действительно хотите отправить форму повторно что это значит-22679. картинка Вы действительно хотите отправить форму повторно что это значит. картинка 22679. Разместим выше приведенный код прямо здесь:

Все начинается с того, что пользователь заполняет ту или иную html форму на вашем сайте, после чего, когда все ее поля заполнены, он отправляет данные на сервер, нажимая кнопку «Отправить», «Оформить заказ», «Купить» и т. д. Причем отправка данных формы на сервер может производиться двумя способами — GET и POST.

GET-данные – незашифрованные данные, которые передаются прямо через адресную строку, добавляя соответственные переменные к адресу текущей страницы, например, https://yandex.ru/search/?text=example. Как видно из примера — к основному адресу добавляется параметр text, значение которого и есть поисковый запрос, который вы отправляете через форму поиска на сервер Яндекса.

POST-данные – зашифрованные данные, которые не видны в адресной строке и ссылку на них дать нельзя. Однако есть одна небольшая проблема — при обновлении страницы, сразу после отправки POST-данных, любой из известных на данный момент браузеров заботливо переспросит у вас — «Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведённое действие (например, запрос на поиск или онлайн-покупка)». Такой вопрос вам задаст Файерфокс, если сразу после отправки POST-данных нажать кнопку F5 или обновить страницу каким-то другим способом, например, используя специальную кнопку в панели инструментов браузера.

Подтвердите повторную отправку формы

Другие браузеры спросят то же самое, только другими словами.

Конечно не многие пользователи обновляют страницу сразу после отправки данных формы (казалось бы, зачем вообще это делать), но иногда такая же проблема может возникнуть при нажатии кнопки «Назад». Если переход будет осуществляться на страницу, с которой отправлялись данные формы, она не загрузится, а вместо этого на экране появится сообщение о том, что данные устарели или что-то в этом роде.

Проблема повторной отправки данных форм актуальна в тех случаях, когда сразу после, происходит добавление новой строки в базу данных, например, заказ в интернет-магазине, регистрация нового пользователя и т. д., а также отправляется соответствующее email-уведомление. Для того, чтобы избежать нежелательных дублей записей в базе данных и писем на почте, необходимо предотвращать повторную отправку данных. А если сказать точнее — предотвращать или игнорировать. Поэтому мы рассмотрим два основных способа:

Способ №1: «Переадресация» — предотвращение повторной отправки данных

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

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

header(‘Location: http://’.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’].’?success’); exit();

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

Самое главное здесь то, что переход может осуществляться на ту же страницу, на которой мы находились до этого, но при этом все POST-данные будут очищены под ноль, а значит при обновлении страницы не произойдет повторная отправка старых данных формы на сервер — как раз то, что нам было нужно.

Главным минусом этого способа является лишнее обновление страницы. Это конечно не критично, но и не совсем обязательно, поэтому первый способ нельзя назвать идеальным.

Способ №2: «Сессия» — игнорирование данных, отправленных повторно

В этом способе мы будем использовать сессию, поэтому убедитесь, что сессии объявлены в начале скрипта и готовы к работе. Для этого нужно воспользоваться функцией инициализации сессий session_start().

Суть метода — к целевой форме нужно добавить дополнительное скрытое поле с произвольным именем и с произвольным значением, например так:

Предварительно, разумеется, нужно зарегистрировать сессию с идентификатором sessid и присвоить ей как можно более абстрактное значение при помощи одной из хеш-функций, например MD5.

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

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

Теперь нам осталось только сверить сессию sessid со скрытым значением одноименного поля sessid, переданным нашей с вами формой. Если они идентичны, то есть смысл проверять остальные данные, а если нет — форму попытались отправить заново, при этом сама сессия переопределилась, а значение sessid, которое передавалось через форму осталось старым.

Недостатков у данного способа, как таковых, нет. Единственное что можно сказать — сессии создаются на сервере в виде специальных файлов и чем их больше, тем выше нежелательная нагрузка. Поэтому лучше стараться избегать использования лишних сессий, где это представляется возможным, но данный случай, как и авторизация пользователей на сайте, является очень важным моментом, поэтому является исключением и можно не переживать.

Как видите, все очень просто — мы с вами разобрали два простых способа повторной отправки данных формы. Оба прекрасно работают, хорошо себя зарекомендовали и неоднократно проверялись на практике на разных сайтах. Но на наш взгляд, предпочтительней все-таки использовать второй способ с сессией.

Источник

Как предотвратить повторную отправку формы при обновлении страницы (F5 / CTRL+R)

У меня есть простая форма, которая отправляет текст в моей таблице SQL. Проблема в том, что после того, как пользователь отправляет текст, они могут обновить страницу, и данные будут отправлены снова без повторного заполнения формы. Я мог бы перенаправить пользователя на другую страницу после отправки текста, но я хочу, чтобы пользователи оставались на той же странице.

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

18 ответов:

с помощью моего веб-сайта я сохраню сообщение в файле cookie или сеансе, перенаправлю после публикации, прочитаю файл cookie/сеанс, а затем очистите значение этой переменной сеанса или файла cookie.

Я также хотел бы отметить, что вы можете использовать подход javascript, window.history.replaceState чтобы предотвратить повторную отправку на кнопку Обновить и назад.

Я бы все равно рекомендовал подход Post/Redirect/Get, но это новое решение JS.

вы действительно должны использовать шаблон Post Redirect Get для обработки этого, но если вы каким-то образом оказались в положении, когда PRG нежизнеспособен (например, сама форма находится в include, предотвращая перенаправления), вы можете хэшировать некоторые параметры запроса, чтобы сделать строку на основе содержимого, а затем проверить, что вы ее еще не отправили.

вы можете повторно отправить форму через переменную сеанса, например

использовать заголовок и перенаправить страницу.

header(«Location:your_page.php»); вы можете перенаправить на ту же страницу или другую страницу.

когда форма обработана, вы перенаправляете на другую страницу:

вы также можете перенаправить на ту же страницу.

Если вы делаете что-то вроде комментариев и вы хотите, чтобы пользователь оставался на той же странице, вы можете использовать AJAX для обработки формы представления

довольно верный способ реализовать уникальный идентификатор в пост и кэшировать его в

тогда в вашем коде сделайте следующее:

Итак, у вас есть HTML-форма:

Вы действительно хотите отправить форму повторно что это значит. 74a02cedb1a28759d62ab247f85993ac. Вы действительно хотите отправить форму повторно что это значит фото. Вы действительно хотите отправить форму повторно что это значит-74a02cedb1a28759d62ab247f85993ac. картинка Вы действительно хотите отправить форму повторно что это значит. картинка 74a02cedb1a28759d62ab247f85993ac. Разместим выше приведенный код прямо здесь:

после обработки POST данные ЭД вы делаете небольшой

Вы действительно хотите отправить форму повторно что это значит. 93b0ee18c136bf7b40f3192537d83c59. Вы действительно хотите отправить форму повторно что это значит фото. Вы действительно хотите отправить форму повторно что это значит-93b0ee18c136bf7b40f3192537d83c59. картинка Вы действительно хотите отправить форму повторно что это значит. картинка 93b0ee18c136bf7b40f3192537d83c59. Разместим выше приведенный код прямо здесь:

как вы можете видеть данные формы POST Эд process.php сценарий.
Этот скрипт процесс POST Эд данные и рендеринг /the/result/page сразу с:

в качестве другого решения я прошу запрос the Mozilla FireFox команда, чтобы позволить пользователям устанавливать NextPage заголовок, который будет работать как и сделать post/redirect/get шаблон устарел.

короче. Когда серверная форма процесса POST данные успешно это:

браузер, в свою очередь, когда вижу NextPage заголовок:

я думаю, что это было бы превосходно, если реализовали бы, не так ли? =)

просто перенаправьте его на ту же страницу после использования данных формы, и он работает. Я уже пробовал.

уточненная версия сообщения Moob. Создайте хэш сообщения, сохраните его как файл cookie сеанса и сравните хэши каждого сеанса.

после вставки его в базу данных, вызовите метод unset () для очистки данных.

unset ($_POST);

чтобы предотвратить вставку данных обновления, выполните перенаправление страницы на ту же страницу или другую страницу после вставки записи.

заголовок (‘Location:’.$_SERVER [‘PHP_SELF’]);

в принципе, вам нужно перенаправить с этой страницы, но это все еще может создать проблему, пока ваш интернет медленный (заголовок перенаправления с сервера)

пример базового сценария :

нажмите на кнопку Отправить дважды

на стороне клиента

в вашей html форме поставьте это:

Ps: Если вы используете форму Get, вы можете легко изменить все сообщения с GET, и это тоже работает.

Я использую эту строку javascript, чтобы заблокировать всплывающее окно с запросом на повторную отправку формы при обновлении после отправки формы.

просто поместите эту строку в нижний колонтитул вашего файла и увидеть магию

Использование шаблона Post / Redirect / Get из ответа Keverw-хорошая идея. Однако вы не можете оставаться на своей странице (и я думаю, что это было то, что вы просили?) Кроме того, это может иногда fail:

если веб-пользователь обновляется до завершения первоначальной отправки из-за задержки сервера, что приводит к дублированию запроса HTTP POST в некоторые агенты пользователей.

другой вариант будет хранить в сеансе, если текст должен быть записан в вашу базу данных SQL следующим образом:

Как говорили другие, невозможно выйти из использования post/redirect/get. Но в то же время это достаточно легко сделать, что вы хотите сделать на стороне сервера.

на странице POST вы просто проверяете пользовательский ввод, но не действуете на нем, вместо этого вы копируете его в массив сеанса. Затем вы снова перенаправляетесь на главную страницу отправки. Ваша главная страница отправки начинается с проверки наличия массива сеансов, который вы используете, и если да, то скопируйте его в локальный массив и снимите его. Оттуда вы можете действовать на него.

таким образом, вы только делаете всю свою основную работу один раз, добиваясь того, что вы хотите сделать.

Источник

Как отправить форму в php, чтобы она не отправлялась повторно, после обновления страницы

Доброе время суток, уважаемые HABRовчане!

Сегодня тема пойдет об отправке формы на html-страничке, чтобы, при повторном обновлении, она не отправлялась заново в БД.

Не знаю, было ли такое где-то на просторах интернета, но, когда я попыталась найти, а мне было жутко это нужно, причем очень срочно, то я столкнулась с кучей проблем.

Во первых, почти все источники предлагают делать это таким образом:

Но, проблема в нем следующая, если вы, уже где то в начале страницы отправили заголовки, то на вас будут ругаться, мол, «заголовки отправлены, зачем ты хочешь, чтобы я это сделал еще один раз, угомонись!»

Но данные способы были неудобны, возможно, вам покажется, что это наоборот, самый лучший вариант и зачем изобретать велосипед?

Меня же, все способы, встретившиеся на просторах интернета, не устроили. И я решила сделать то, что будет удобно мне и не будет занимать большое количество переменных/времени/ресурсов.
Приступим.

Для начала, создадим простенькую форму.

Затем добавим в форму метод отправки, действие и имя:
Действие будет происходить на другой странице, для удобства и дальнейшей функциональности.

Получается вот такой код:

Затем, мы создаем файлик redir.php и работаем над ним:

Все. Как видите это просто, быстро и удобно!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *