Php очищаем массив post

Полная очистка массива _POST

Я хочу полностью очистить содержимое массива $ _POST, все примеры, которые я вижу в Интернете, выглядят так:

После первого использования данных POST мне нужно очистить их — person Oto Shavadze &nbsp schedule 18.10.2012

Если вам нужно изменить значения $_POST , вы делаете что-то не так. — person Jon &nbsp schedule 18.10.2012

вам даже не нужно писать условие. простой $ _POST = array (); заявление сделаю. — person Rukmi Patel &nbsp schedule 18.10.2012

@Jon, @Lex: $_POST доступен для записи, что отчасти глупо, имеет смысл очистить его, если вы используете интерфейс, такой как класс, для чтения пользовательского ввода. — person Wesley Murch &nbsp schedule 18.10.2012

Зачем вам вообще нужно очищать $_POST ? В этом нет никакого смысла. Не размещайте ничего на следующей странице. — person Dorvalla &nbsp schedule 18.10.2012

@Jon: Чтобы убедиться, что ваш интерфейс используется исключительно. — person Wesley Murch &nbsp schedule 18.10.2012

@Wesley: Я думаю, вам все равно не стоит создавать класс, который напрямую использует $ _POST, так что . — person rael_kid &nbsp schedule 18.10.2012

@WesleyMurch: Для меня это звучит не очень убедительно. Если вы не хотите трогать $_POST , просто не делайте этого. — person Jon &nbsp schedule 18.10.2012

У ОП могут быть и другие мотивы, но это реалистичный мотив, который я действительно использовал и, честно говоря, очень любил. Приятно быть уверенным в вещах, например, что данные POST не содержат XSS или ключи безопасны (класс может очистить его, а затем очистить данные сообщения, просто пример). — person Wesley Murch &nbsp schedule 18.10.2012

Я также очищаю $_POST . Это вопрос инкапсуляции; очистка $_POST после его использования гарантирует, что никакая другая часть приложения не получит к нему доступ; в противном случае случайная ошибка в любом месте может раскрыть потенциально важные данные в $_POST . — person Mahn &nbsp schedule 18.10.2012

Еще один интересный трюк — установить $ _POST вручную путем синтаксического анализа php://input , на случай, если, например, вы не хотите иметь дело с глупыми bracket[] именами полей, которые представляют собой массивы, и использовать повторяющиеся ключи ввода, как это может сделать остальная часть мира программирования, отличного от PHP. . В этом случае я бы просто очистил POST в качестве первого шага перед его повторным заполнением. — person Wesley Murch &nbsp schedule 18.10.2012

Не забывайте, что POST данные также можно найти в $_REQUEST — person Josh J &nbsp schedule 10.09.2015

Данные $ _POST также доступны через встроенные функции фильтрации, например: filter_input (INPUT_POST, ‘var_int’, FILTER_VALIDATE_INT) Даже после очистки массива $ _POST кодировщики могут получить доступ к вводу таким образом! — person Matthew Slyman &nbsp schedule 16.06.2017

Читайте также:  JournalDev HTMLParser

Я столкнулся с ситуацией, когда $ _POST должен быть пустым, но это не так. В DEV $ _POST, как и ожидалось, пуст. Но в PROD это не так. Понятия не имею, и выяснение того, как был поврежден $ _POST, займет слишком много времени. В этом случае я убеждаюсь, что $ _POST пуст. — person Nguai al &nbsp schedule 31.03.2020

Ответы (6)

Да это нормально. $_POST — это просто еще одна переменная, за исключением того, что она имеет (super) глобальную область действия.

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

Технически он имеет суперглобальную область видимости, поскольку глобальная область видимости в PHP не является т. — person lonesomeday; 18.10.2012

Похоже, у вас не связанная с этим проблема. Если вы прочитаете данные поста до того, как очистить его, будет уже слишком поздно. — person Wesley Murch; 30.01.2017

Ах, я этого не знал и был удивлен, почему все проголосовали за, спасибо! — person NaturalBornCamper; 30.01.2017

Это сбрасывает $ _POST, но вы все равно можете сделать это: filter_input (INPUT_POST, ‘password’, FILTER_UNSAFE_RAW) — и тому подобное. (В моей установке PHP на основе FastCGI этот метод возвращает фактические результаты, несмотря на то, что сначала была снята установка $ _POST!) Если это не делается по соображениям безопасности, я не могу понять законное приложение. — person Matthew Slyman; 16.06.2017

Это сбрасывает $ _POST, но вы все равно можете сделать это: filter_input (INPUT_POST, ‘password’, FILTER_UNSAFE_RAW) — и тому подобное. (В моей установке PHP на основе FastCGI этот метод возвращает фактические результаты, несмотря на то, что сначала была снята установка $ _POST!) Если это не делается по соображениям безопасности, я не могу понять законное приложение. — person Matthew Slyman; 16.06.2017

если вы хотите избежать повторной вставки, используйте атрибут действия, чтобы направить отправку формы на другую страницу и перенаправление заголовка using на эту конкретную страницу, тогда ваша повторная отправка в базу данных будет исправлена. @NaturalBornCamper — person Mr. Laeeq Khan; 21.02.2019

@MatthewSlyman Теперь я беру свой первоначальный комментарий, когда понимаю, что вы имеете в виду. Да, вы можете фильтровать ввод и прочее, но OP не спрашивал, как игнорировать данные публикации. не могли бы вы показать нам ответ, чтобы предотвратить опасный filter_input? — person clockw0rk; 21.07.2020

Решения пока не работают, потому что данные POST хранятся в заголовках. Согласно этому сообщению, перенаправление решает эту проблему. Как удалить $ Переменная _POST при нажатии кнопки «Обновить» в браузере с PHP?

Это может показаться слишком неудобным, но вам, вероятно, лучше отключать один элемент за раз, а не весь массив $ _POST. Вот почему: если вы используете объектно-ориентированное программирование, у вас может быть один класс, использующий $ _POST [‘alpha’], а другой класс, использующий $ _POST [‘beta’], и если вы отключите array после первого использования, он аннулирует его использование в других классах. Чтобы быть в безопасности и не выстрелить себе в ногу, просто примените небольшой метод, который отключит элементы, которые вы только что использовали: Например:

Читайте также:  Wp admin redirect to wp login php

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

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

Вы можете использовать сочетание unset() и инициализации:

unset($_POST) ? $_POST = array() : $_POST = array(); 

@Mahn Те, кто использует функции фильтра PHP, не используют $ _POST для доступа к значениям формы. Таким образом, очистка $ _POST — это просто способ очистки ресурсов. Например, если кто-то сбрасывает в поле формы больше символов, чем разрешено (минуя все проверки на стороне клиента), и этот человек использует функции фильтра PHP, $ _POST — это то, что разработчик может захотеть очистить. У меня мой дезинфицирующий агент предварительно проверяет длину строки управления, а затем бросает и ловит RangeException , если в элементе управления больше символов, чем разрешено. Можно по-прежнему использовать $ _POST для подсчета отправленных элементов управления. — person Anthony Rutledge; 19.07.2015

@AnthonyRutledge конечно, дело в том, что в этом сценарии вам не нужно оба unset и установить его в пустой массив. Достаточно просто выполнить последнее, чтобы его очистить. — person Mahn; 19.07.2015

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

Источник

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

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

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

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

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

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

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

Читайте также:  Text color coding in html css

Лучший ответ

Сообщение было отмечено 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: /");} ?>

Источник

Как в PHP выполнить очистку POST для массива?

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

 array( 'filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_REQUIRE_ARRAY ) ); $filter = filter_input_array(INPUT_POST, $filterTr); $filter['video']['url'] = filter_var($filter['video']['url'], FILTER_VALIDATE_URL, FILTER_REQUIRE_ARRAY); $filter['video']['translators'] = filter_var($filter['video']['translators'], FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY); $filter['video']['type'] = filter_var($filter['video']['type'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_REQUIRE_ARRAY); print "
"; print_r($video); print "

"; ?>

Array ( [url] => Array ( [0] => test1 [1] => test2 ) [translators] => Array ( [0] => test1 [1] => test2 ) [type] => Array ( [0] => test1 [1] => test2 ) )

Для $filter[‘video’][‘type’] используется FILTER_SANITIZE_NUMBER_FLOAT. Почему на выводе «test» а не «пусто»? Что делаю не так?

Exploding

print "
"; var_dump($filter); print "

";

Screamie

Здравствуйте! Вы уверены, что нигде нет логической ошибки? Например, вы дампите переменную $video, которая в вашем приведенном коде не инициализируется. Может нужно дампить $filter[‘video’]? Или это просто опечатка?

К тому же, судя по фильтрам, вы должны получать false для [‘url’] и [‘translators’] а в дампе тот же ‘test’, такое ощущение, что ваш $_POST вообще не фильтруется.

Screamie

Diversia, посмотрите выше по коду, не присваивается ли переменной $video значение входящего массива $_POST, если да, то вы просто ошиблись переменной. Если она нигде больше не используется, то удалите ее, что бы не плодить переменные.

И исправьте ваш код таким образом:

 array( 'filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_REQUIRE_ARRAY ) ); // Изменим название переменной с $filter на $res (от слова result) для удобочитаемости в дальнейшем $res = filter_input_array(INPUT_POST, $filterTr); $res['video']['url'] = filter_var($res['video']['url'], FILTER_VALIDATE_URL, FILTER_REQUIRE_ARRAY); $res['video']['translators'] = filter_var($res['video']['translators'], FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY); $res['video']['type'] = filter_var($res['video']['type'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_REQUIRE_ARRAY); print "
"; var_dump($res['video']); print "

"; ?>

Exploding

Screamie Di, Тут дело в автоматической инициализации переменных с названиями элементов массива $_POST.
Был такой параметр register_globals, при котором переменные для удобства наверно, хз,
инициировались для суперглобальных массивов.
Т.е. как вот у автора в $_POST есть элемент «video» которому также можно получить доступ как и к $_POST[«video»] через переменную $video.
Но его в версии 5.4 убрали, а взамен я не знаю, сделали что-то или нет. Хотя сам, как и вы — никогда этим не пользовался, поэтому даже и всех нюансов работы не знаю:)

Screamie

Exploding, у меня в окружении строгие правила, поэтому получаю NOTICE, что есть гуд. Ибо автоматическая инициализация — прямой способ выстрелить себе в ногу (как и short_open_tag = on) ) Но спасибо за информацию. Не знал об этом забавном (нет) факте)))

Источник

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