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() не должно быть никаких операторов вывода. Иначе, функция не только не отработает, но и на экран Вы получите ошибку.

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

Все исходные файлы Вы можете найти в «Исходниках» к уроку.

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

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

Источник

Редирект после 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, юзер-агент НЕ ДОЛЖЕН автоматически редиректить запрос до тех пор, пока он не будет подтверждён пользователем, так как это может нарушить условия запроса.

Там же в заметках написано, что несмотря на это, многие юзер-агенты пренебрегают этим правилом и интерпретируют 302 статус как 303. А пошло это ещё со времён HTTP/1.0, в котором 303 статуса ещё не было.

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

В RFC в заметке к статусу 303 написано:
Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303

Многие пре-HTTP/1.1 юзер-агенты не понимают 303 статус. Если совместимость с такими клиентами важна, то вместо него можно использовать 302 статус, так как большинство таких агентов реагируют на 302 статус также как на 303.

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

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

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

Источник

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

Здравствуйте, уважаемые форумчане.

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

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

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

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

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

Как сделать редирект после отправки формы
Привет всем, подскажите плиз, как сделать редирект на страницу «Спасибо за сообщение», после того.

tickРедирект после отправки «Формы обратной связи»
В общем есть форма обратной связи нужно что бы после нажатия кнопки «отправить» юзера перекидывало.

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

Решение

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

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

Добавлено через 2 минуты
Можете поискать на форуме по моему нику и ключу «перенаправление». Вот, например:
Сообщение после отправки письма

Добавлено через 1 минуту
Только ищите в разделе «PHP».

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

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

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

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

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

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

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

Добавлено через 30 минут
А на сколько правильно вот такое решение, вместо Location, в моем случае?

Источник

Как перенаправить пользователя на другую страницу после отправки формы в Contact Form 7

Хотите перенаправить пользователя на другую страницу после успешной отправки формы в Contact Form 7? Сегодня мы сделаем это! ?

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

Устанавливаем и активируем плагин Contact Form 7 Redirection, переходим на страницу редактирования существующей формы или создания новой и выбираем вкладку «Настройки перенаправления».

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

proekt bez nazvaniya 2

либо указать произвольный адрес, в том числе внешний, например, http://yandex.ru. В этом случае отметьте галочку «Использовать внешний URL».

proekt bez nazvaniya 3

После настройки перенаправления не забудьте сохранить изменения, нажав кнопку «Сохранить».

Если отметить галочку «Передать поля из формы в качестве параметров URL-адреса» (1), все значения полей отправленной формы будут переданы на страницу переадресации в виде GET-параметров. Пример: http : //test.wpcute.ru/test-page/?your-name=Денис&your-email=order%40wpcute.ru&your-subject=Заказ+доработки&your-message=Мне+нужна+доработка+сайта+wpcute.ru

А если включить опцию «Открывать страницу в новой вкладке» (2) — страница переадресации будет открыта в новой вкладке браузера.

2018 07 28 054756

С помощью сниппета

Альтернативный вариант — использовать следующий сниппет.

Источник

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

se

Требования к упаковке товара на маркетплейсах

С начала года число самозанятых в России выросло в 2,4 раза

76995 1

Нашел рабочий скрипт формы, но после отправки идет редирект на domen.ru/mail.php

10270 2

76995 1

в mail.php скрипт формы расположен

SEO_87, а что вы хотели сделать?

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

если не будет обращение к mail.php у вас просто письмо никуда не уйдет после сабмита

10270 2

Тоесть у вас происходит «редирект» с mail.php на mail.php? Редирект, то когда с одного адреса вас перенаправляют на другой. А то что у вас, это штатное поведение html-формы, в которой нажали кнопку с type=»submit». Если вы хотите изменить это поведение, то смотрите в cторону js, делается несложно, но знания кое какие понадобятся. Впроочем всё гуглится за минуты.

Надо либо через header сделать, либо через js :)

так в mail.php в конце сделайте редирект на ту страницу, на которую надо:

Если я вас правильно понял.

Если надо совсем без редиректов, то форму отправляейте аяксом. ?

76995 1

ziliboba0213:
так в mail.php в конце сделайте редирект на ту страницу, на которую надо:

Если я вас правильно понял.
Если надо совсем без редиректов, то форму отправляейте аяксом. ?

Спасибо! Странно почему у меня с первого раза не получилось)

Это потому, что надо было написать не «убрать редирект, а добавить редирект » в стартпосте)))

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • reddit на русском приложение языке
  • reddit как поменять язык на русский в приложении