как убрать обновление страницы при отправке формы
Как отправить форму в php, чтобы она не отправлялась повторно, после обновления страницы
Доброе время суток, уважаемые HABRовчане!
Сегодня тема пойдет об отправке формы на html-страничке, чтобы, при повторном обновлении, она не отправлялась заново в БД.
Не знаю, было ли такое где-то на просторах интернета, но, когда я попыталась найти, а мне было жутко это нужно, причем очень срочно, то я столкнулась с кучей проблем.
Во первых, почти все источники предлагают делать это таким образом:
Но, проблема в нем следующая, если вы, уже где то в начале страницы отправили заголовки, то на вас будут ругаться, мол, «заголовки отправлены, зачем ты хочешь, чтобы я это сделал еще один раз, угомонись!»
Но данные способы были неудобны, возможно, вам покажется, что это наоборот, самый лучший вариант и зачем изобретать велосипед?
Меня же, все способы, встретившиеся на просторах интернета, не устроили. И я решила сделать то, что будет удобно мне и не будет занимать большое количество переменных/времени/ресурсов.
Приступим.
Для начала, создадим простенькую форму.
Затем добавим в форму метод отправки, действие и имя: Действие будет происходить на другой странице, для удобства и дальнейшей функциональности.
Получается вот такой код:
Затем, мы создаем файлик redir.php и работаем над ним:
Все. Как видите это просто, быстро и удобно!
запретить обновление страницы при нажатии кнопки внутри формы
У меня проблема при использовании кнопок внутри формы. Я хочу, чтобы эта кнопка вызывала функцию. Это так, но с нежелательным результатом, что он обновляет страницу.
мой простой код выглядит так
при нажатии кнопки функция вызывается с обновленной страницей, которая сбрасывает весь мой предыдущий запрос, который влияет на текущую страницу, которая была результатом предыдущего запроса.
что я должен сделать, чтобы предотвратить обновление страницы?
11 ответов
пусть getData() возвращает false. Это все исправит.
добавить тип= «button»к кнопке.
HTML-код
jQuery
проблема в том, что он инициирует отправку формы. Если вы сделаете getData функции return false затем он должен остановить отправку формы.
кроме того, вы также можете использовать preventDefault метод объекта события:
все, что вам нужно сделать, это поставить тег типа и сделать кнопку типа.
это решает проблему
вместо использования тега кнопки, использовать тег input. Вот так,
метод javascript для отключения самой кнопки
Как только все поля формы удовлетворят вашим критериям, вы можете повторно включить кнопку
использование Jquery будет чем-то вроде этого
я столкнулся с той же проблемой. Проблема заключается в
Я не думаю, что это элегантный способ сделать это, но в моем случае у меня не было другого выбора.
если вы получили сообщение об ошибке. после обработки ajax удалите действие атрибута и в onsubmit атрибут, выполните свою функцию, а затем false return:
onsubmit=»functionToRun(); return false;»
Я не знаю, почему все эти проблемы с Firefox, но надеюсь, что это работает.
функция возврата не работает во всех случаях. Я попробовал:
это не работает для меня.
Я попытался вернуть false внутри функции, и это сработало для меня.
вы можете использовать ajax и jquery для решения этой проблемы:
Как предотвратить повторную отправку формы при обновлении страницы (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-форма:
после обработки POST данные ЭД вы делаете небольшой
как вы можете видеть данные формы 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 знаю не очень хорошо, поэтому прошу вас выручить.
Написал простой скрипт изменения цены при изменении размера товара. Работает так писать весь код не стал)
Циклом из БД выводятся размеры в option. При изменении option Автоматически срабатывает submit. И по value из option в бд происходит поиск цены и соответсвенно она выводится. Код работает на ура, только одно но( При срабатывании submit страница прыгает вверх(происходит обновление), и чтобы посмотреть цену приходится спускаться обратно. Помогите пожалуйста чтобы при отправке формы страница оставалась на том месте где она была
Попробовал сделать бы сам, но даже в голову не приходит как это реализовать:'( Надеюсь на вашу помощь. Заранее спасибо.
Как сделать запрос к php файлу, чтобы страница не обновлялась?
Всем привет. Подскажите пожалуйста, как обратиться к php файлу и вернуть значение на страницу без.
Как сделать, чтобы после заполнения текстбокса не обновлялась вся страница
Я новичок в ASP.NET Делаю сайт. В середине страницы сделал текстбокс и кнопку. По событию.
Как сделать так чтобы при нажатии на кнопку не обновлялась страница
Как сделать так чтобы при нажатии на кнопку не обновлялась страница?
Почему обновляется страница и как сделать так, чтобы она не обновлялась
Есть метод в контроле, в который передается или нет фаил. Когда я обращаюсь к этому методу и.
Запретить/отключить повторную отправку формы php
Подробно о повторной отправке формы php
Пример повторной отправки формы
Разместим выше приведенный код прямо здесь:
Нажмите кнопку «Нажми на меня».
После перезагрузки страницы нажмите «F5».
Если вы нажмете «продолжить», то первые данные отправятся второй раз на сервер.
Если речь идет о комментариях, то тут появятся два абсолютно одинаковых комментария.
Как избавиться от «повторной отправки формы!?»
Отключаем повторную отправку формы php
Чтобы отключить «повторную отправку формы php» нам придется немного изменить код, который мы написали ранее.
Чем отличается выше приведенный код(в предыдущем пункте).
Создаем сессию «$_SESSION[example1]» и предаем туда данные из «_POST».
+ exit, чтобы программа дальше не пошла.
При перезагрузке проверяем существует ли сессия:
Соберем весь код отмены повторной отправки формы php
Как найду, так исправлю.
Если у вас тоже не срабатывает, то выделенное красным можно удалить.
Еще вариант отключения повторной отправки формы.
Как избавиться от повторной отправки формы? Для этого нам понадобится.
Сделать отдельную страницу, на которую произойдет переадресация после выполнения php.
Для вывода результата. тоже можно использовать сессию.
Об использовании этого варианта отключения повторной отправки формы?
Можно ли использовать такой вариант отключения повторной отправки формы? Вполне! Этот вариант
Как происходит процесс отключения повторной отправки формы в php?
Чтобы отключить повторную отправку формы через сторонний файл нам понадобится:
Пример формы, чтобы отправить первичный post запрос.
Чтобы не бродить по все странице ища результат выполнения скрипта, нам нужен якорь
Как работает отключение повторной отправки формы!?
Переходим к примеру. который отключит повторную отправку формы!
В поле ввода введите свой текст, либо оставьте так.
Нажмите кнопку Удали повторную отправку формы! :
После получения ответа. попробуйте нажать «F5».
Вы ничего не увидите, страница просто перезагрузится. му убрали повторную отправку формы!
Сообщение системы комментирования :
Форма пока доступна только админу. скоро все заработает. надеюсь.