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

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

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

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

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

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

Источник

Как получить результат обработки формы на той же странице, что и форма?

Когда нажимаю submit на index.php, исполняется select_res.php скрипт, но результат запроса вижу на новой, пустой странице.

Как можно ответ select запроса получать не на новой странице, а на главной, где кликнул на submit?

а в select_res.php пишу:

как после отправки формы остаться на той же странице. Смотреть фото как после отправки формы остаться на той же странице. Смотреть картинку как после отправки формы остаться на той же странице. Картинка про как после отправки формы остаться на той же странице. Фото как после отправки формы остаться на той же странице

3 ответа 3

На главную страницу вниз перенесите код из страницы select_res.php и оберните его в if():

и на самой форме атрибут «action» оставьте пустым:

как после отправки формы остаться на той же странице. Смотреть фото как после отправки формы остаться на той же странице. Смотреть картинку как после отправки формы остаться на той же странице. Картинка про как после отправки формы остаться на той же странице. Фото как после отправки формы остаться на той же странице

Три базовых правила при работе с протоколом НТТР

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

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

Вариант 1. Лотерея.

и дальше уже пусть отдельный скрипт делает то что ему надо.

Вариант 2. Авторизация.

Но с другой стороны, этот код не запрашивает из БД результат лотереи, а запрашивает айди пользователя. Такое обычно требуется при авторизации. Сверившись с Правилами мы видим, что это запрос, меняющий состояние сервера (на нем заводится сессия). То есть, в этом случае мы можем посылать запрос куда угодно, но только методом POST, и после его обработки необходимо сделать редирект.

В этом случае мы можем оставить исходный код автора как есть, но должны добавить к нему недостающий код:

Источник

как после отправки формы остаться на той же странице. Смотреть фото как после отправки формы остаться на той же странице. Смотреть картинку как после отправки формы остаться на той же странице. Картинка про как после отправки формы остаться на той же странице. Фото как после отправки формы остаться на той же странице

Как хакеры взламывают учетные записи facebook с помощью Android [Фишинг, NO ROOT, объяснение]

Я мало что знаю о PHP, но знаю, что для этого требуется следующее действие:

Как я могу сохранить сообщение внутри формы div без перенаправления на processForm.php страница?

Я могу опубликовать весь processForm.php если нужно, но это долго.

Чтобы оставаться на той же странице при отправке, вы можете оставить действие пустым ( action=» ) в тег формы или вообще не использовать.

Друг. Используйте этот способ, не будет «сообщения о неопределенной переменной», и все будет работать нормально.

Вы должны использовать код, подобный этому:

Код с if это типично для многих страниц, но очень упрощено.

Обычно вы должны сначала проверить некоторые данные в «если» (проверить, не были ли поля формы пустыми и т. Д.).

Посетите www.thenewboston.org или phpacademy.org. Есть очень хорошие видеоуроки по PHP, включая формы.

Вы можете увидеть следующий пример для Действие формы на той же странице

Пока я включаю сценарий из отдельного файла, например

Я также где-то читал, что

Это старый модный способ публикации формы для начинающих, и

Следует использовать (не мои слова, прочтите где-нибудь)

Источник

php возврат на страницу после отправки формы

который сохраняет в моей базе данных с помощью этого php:

форма сохраняется в БД, но страница просто переходит в http://localhost/php/insert.php при нажатии кнопки Отправить, которая является пустой страницей. как я могу заставить его остаться на той же странице и просто показать сообщение или что?

4 ответов

обратите внимание, что перенаправление с HTTP_REFERER является ненадежным и ненадежным в целом, поэтому лучший способ-отправить URL-адрес с запросом или, если он поступает с другого сервера, вы можете создать определенный проход для использования для определенных сайтов/URL-адресов. Лучше всего знать URL-адрес, отправив его с запросом; два других, вероятно, менее оптимальны.

после завершения обработки формы сделайте это, прежде чем выводить что-либо (что бросит ошибка):

В зависимости от того, какие результаты обработки могут быть, вы можете добавить ошибку к URL:

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

можно использовать функция заголовка PHP () вот так:

вам нужно будет убедиться, что нет вывода (т. е. Эхо ничего, или любой HTML и т. д.) перед вызовом заголовка, или он не будет работать.

вероятно, небезопасно, но если вы находитесь в частной локальной сети, все должно быть в порядке.
— Ура!—5—>

Источник

Как предотвратить повторную отправку формы при обновлении страницы (F5 / CTRL+R)

