Переадресация после отправки формы php

Переадресация после отправки формы php

Доброе время суток, уважаемые HABRовчане!

Сегодня тема пойдет об отправке формы на html-страничке, чтобы, при повторном обновлении, она не отправлялась заново в БД.

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

Во первых, почти все источники предлагают делать это таким образом:

Но, проблема в нем следующая, если вы, уже где то в начале страницы отправили заголовки, то на вас будут ругаться, мол, «заголовки отправлены, зачем ты хочешь, чтобы я это сделал еще один раз, угомонись!»

Еще были варианты:

1. обнулить форму
2. засунуть все переменные формы в переменную $_SESSION(нам нужно больше переменных сессии!)

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

Меня же, все способы, встретившиеся на просторах интернета, не устроили. И я решила сделать то, что будет удобно мне и не будет занимать большое количество переменных/времени/ресурсов.
Приступим.

Для начала, создадим простенькую форму.

Затем добавим в форму метод отправки, действие и имя:
Действие будет происходить на другой странице, для удобства и дальнейшей функциональности.

Получается вот такой код:

Затем, мы создаем файлик redir.php и работаем над ним:

Все. Как видите это просто, быстро и удобно!

Надеюсь, вам пригодится данная статья.

Буду рада критике или вашим предложениям.

P.S. Да, можно сделать отправку заголовка на этой, дополнительной, странице, но, почему-то с использованием кода JS мне нравится больше.

P.P.S. Спасибо за ваше внимание.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Читайте также:  Драйвер пак не запускается на windows 7

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Как сделать черный фон в фотошопе cs6

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

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

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

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

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

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

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

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

ВАЖНО!

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

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

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

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

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

Читайте также:  Персонажи игры фар край 3

Я прочитал все ваши сообщения о вставке заголовков в файл формы php, чтобы перенаправить пользователя на другой URL ПОСЛЕ отправки формы, но я не могу понять, как это сделать. Ниже мой код. Можете ли вы показать мне, куда поместить заголовок / перенаправление, чтобы информация отправлялась по электронной почте, а затем пользователь перешел на другую страницу html?

Сразу после @mail($email_to, $email_subject, $email_message, $headers);

Обратите внимание, что вы никогда не увидите «Спасибо, что подписались на наш список рассылки»

Это должно быть на следующей странице, если вы повторите любой текст, вы получите сообщение об ошибке, потому что заголовки были бы уже созданы, если вы хотите перенаправить, никогда не возвращайте текст, даже пространство!

Если ваше перенаправление находится в PHP, перед командой перенаправления ничего не следует повторять.

См. Заголовок для получения дополнительной информации.

Помните, что header () должен быть вызван до отправки любого фактического вывода либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP

В противном случае вы можете использовать Javascript для перенаправления пользователя.

Сначала дайте вашему типу ввода отправить имя, например, это name=’submitform’ .

а затем поместите это в свой php-файл

Не забудьте изменить URL-адрес на свой.

Вы можете включать функцию заголовка везде, где захотите, до тех пор, пока NO html и / или текст не будут напечатаны до стандартного.

Для получения дополнительной информации и использования: http://php.net/manual/en/function.header.php

Я вижу в вашем коде, что вы echo() вычеркиваете какой-либо текст в случае ошибки или успеха. Не делайте этого: вы не можете. Вы можете перенаправлять или показывать текст. Если вы покажете текст, вы не сможете перенаправить его.

Всякий раз, когда вы хотите перенаправить, отправьте заголовки:

Помните, что вы не можете отправлять данные клиенту до этого.

Ссылка на основную публикацию
Ошибка при установке microsoft visual c 0x80240017
Ошибка 0x80240017 обычно возникает при проблемах с установкой библиотеки Visual C++. «Одна или несколько проблем вызывали сбой программы установки. Исправьте...
Основная таблица динамического списка задана неверно
Область применения: управляемое приложение, мобильное приложение. Методическая рекомендация (полезный совет) При проектировании динамических списков в формах следует учитывать, что динамические...
Основные задачи электронного документооборота
БАЗОВЫЕ ПОНЯТИЯ И ОСНОВНЫЕ ЗАДАЧИ, РЕШАЕМЫЕ СИСТЕМАМИ ДОКУМЕНТООБОРОТА Документы - это основные информационные ресурсы любой организации, работа с ними требует...
Ошибка принтера pcl xl error
Всем привет! Хочу поделиться маленькой заметкой о том, как решить проблему когда при печати pdf файлай на отпечатанном листке заместо...
Adblock detector