Php как при перезагрузке post

Почему POST устанавливается при перезагрузке?

Мое приложение – простая страница входа. Когда он терпит неудачу, я печатаю сообщение об ошибке. Мой вопрос: почему, когда я перезагружаю страницу, сообщение снова печатается? Как я могу это исправить? Код работает нормально, я сделал еще один php-файл, выполняющий проверку и подключение базы данных.

Solutions Collecting From Web of «Почему POST устанавливается при перезагрузке?»

 else < $_SESSION['message'] = "Login failed!"; header('location: /yourfile.php'); exit; >> if(isset($_SESSION['message'])) < echo $_SESSION['message']; unset($_SESSION['message']); >?> в  else < $_SESSION['message'] = "Login failed!"; header('location: /yourfile.php'); exit; >> if(isset($_SESSION['message'])) < echo $_SESSION['message']; unset($_SESSION['message']); >?> с  else < $_SESSION['message'] = "Login failed!"; header('location: /yourfile.php'); exit; >> if(isset($_SESSION['message'])) < echo $_SESSION['message']; unset($_SESSION['message']); >?> 

По сути, да, пост / перенаправление / получить … но иногда простое объяснение лучше.

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

Это потому, что вы повторно отправляете одни и те же данные POST при обновлении, если вы выполняете запрос GET, который вы увидите в URL-адресе, ваши параметры, которые вы передаете, есть, поэтому, если вы обновите эти параметры, они снова будут отправлены. То же самое с POST.

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

Вы хотите POST-Redirect-GET .

  • Как эффективно находить ближайшие места поблизости от данного места
  • Передача нескольких значений для одной и той же переменной GET в URL-адресе
  • Справка PHP и SQL Хеширование: что я делаю неправильно?
  • Как получить дополнительный массив в PHP?
  • Как заменить \ r & \ n на
    ?
  • Сложный тип как индекс массива
  • Кэширование подготовленных отчетов PDO
  • PHP, переписывание URL-адресов с помощью htaccess и перезапись URL-адреса Microsoft IIS
  • Php force Загрузка – загрузка поврежденного файла
  • PHP неопределенные символы? в выводе
  • Почему односторонний доступ к функциям считается плохой привычкой?
  • Вызов метода Java из PHP5
  • Случайное плавание между 0 и 1 в PHP
  • Symfony2 передает значения в тип коллекции
  • Как проверить, что пользователь IF УЖЕ любил страницу на facebook?

Источник

Как удалить переменную $ _POST после нажатия кнопки «Обновить» в браузере с PHP?

Когда я нажимаю кнопку «Обновить» в моем браузере, кажется, что переменная $_POST сохраняется во время обновления. Если я хочу удалить содержимое $_POST , что мне делать? Использование unset для полей $_POST не помогло. Помощь? Спасибо!

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

После отправки формы и прочтения данных POST, перенаправьте на другую страницу. Затем, если пользователь обновит эту страницу, данные POST не будут повторно присоединены.

@blender Я бы не сказал, что это «проблема», поскольку это функциональность всех браузеров. Сказать это так же, как сказать, что кнопка возврата — это проблема.

Читайте также:  Красивое оформление tkinter python

16 ответов

Заголовок запроса содержит некоторые данные POST. Независимо от того, что вы делаете, когда вы перезагружаете страницу, rquest будет отправлен снова.

Простым решением является перенаправление на новую (если не та же) страницу. Этот шаблон очень распространен в веб-приложениях и называется Post/Redirect/Get. Типично для всех форм делать POST, а затем в случае успеха вы должны сделать перенаправление.

Попробуйте как можно больше разделить (в разных файлах) свой вид script (html в основном) с вашего контроллера script (бизнес-логика и прочее). Таким образом, вы всегда отправляете данные отдельному контроллеру script, а затем перенаправляете обратно в представление script, которое при визуализации не будет содержать данных POST в заголовке запроса.

Простое решение PHP для этого:

if (isset($_POST['aaa'])) < echo '  '; > 

Когда страница перезагружается, она обновит на экране новые данные и очистит $_POST 😉

У меня был php-файл, который POST помещал в себя данные FORM, и я избегал POST после обновления, добавляя заголовок (‘Location: file.php’); в конце сценария php. Вуаля, страница обновилась сразу после POST и нет данных для повторной отправки (:

@M МХ, верно, это не очистка переменных POST . но это перезагружает страницу до такой степени, что вы можете увидеть измененный результат, получив предупреждение JavaScript, говорящее о необходимости пересылать данные поста для отображения всей страницы .

Как насчет использования $_POST = array(), который сводит на нет данные. Браузер по-прежнему будет запрашивать перезагрузку, но в суперглобале $_POST данных не будет.

Вот ссылка на аналогичный вопрос. Вы можете увидеть мой ответ. Почему POST [‘submit’] установлен при перезагрузке?

Основной ответ — посмотреть в post/redirect/get, но так как это проще увидеть на примере, просто проверьте ссылку выше.

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

 if ($_SERVER['REQUEST_METHOD'] == 'POST') < $_SESSION['postdata'] = $_POST; unset($_POST); header("Location: ".$_SERVER['PHP_SELF']); exit; >?> 

Данные POST теперь находятся в сеансе, и пользователи могут обновлять, сколько они хотят. Это не повлияет на ваш код.

@MarcoZen К файлу, который обрабатывает вашу форму. Во многих случаях тот же файл, который содержит вашу форму.

Скажем, я начинаю с формы входа, с отправки — мы перенаправляем на страницу, которая обрабатывает данные POST (в этом случае мы записываем через SESSION [postdata], а затем перенаправляем их обратно в форму входа? Да? Если учетные данные входа правильно — не должны ли они быть направлены на утвержденную страницу / домашнюю страницу. php и т. д.? Пожалуйста, поправьте меня.

unset($_POST); unset($_REQUEST); header('Location: . '); 

$_ POST должен заполняться только по запросам POST. Браузер обычно отправляет запросы GET. Если вы достигли страницы через POST, она обычно спрашивает вас, следует ли ей повторно отправлять данные POST при нажатии обновления. То, что он делает, просто то, что снова отправляет данные POST. Для PHP, который выглядит как другой запрос, хотя он семантически содержит одни и те же данные.

Читайте также:  Iphone browser no javascript

Да. Я заметил, что. Есть ли способ переопределить / очистить POST-запрос, отправляемый при обновлении?

Я вижу, что это старый поток, просто подумал, что я дам свои 2центы. Не уверен, что это будет соответствовать каждому сценарию, но это метод, который я успешно использовал в течение нескольких лет:

session_start(); if($_POST == $_SESSION['oldPOST']) $_POST = array(); else $_SESSION['oldPOST'] = $_POST; 

Не удаляет POST-значения из браузера, но насколько ваш php script ниже этих строк, больше нет переменных POST.

«Лучший» способ сделать это — Post/Redirect/Get

После отправки сообщения заголовок 302, указывающий на страницу успеха

У меня есть одна форма и отображение, где я «добавляю/удаляю/редактирую/вставляю/перемещаю» записи данных с помощью одной формы и одной кнопки отправки. Первое, что я делаю, это проверить, установлен ли $_post, если нет, установить его в никуда. затем я пробегаю остальную часть кода,

то на фактическом $_post Я использую переключатели и if/else на основе введенных данных и с проверкой ошибок для каждой части данных, необходимой для использования какой-либо функции.

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

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

Задайте промежуточную страницу, на которой переменные $_POST изменяются в $_SESSION. На вашей фактической странице отключите их после использования.

Вы также можете передать URL-адрес начальной страницы, чтобы установить кнопку возврата назад.

Источник

Обновить страницу без потери значения Post

Это невозможно без отправки страницы в первую очередь! Если вы каким-либо образом не отправили поля формы на сервер, то есть без обновления страницы, используя jQuery и т. Д. Somesort из Auto Save Form.

Если это для проверок проверки, нет необходимости в сеансах, как было предложено.

Пользователь заполняет форму и отправляет обратно самостоятельно.

подтверждение сообщение, конец.

альтернативно, как предложено сохранить весь пост в сессии, что-то вроде этого, но опять же нужно сначала подать на работу ….

if(isset($_POST) & count($_POST)) < $_SESSION['post'] = $_POST; >if(isset($_SESSION['post']) && count($_SESSION['post']))

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

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

Если $post – нормальная переменная, она никогда не будет сохранена.

Если вам нужно что-то сэкономить, вам нужно использовать файлы cookie. $_SESSION – это реализация файлов cookie. Куки-файлы – это данные, которые хранятся в браузере пользователя и отправляются с каждым запросом.

Читайте также:  Php создать массив заданной длины

Переменная $ _SESSION является всего лишь ассоциативным массивом, поэтому для ее использования просто выполните следующее:

Вы можете сохранить свои значения $ _POST внутри $ _SESSION. Сохраните все ваши $ _POST следующим образом:

ставить значения для сеанса

session_start(); $_SESSION["POST_VARS"]=$_POST; 

и вы можете получить это значение на другой странице, например

session_start(); $_SESSION["POST_VARS"]["name"]; $_SESSION["POST_VARS"]["address"]; 

Вы можете использовать то же значение, которое вы получили в POST внутри формы, таким образом, когда вы его отправляете, он останется там.

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

if($_POST['name']) < $file = fopen('poststored.txt','wb'); fwrite($file,''.$_POST['value'].''); fclose($file); >if (file_exists('poststored.txt'))

поэтому ваше значение post хранится в $value .

Фактически в html-формах он хранит данные post. это важно, когда вам нужно сохранить вставленные данные в текстовые поля.

Источник

Обновить страницу без потери значения Post

Это невозможно без отправки страницы в первую очередь! Если вы каким-либо образом не отправили поля формы на сервер, то есть без обновления страницы, используя jQuery и т. Д. Somesort из Auto Save Form.

Если это для проверок проверки, нет необходимости в сеансах, как было предложено.

Пользователь заполняет форму и отправляет обратно самостоятельно.

подтверждение сообщение, конец.

альтернативно, как предложено сохранить весь пост в сессии, что-то вроде этого, но опять же нужно сначала подать на работу ….

if(isset($_POST) & count($_POST)) < $_SESSION['post'] = $_POST; >if(isset($_SESSION['post']) && count($_SESSION['post']))

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

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

Если $post – нормальная переменная, она никогда не будет сохранена.

Если вам нужно что-то сэкономить, вам нужно использовать файлы cookie. $_SESSION – это реализация файлов cookie. Куки-файлы – это данные, которые хранятся в браузере пользователя и отправляются с каждым запросом.

Переменная $ _SESSION является всего лишь ассоциативным массивом, поэтому для ее использования просто выполните следующее:

Вы можете сохранить свои значения $ _POST внутри $ _SESSION. Сохраните все ваши $ _POST следующим образом:

ставить значения для сеанса

session_start(); $_SESSION["POST_VARS"]=$_POST; 

и вы можете получить это значение на другой странице, например

session_start(); $_SESSION["POST_VARS"]["name"]; $_SESSION["POST_VARS"]["address"]; 

Вы можете использовать то же значение, которое вы получили в POST внутри формы, таким образом, когда вы его отправляете, он останется там.

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

if($_POST['name']) < $file = fopen('poststored.txt','wb'); fwrite($file,''.$_POST['value'].''); fclose($file); >if (file_exists('poststored.txt'))

поэтому ваше значение post хранится в $value .

Фактически в html-формах он хранит данные post. это важно, когда вам нужно сохранить вставленные данные в текстовые поля.

Источник

Оцените статью