redirect после отправки формы
Website-create.ru
Обычно при отправке какой-либо формы пользователь переходит на страницу файла-обработчика данной формы. А что делать, если мы хотим оставить пользователя на той же странице, однако, чтобы файл-обработчик все же отработал как нужно… Сегодня рассмотрим один из способов, как оставить пользователя на той же странице после отправки формы.
Человек, заполняет какую-либо форму, нажимает на кнопку «Отправить» и попадает на страницу файла-обработчика. Это не всегда то, что нам нужно. Иногда нам нужно оставить пользователя на той же странице, с которой произошла отправка. Однако, при этом, действия, которые прописаны в файле-обработчике должны быть выполнены.
Сегодня рассмотрим один достаточно простой способ реализации такой задачи.
Редирект после отправки формы
1. Для начала давайте создадим html-файл с очень простой формой, где пользователю будет предложено ввести только свое имя и фамилию.
Как видите, кроме формы здесь больше ничего нет.
Файлом-обработчиком формы будет файл «redirect.php», который мы создадим в следующем шаге и сохраним в том же каталоге, что и текущий файл для того, чтобы путь был корректен.
Также у каждого поля нашей формы есть параметр «name», при помощи которого мы будем передавать то, что заполнил пользователь в файл-обработчик.
Думаю, здесь все ясно.
2. Теперь, собственно нужно создать наш файл-обработчик «redirect.php».
Что он может делать?
Он может делать разные вещи, например, записывать данные в базу и т.д. Но для этого примера давайте реализуем отправку данных из формы на e-mail адрес.
Для этого нам нужно получить информацию из формы, которую пытается отправить пользователь; сформировать необходимые заголовки; прописать адрес, на который будет отправлено сообщение и реализовать отправку при помощи функции mail().
Если Вы сейчас попытаетесь отправить форму, то сообщение будет отправлено, но после отправки Вы окажетесь на странице «redirect.php», на которой не увидите ничего, кроме пустоты.
Давайте наконец то реализуем то, чтобы мы оставались на странице с формой.
Для этого после функции mail() и перед закрывающим тегом php блока нужно добавить следующий код:
Если Вы попытаетесь отправить форму теперь, то сообщение также придёт на нужный адрес, но Вы останетесь на нашей первой странице с формой.
Что же делает данный код?
Глобальная переменная $_SERVER[‘HTTP_REFERER’] является Переменной окружения. Она хранит URL-адрес, с которого пользователь попал на данную страницу.
Мы проверяем, существует ли такая переменная. Если она существует (то есть в ней хранится значение), то в переменную «$redirect» мы заносим это значение (то есть адрес нашей страницы с html-формой). А если не существует (это в том случае, если пользователь просто вручную вбил в адресную строку имя нашего файла-обработчика), то мы присваиваем значение адреса нашего html-файла с формой.
Здесь я использую тернарный оператор для описания этого условия, но Вы также можете использовать конструкцию if-else, если она для Вас более удобна и привычна.
Результат занесен в переменную «$redirect». После этого всего мы просто вызываем функцию header(), в которую и передаем нашу переменную.
ВАЖНО!
Самое главное здесь запомнить, что перед функцией header() не должно быть никаких операторов вывода. Иначе, функция не только не отработает, но и на экран Вы получите ошибку.
Ну вот в общем то и все! Теперь достаточно простой метод в Вашем распоряжении.
Все исходные файлы Вы можете найти в «Исходниках» к уроку.
Не забывайте поделиться уроком с Вашими друзьями при помощи кнопок соц. сетей, которые Вы можете найти ниже.
А также оставляйте комментарии и подписывайтесь на обновления блога. Будем и дальше продолжать изучать тонкости верстки, программирования, дизайна и еще много всего интересного.
Как отправить форму в php, чтобы она не отправлялась повторно, после обновления страницы
Доброе время суток, уважаемые HABRовчане!
Сегодня тема пойдет об отправке формы на html-страничке, чтобы, при повторном обновлении, она не отправлялась заново в БД.
Не знаю, было ли такое где-то на просторах интернета, но, когда я попыталась найти, а мне было жутко это нужно, причем очень срочно, то я столкнулась с кучей проблем.
Во первых, почти все источники предлагают делать это таким образом:
Но, проблема в нем следующая, если вы, уже где то в начале страницы отправили заголовки, то на вас будут ругаться, мол, «заголовки отправлены, зачем ты хочешь, чтобы я это сделал еще один раз, угомонись!»
Но данные способы были неудобны, возможно, вам покажется, что это наоборот, самый лучший вариант и зачем изобретать велосипед?
Меня же, все способы, встретившиеся на просторах интернета, не устроили. И я решила сделать то, что будет удобно мне и не будет занимать большое количество переменных/времени/ресурсов.
Приступим.
Для начала, создадим простенькую форму.
Затем добавим в форму метод отправки, действие и имя: Действие будет происходить на другой странице, для удобства и дальнейшей функциональности.
Получается вот такой код:
Затем, мы создаем файлик redir.php и работаем над ним:
Все. Как видите это просто, быстро и удобно!
Как правильно предотвратить повторную отправку формы?
Например, написание сообщения пользователем: после заполнения формы и нажатия кнопки Отправить, появляется страница, где написано сообщение Отправлено, а ниже список всех сообщений. Если обновить страницу в Опере, то сообщение еще раз отправится, если в Хроме, то спросит Отправить ли форму еще раз, а нужно обновить страницу с сообщениями не спрашивая не о чем.
— Если делать со скрытым полем со случайным значением, и проверять это значение, то повторная отправка всё равно будет спрашиваться, хоть и не добавится уже.
+ Поэтому я хочу сделать так: на сайте используются свои сессии в базе MySQL, но чтобы не напрягать базу, я хочу использовать встроенные в php сессии как раз для этого дела, а именно: в месте вывода сообщения об успешной отправке, то есть после физического добавления информации в базу, стартовать сессию, в нее добавить переменную с сообщением «Сообщение успешно добавлено!», затем сделать перенаправление на эту же страницу, где выводятся все сообщения. А в коде самой страницы, стартовать сессию, и если есть в ней переменная с сообщением, то вывести его и удалить переменную.
+ А еще лучше, сделать массив сообщений и выводить их все, но если вдруг открыто несколько вкладок, то есть очень малая вероятность, что будет что-то одновременно и отобразится сообщение не в той вкладке, поэтому наверно стоит сделать какое-то случайное имя переменной, и передавать это имя GET параметром в url перенаправления, и уже по нему выводить и удалять переменную. Тогда вроде всё нормально.
Как Вам такой вариант, и как вообще это правильно делать, может, всё-таки отдельную страницу, как на многих форумах «Сообщение добавлено, сейчас Вы будете перенаправлены»?
Как перенаправить пользователя на другую страницу после отправки формы в Contact Form 7
Хотите перенаправить пользователя на другую страницу после успешной отправки формы в Contact Form 7? Сегодня мы сделаем это! 💯
С помощью плагина Contact Form 7 Redirection
Устанавливаем и активируем плагин Contact Form 7 Redirection, переходим на страницу редактирования существующей формы или создания новой и выбираем вкладку «Настройки перенаправления».
Здесь вы можете либо выбрать одну из существующих страниц сайта,
либо указать произвольный адрес, в том числе внешний, например, http://yandex.ru. В этом случае отметьте галочку «Использовать внешний URL».
После настройки перенаправления не забудьте сохранить изменения, нажав кнопку «Сохранить».
Если отметить галочку «Передать поля из формы в качестве параметров URL-адреса» (1), все значения полей отправленной формы будут переданы на страницу переадресации в виде GET-параметров. Пример: http : //test.wpcute.ru/test-page/?your-name=Денис&your-email=order%40wpcute.ru&your-subject=Заказ+доработки&your-message=Мне+нужна+доработка+сайта+wpcute.ru
А если включить опцию «Открывать страницу в новой вкладке» (2) — страница переадресации будет открыта в новой вкладке браузера.
С помощью сниппета
Альтернативный вариант — использовать следующий сниппет.
Как предотвратить повторную отправку формы при обновлении страницы (F5 / CTRL + R)
У меня есть простая форма, которая представляет текст в мою таблицу SQL. Проблема в том, что после того, как пользователь отправит текст, он может обновить страницу, и данные снова будут отправлены без повторного заполнения формы. Я мог бы перенаправить пользователя на другую страницу после отправки текста, но я хочу, чтобы пользователи оставались на той же странице.
Я помню, как читал что-то о предоставлении каждому пользователю уникального идентификатора сеанса и сравнивал его с другим значением, которое решило проблему, с которой я столкнулся, но я забыл, где это.
Решение
На моем веб-сайте я буду сохранять сообщение в файле cookie или сеансе, перенаправлять после сообщения, читать файл cookie / сеанс, а затем очищать значение этой переменной сеанса или переменной cookie.
Другие решения
Я также хотел бы отметить, что вы можете использовать подход JavaScript, window.history.replaceState для предотвращения повторной отправки на кнопку «Обновить» и «Назад».
Я все еще рекомендую подход Post / Redirect / Get, но это новое решение JS.
Вы действительно должны использовать шаблон Post Redirect Get для обработки этого, но если вы каким-то образом оказались в положении, где PRG нежизнеспособен (например, сама форма находится во включении, предотвращающем перенаправления), вы можете хешировать некоторые параметры запроса создать строку на основе содержимого, а затем проверить, что вы ее еще не отправили.
Когда форма обработана, вы перенаправляете на другую страницу:
Вы также можете перенаправить на ту же страницу.
если вы делаете что-то вроде комментариев и хотите, чтобы пользователь оставался на той же странице, вы можете использовать Ajax для обработки отправки формы
Используйте заголовок и перенаправьте страницу.
header(«Location:your_page.php»); Вы можете перенаправить на ту же страницу или другую страницу.
Вы можете предотвратить повторную отправку формы через переменную сессии.
Довольно верный способ — внедрить уникальный идентификатор в сообщение и кэшировать его в
Затем в вашем коде сделайте это:
Я нашел следующий обходной путь. Вы можете избежать перенаправления после обработки POST запрос, манипулируя history объект.
Итак, у вас есть HTML-форма:
Когда вы обрабатываете эту форму на своем сервере, вы вместо перенаправления пользователя на /the/result/page путем настройки Location заголовок как это:
После обработки POST редактируемые данные, которые вы отображаете, небольшие
как вы можете видеть данные формы POST ед process.php скрипт.
Этот скрипт процесс POST редактирование данных и рендеринг /the/result/page однажды с:
В качестве другого решения я прошу запрос функции Mozilla FireFox команда, чтобы позволить пользователям настроить NextPage заголовок, который будет работать как Location заголовок и сделать post/redirect/get шаблон устарел.
Короче. Когда серверный процесс формируется POST данные успешно это:
Браузер в свою очередь, когда увидите NextPage заголовок:
Я думаю, что это было бы замечательно, если бы оно было реализовано, не так ли? =)