Редирект. Как оставить пользователя на той же странице после отправки формы.

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

дополнительные материалы к урокам демо версия урока

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

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

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

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Untitled Document</title> </head> <body> <form action="redirect.php" method="post"> <label for="name">Name:</label><br/> <input type="text" name="name" id="name"><br/> <label for="lastname">Last Name:</label><br/> <input type="text" name="lastname" id="lastname"><br/><br/> <input type="submit" name="btn" id="btn" value="Send"> </form> </body> </html>

форма для отправки данных

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

Файлом-обработчиком формы будет файл «redirect.php», который мы создадим в следующем шаге и сохраним в том же каталоге, что и текущий файл для того, чтобы путь был корректен.

Также у каждого поля нашей формы есть параметр «name», при помощи которого мы будем передавать то, что заполнил пользователь в файл-обработчик.

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

2. Теперь, собственно нужно создать наш файл-обработчик «redirect.php».

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

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

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

Примерно так:

<?php $name = $_POST['name']; $lastname = $_POST['lastname']; $address = 'mymail@mail.ru'; $sub = '=?utf-8?B?'. base64_encode('Сообщение:') .'?='; $mess= "Отправитель: $name \n $lastname \n "; $headers= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\r\n"; mail($address, $sub, $mess, $headers ); ?>

Если Вы сейчас попытаетесь отправить форму, то сообщение будет отправлено, но после отправки Вы окажетесь на странице «redirect.php», на которой не увидите ничего, кроме пустоты.

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

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

$redirect = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']:'redirect-form.html'; header("Location: $redirect"); exit();

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

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

Глобальная переменная $_SERVER['HTTP_REFERER'] является Переменной окружения. Она хранит URL-адрес, с которого пользователь попал на данную страницу.

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

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

Результат занесен в переменную «$redirect». После этого всего мы просто вызываем функцию header(), в которую и передаем нашу переменную.

ВАЖНО!

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

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

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

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

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

С Вами была Анна Котельникова. До встречи!

Понравилась статья? Поделись с друзьями!


Будьте в курсе новых публикаций на Блоге!

rss podpiska

Введите Ваш E-mail:


Комментарии к этой статье:

Комментарий добавил(а): Максим
Дата: 2014-12-28

А как отобразить сообщение "Данные добавлены/отправлены?

Комментарий добавил(а): Ru.
Дата: 2015-03-22

Спасибо! Статья пригодилась!

Комментарий добавил(а): Михаил
Дата: 2015-04-02

Спасибо, познавательно. А если без редиректа? На этот же файл форму и отправить. Или так нельзя?!

Комментарий добавил(а): данди
Дата: 2015-06-10

дебильнее не чего не встречал

Комментарий добавил(а): Serge
Дата: 2015-07-31

thx bro

Комментарий добавил(а): Serge
Дата: 2015-08-01

можно еще так bro echo "<script>history.go(-1)</script>";

Комментарий добавил(а): Иван
Дата: 2015-09-29

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

Комментарий добавил(а): Анна
Дата: 2015-10-02

спасибо, пригодилось

Комментарий добавил(а): Сергей
Дата: 2015-10-27

Спасибо! Отмучился, нормально работает.

Комментарий добавил(а): степа
Дата: 2016-07-19

все работает, спасибо

Комментарий добавил(а): Алекс
Дата: 2016-09-23

Автор, а почему Вы забыли объяснить существование элемента redirect-form.html ???

Комментарий добавил(а): Alex
Дата: 2017-01-30

А почему не обработать форму на той же странице? Так называемая single page fom.

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


Введите сумму чисел с картинки:

Почему стоит подписаться на обновления блога

Будьте в курсе новых публикаций на Блоге!

rss podpiska

Введите Ваш E-mail: