Как сделать редирект после отправки формы

Добавил пользователь Алексей Ф.
Обновлено: 10.09.2024

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

Сегодня рассмотрим один достаточно простой способ реализации такой задачи.

Редирект после отправки формы

1. Для начала давайте создадим html-файл с очень простой формой, где пользователю будет предложено ввести только свое имя и фамилию.

Как видите, кроме формы здесь больше ничего нет.

Думаю, здесь все ясно.

Что он может делать?

Он может делать разные вещи, например, записывать данные в базу и т.д. Но для этого примера давайте реализуем отправку данных из формы на e-mail адрес.

Давайте наконец то реализуем то, чтобы мы оставались на странице с формой.

Для этого после функции mail() и перед закрывающим тегом php блока нужно добавить следующий код:

Что же делает данный код?

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

ВАЖНО!

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

Ну вот в общем то и все! Теперь достаточно простой метод в Вашем распоряжении.

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

А также оставляйте комментарии и подписывайтесь на обновления блога. Будем и дальше продолжать изучать тонкости верстки, программирования, дизайна и еще много всего интересного.

Редирект после отправки формы

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

По моей логике после сохранения результата должен происходить редирект на эту же страницу. Но моя логика тут не работает.

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

Если не сложно, подскажите, пожалуйста, что я делаю не так? Как правильно это осуществить?

Заранее благодарен за возможные ответы.

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

Redirect после отправки формы
Доброго времени суток, подскажите пожалуйста, как мне сделать редирект! код весь работает, после.

Решение

tish88, все никак не соберусь написать что-нибудь по этому поводу.

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

Phantom-84, спасибо большое за ответ. Читал ту тему. Но что-то вот у меня никак не идет. Я тут в итоге такие махинации насовершал, что у меня ошибки полетели со всех фронтов)) Лучше б вообще я с этим редиректом не связывался.

В общем, весь этот код, который я описал выше, находился у меня на странице edit.php А там у меня и обработчик формы, и сама форма, и еще не весь знает что. Но тем не менее без редиректа все работало. С попыткой впихнуть редирект, у меня было два варианта: либо ничего не происходило, либо header ругался на то, что присутствует html-разметка. Писал его так:

Htext, даже при использовании AJAX не мешает продублировать отправку обычным способом.

По этой же причине лучше писать так:

Phantom-84, продолжаю осиливать.

И так. Мы имеем файл edit.php с содержимым формы:

Кстати, Phantom-84, спасибо Вам огромное!) Вот редирект теперь работает))) Только он один работает как надо Единственное, я не могу понять, как сделать редирект на ту же страницу, где и был пользователь (пример выше писал).

cf7

Навигация по статье:

На сегодняшний день Contact Form7 является одним из наиболее популярных, удобных и многофункциональных плагинов для создания формы обратной связи у вас на сайте. С его помощью можно делать как стандартные формы обратной связи так и формы заказа звонка, оформления заказа, сбор подписной базы и так далее.

Для чего нужно перенаправлять пользователя на страницу благодарности?

В основном такие страницы используют на посадочных страницах Landing Page. Бытует мнение что наличие таких страниц позволяет увеличить конверсию. Возможно это так, но при условии что ваша страница правильно оформлена.

Можно выделить несколько элементов, которые желательно реализовать на странице благодарности:

Можно разместить там следующий контент:

Главное чтобы информации не было слишком много и она была интересна вашему потенциальному клиенту.

Редирект после POST запроса

Каждый веб-разработчик знает, что после POST сабмита формы желательно сделать редирект, чтобы предотвратить повторную отправку данных, когда пользователь захочет обновить страницу. В основном это критически необходимая операция, так как данные формы могут сохраняться в базе данных или участвовать в платёжной транзакции. И тогда данные не только продублируются, но и спишутся лишние деньги.

Но речь не о деньгах, а о правильном редиректе…

Практически все веб-приложения при редиректе POST запроса возвращают статус 302 Found. Например, в php редирект делают так: header(‘Location: /new/location’);. Без дополнительных параметров или если отдельно не указан другой статус, функция вернёт именно 302 Found.

Теперь обратимся в официальным документам. В RFC 2616 сказано следующее:
If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Если статус 302 получен в ответ на запрос отличный от GET или HEAD, юзер-агент НЕ ДОЛЖЕН автоматически редиректить запрос до тех пор, пока он не будет подтверждён пользователем, так как это может нарушить условия запроса.

Т.е. для редиректа POST запроса нужно использовать статус 303 See Other, который специально для этого и предназначен. В php редирект будет выглядеть, например, так: header(‘Location: /new/location’, true, 303);

И получается два варианта:
1. По прежнему использовать 302;
a. есть вероятность нарваться на юзер-агента, который чтит спецификацию и выдаст предупрежление.
б. так как такое поведение не стандартно, можно нарваться на вообще непредсказуемый результат.

2. Использовать 303, тогда старые клиенты не поймут, что от них хотят.

Во втором случае, можно анализировать версию протокола, запрошенную клиентом, и выдавать 302 для старых клиентов. В теле ответа писать ссылку на новый УРЛ. Тогда пользователь старого агента, сможет хотя бы кликнуть на ссылку.

С помощью плагина Contact Form 7 Redirection

Здесь вы можете либо выбрать одну из существующих страниц сайта,

Основные коды редиректов

  • 301 – текущая страница удалена на всегда, заменой старой считать новый URL.
  • 302 – текущая страница временно не доступна, заменой считать пока новый URL.
  • 303 – используется после отправки формы методом POST (подробнее Post/Redirect/Get - PRG).

Итак, сделать 301-й редирект можно так:

Но функция header() не сработает если до ее вызова в браузер уже выводился какой-то контент и вызовет ошибку:

Warning: Cannot modify header information - headers already sent by…

Также можно подстраховаться добавив JS-редирект и ссылку если функция header() не сработает.

В качестве обратной связи будем использовать контактную форму, созданную с помощью популярного среди WordPress-пользователей бесплатного плагина Contact Form 7 .

Форма обратной связи

Для перенаправления пользователя можно воспользоваться удобным решением – бесплатным плагином Contact Form 7 Redirection . Во-первых, его нужно установить и активировать, после чего в админ-панели перейти в раздел Contact Form 7 -> Контактные формы и выбрать свою контактную форму.

Настройка форм в CF7

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

Настройка форм в CF7

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

Настройка редиректа в плагине Contact Form 7 Redirection

Если для перехода будет выбрана внешняя URL-ссылка, то есть возможность ее открыть в новой вкладке браузера. Для этого служит опция Open page in a new tab. После того, как редирект был задан, необходимо нажать кнопку Сохранить.

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

Как работает базовый редирект?


Давайте разберемся, что происходит на скриншоте выше:

Браузер клиента запрашивает определенную страницу с сервера. В приведенном выше примере клиент запросил содержимое файла index.php.


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Когда клиентский браузер обнаруживает код 301 или 302, он знает, что ему нужно инициировать другой запрос к новому URL-адресу для получения содержимого. Он инициирует запрос на извлечение файла new_index.php.

Наконец, сервер отправляет содержимое нового URL-адреса.

Как работает редирект в PHP

Как использовать функцию header

Давайте рассмотрим синтаксис функции header().

$replace: Это необязательный параметр, который указывает, должен ли заголовок заменить предыдущий аналогичный заголовок.


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

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

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

Зачем использовать функцию Die() или Exit() после заголовка перенаправления?

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

Знаменитая ошибка: заголовки уже отправлены

Заключение

Автор: Sajal Soni

Редакция: Команда webformyself.


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

Читайте также: