Очистить данные post php

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

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

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

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

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

16 ответов

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

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

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

Читайте также:  Php передать переменную curl

Простое решение 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, который выглядит как другой запрос, хотя он семантически содержит одни и те же данные.

Да. Я заметил, что. Есть ли способ переопределить / очистить 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 после загрузки страницы?

Всем привет, не могу очистить $_POST после загрузки страницы.

Форма — Передача $_POST на саму себя — После чего работает скрипт, и нужно чтобы при обновлении страницы $_POST очистился, пробовал unset не помогает. Как сделать чтобы $_POST работал только на 1 загрузку страницы?

Вообще, попробовать сделать редирект на тот же урл, если я правильно понял вашу проблему.
Например:
header(‘Location: /test.php’);

Заработало, сейчас проблема другая. После обработки скрипта, он выводил «запись добавлена» если скрипт вернут айди записи. Но сейчас из за редиректа, он не работает. Подайте пожалуйста идею

@nezzard вообще, лучше всего сделать всё на ajax, но если вариантов нет, то можно добавить get параметр, который будет нести в себе результат, после чего вы уже можете добавить его при редиректе. То-есть: header(‘Location: /test.php?result=ok’); А потом просто смотрите get параметр result и если он равен «ok» — выводите своё «запись добавлена».

FanatPHP

@nezzard обычно такая надпись просто избыточна. Достаточно направить человека на список сообщений и он увидит свое в списке.

Я так и хотел изначально, но проблема в том что когда скрипт отдал пост данные перезагрузил страницу то wp_insert_post( $my_post) уже не отдает айди записи, если делать редирект, т.е. отдает только когда нету редиректа, соответственно и не могу подставить айди. Видимо в отдельных файлах придется делать

FanatPHP

@nezzard в таком случае надо было указать в вопросе, что в php вообще не понимаете. Кнопке submit укажите имя «send» (если его там нет) и вторую строку замените на «if(isset($_POST[‘send’]))».

@mayken Я совсем новенький в пхп. Спасибо, сейчас заработало но не могу вывести сообщение Запись добавлена

@mayken Благодарю, я уже у себя поправил до этого поста, сейчас не могу понять как работают сессии, не могу вывести надпись на экран

Стартанул, видимо я ничего в этом не понимаю ( Прописал вверху документа пробовал в отдельном пробовал в том же. Выводить пробовал echo и print, все равно не выводит

Буду еще очень признателен если подскажешь как вывести $_SESSION в нужном месте? Оно все в начале кода выводится

hell0w0rd

Почитайте http спецификацию. $_POST — всего лишь переменная наполняемая php при очередном запросе. Если на POST запрос приходит 200 ответ — браузер сохраняет ранее отправленные данные, чтобы отправить их еще раз до GET запроса.
А то что у вас ошибка вываливается — ищите, где вы вызываете echo, или любую другую функцию, отправляющую информацию в php://stdout

Источник

Очистка данных из форм в PHP

Для предотвращения XSS, SQL-инъекций и других атак, данные полученные из форм нужно чистить. Простое экранирования кавычек не достаточно, нужен комплексный подход по типу данных.

Для таких целей был написан статический класс clean.php

Использование класса

     1 2 3 4 5  
require_once '/classes/clean.php'; if (isset($_POST['submit']))

Далее описание функций с примерами:

Логический тип (0 или 1)

Подходит для сhekbox, возвращает 1 или 0. Если значение пусто, то возвращается значение $default .

echo Clean::bool('on'); // 1 echo Clean::bool('off'); // 0 echo Clean::bool('true'); // 1 echo Clean::bool('false'); // 0

Для очистки одномерных массивов есть функции:

Clean::boolArray($value, $default); – вернет очищенный массив.
Clean::boolList($value, $default, $separator); – вернет строку значений через разделитель (по умолчанию , ).

Целое положительное число

Для очистки численных значений.

echo Clean::int(' 123 '); // 123 echo Clean::int('123.5'); // 123

Clean::intArray($value, $default);
Clean::intList($value, $default, $separator);

Десятичные дроби

Может быть отрицательным, заменяет , на . .

echo Clean::float(' 123 '); // 123 echo Clean::float('123.5'); // 123.5 echo Clean::float('-18.05'); // -18.05

Clean::floatArray($value, $default);
Clean::floatList($value, $default, $separator);

Цена

echo Clean::price('10 000 рублей'); // 10000.00 echo Clean::price('928,50 ₽'); // 928.50 echo Clean::price('165.36'); // 165.36 echo Clean::price('$115.99'); // 115.99 echo Clean::price('100,000.00'); // 100000.00

Clean::priceArray($value, $default);
Clean::priceList($value, $default, $separator);

Строка

Строка текста без переносов строк, подходит для и др.

  • Удаляются теги и комментарии;
  • Двойные пробелы заменяются на один;
  • Спецсимволы заменяются на мнемоники;
echo Clean::str('

Заголовок

'); // Заголовок echo Clean::str('">alert 1'); // ">alert 1 echo Clean::str("Строка 1\r\nСтрока 2"); // Строка 1 Строка 2

Clean::strArray($value, $default);
Clean::strList($value, $default, $separator);

Текст

Работает также как Clean::str() , но с сохранением переносов строк. Используется для .

echo Clean::text("Строка 1\r\nСтрока 2");

Clean::textArray($value, $default);
Clean::textList($value, $default, $separator);

HTML

Не рекомендуется использовать на фронте сайта т.к. только экранируются кавычки.

ЧПУ

echo Clean::sef('Опознание поломки'); // opoznanie-polomkiremont-hp echo Clean::sef('Ремонт HP'); // remont-hp

Clean::sefArray($value, $default);
Clean::sefList($value, $default, $separator);

Имя файла

Очищает название файла от запрещенных символов.

echo Clean::filename('файл.jpg'); // файл .jpg

Clean::filenameArray($value, $default);
Clean::filenameList($value, $default, $separator);

Unix Timestamp

Преобразует дату в Unix Timestamp.

echo Clean::time('14.08.2019'); // 1565730000

Clean::timeArray($value, $default);
Clean::timeList($value, $default, $separator);

Источник

Очистить массив $_POST

Доброго времени суток. Подскажите способы полного очищения массива $_POST, unset($_POST) — не помогает.

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

Как перезаписать массив из $_POST?
Люди добрые подскажите пожалуйста в $_POST лежит многомерный массив, как вывести его в переменную.

Запись значений в массив через $_POST
Пожалуйста помогите не могу сделать: С клавиатуры вводятся n чисел. Составьте программу.

Форма не отсылает данные в массив $_POST
столкнулся с проблемой, что мне нужно определять какая нажата кнопка, для этого решил предпринять.

Данные не помещаются в глобальный массив $_POST
Я сижу весь день над этой проблемой. Задача очень простая и раньше не составляла для меня труда.

Лучший ответ

Сообщение было отмечено pav1uxa как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 
Ваше имя:
if(isset($_POST['submit'])){ var_dump ($_POST['name']); echo ''; } ?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 
Ваше имя:
if(isset($_POST['submit'])){ var_dump ($_POST['name']); header("Location: /");} ?>

Источник

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