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

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

демо версия урока

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

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

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

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

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

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

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

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

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

One Response

  1. Петр 08.09.2019

Leave a Reply