У меня есть простая форма, которая отправляет текст в моей таблице SQL. Проблема в том, что после того, как пользователь отправляет текст, они могут обновить страницу, и данные будут отправлены снова без повторного заполнения формы. Я мог бы перенаправить пользователя на другую страницу после отправки текста, но я хочу, чтобы пользователи оставались на той же странице.

Я помню, что читал что-то о предоставлении каждому пользователю уникального идентификатора сеанса и сравнении его с другим значением, которое решило проблему, которую я имею, но я забыл, где он находится.

18 ответов:

с помощью моего веб-сайта я сохраню сообщение в файле cookie или сеансе, перенаправлю после публикации, прочитаю файл cookie/сеанс, а затем очистите значение этой переменной сеанса или файла cookie.

Я также хотел бы отметить, что вы можете использовать подход javascript, window.history.replaceState чтобы предотвратить повторную отправку на кнопку Обновить и назад.

Я бы все равно рекомендовал подход Post/Redirect/Get, но это новое решение JS.

вы действительно должны использовать шаблон Post Redirect Get для обработки этого, но если вы каким-то образом оказались в положении, когда PRG нежизнеспособен (например, сама форма находится в include, предотвращая перенаправления), вы можете хэшировать некоторые параметры запроса, чтобы сделать строку на основе содержимого, а затем проверить, что вы ее еще не отправили.

вы можете повторно отправить форму через переменную сеанса, например

использовать заголовок и перенаправить страницу.

header(«Location:your_page.php»); вы можете перенаправить на ту же страницу или другую страницу.

когда форма обработана, вы перенаправляете на другую страницу:

вы также можете перенаправить на ту же страницу.

Если вы делаете что-то вроде комментариев и вы хотите, чтобы пользователь оставался на той же странице, вы можете использовать AJAX для обработки формы представления

довольно верный способ реализовать уникальный идентификатор в пост и кэшировать его в

тогда в вашем коде сделайте следующее:

Итак, у вас есть HTML-форма:

как после отправки формы остаться на той же странице. Смотреть фото как после отправки формы остаться на той же странице. Смотреть картинку как после отправки формы остаться на той же странице. Картинка про как после отправки формы остаться на той же странице. Фото как после отправки формы остаться на той же странице

после обработки POST данные ЭД вы делаете небольшой

как после отправки формы остаться на той же странице. Смотреть фото как после отправки формы остаться на той же странице. Смотреть картинку как после отправки формы остаться на той же странице. Картинка про как после отправки формы остаться на той же странице. Фото как после отправки формы остаться на той же странице

как вы можете видеть данные формы POST Эд process.php сценарий.
Этот скрипт процесс POST Эд данные и рендеринг /the/result/page сразу с:

в качестве другого решения я прошу запрос the Mozilla FireFox команда, чтобы позволить пользователям устанавливать NextPage заголовок, который будет работать как и сделать post/redirect/get шаблон устарел.

короче. Когда серверная форма процесса POST данные успешно это:

браузер, в свою очередь, когда вижу NextPage заголовок:

я думаю, что это было бы превосходно, если реализовали бы, не так ли? =)

просто перенаправьте его на ту же страницу после использования данных формы, и он работает. Я уже пробовал.

уточненная версия сообщения Moob. Создайте хэш сообщения, сохраните его как файл cookie сеанса и сравните хэши каждого сеанса.

после вставки его в базу данных, вызовите метод unset () для очистки данных.

unset ($_POST);

чтобы предотвратить вставку данных обновления, выполните перенаправление страницы на ту же страницу или другую страницу после вставки записи.

заголовок (‘Location:’.$_SERVER [‘PHP_SELF’]);

в принципе, вам нужно перенаправить с этой страницы, но это все еще может создать проблему, пока ваш интернет медленный (заголовок перенаправления с сервера)

пример базового сценария :

нажмите на кнопку Отправить дважды

на стороне клиента

в вашей html форме поставьте это:

Ps: Если вы используете форму Get, вы можете легко изменить все сообщения с GET, и это тоже работает.

Я использую эту строку javascript, чтобы заблокировать всплывающее окно с запросом на повторную отправку формы при обновлении после отправки формы.

просто поместите эту строку в нижний колонтитул вашего файла и увидеть магию

Использование шаблона Post / Redirect / Get из ответа Keverw-хорошая идея. Однако вы не можете оставаться на своей странице (и я думаю, что это было то, что вы просили?) Кроме того, это может иногда fail:

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

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

Как говорили другие, невозможно выйти из использования post/redirect/get. Но в то же время это достаточно легко сделать, что вы хотите сделать на стороне сервера.

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

таким образом, вы только делаете всю свою основную работу один раз, добиваясь того, что вы хотите сделать.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *