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

Когда я нажимаю кнопку «Обновить» в моем браузере, кажется, что переменная $_POST сохраняется во время обновления.

Если я хочу удалить содержимое $_POST что мне делать? Использование unset для полей $_POST не помогло.

Помогите? Благодаря!

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

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

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

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

 if (isset($_POST['aaa'])){ echo ' <script type="text/javascript"> location.reload(); </script>'; } 

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

это общий вопрос здесь.

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

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

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

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

 <?php if (!isset($_SESSION)) { session_start(); } if ($_SERVER['REQUEST_METHOD'] == 'POST') { $_SESSION['postdata'] = $_POST; unset($_POST); header("Location: ".$_SERVER['PHP_SELF']); exit; } ?> с <?php if (!isset($_SESSION)) { session_start(); } if ($_SERVER['REQUEST_METHOD'] == 'POST') { $_SESSION['postdata'] = $_POST; unset($_POST); header("Location: ".$_SERVER['PHP_SELF']); exit; } ?> 

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

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

пытаться

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

это сработало для меня

Вы не можете, это обрабатывается браузером, а не каким-либо языком программирования. Вы можете использовать AJAX для запроса или перенаправления пользователя на ту же (или другую) страницу.

Вы должны добавить директиву no cache в свой заголовок:

 <?php header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); ?> 

Моя обычная техника для этого:

 <?php if ($_POST) { $errors = validate_post($_POST); if ($!errors) { take_action($_POST); // This is it (you may want to pass some additional parameters to generate visual feedback later): header('Location: ?'); exit; } } ?> 

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

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

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

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

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

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

«Лучший» способ сделать это – отправить / перенаправить / получить

http://en.wikipedia.org/wiki/Post/Redirect/Get

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

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

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

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

Это работает для меня:

 <?if(isset($_POST['oldPost'])):?> <form method="post" id="resetPost"></form> <script>$("#resetPost").submit()</script> <?endif?> 

Вы можете сделать это следующим образом:

 echo('<script type="text/javascript">location.reload(true);</script>'); 

Это перезагружает страницу с сервера. Очень важно логическое «истинное». Это сработало для меня!