Php очистить массив post

Как в 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) ) Но спасибо за информацию. Не знал об этом забавном (нет) факте)))

Источник

Как очистить $_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. Данные нужны чтобы выполнить некоторые вычисления (простой калькулятор), в БД ничего не записывается. Сейчас у нас строка проходит через trim(), stripslashes() и htmlspecialchars(). Достаточно ли этого? Или нужны дополнительные проверки?

Оценить 1 комментарий

evgeniy2194

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

Denormalization

Зачем? Калькулятор принимает что-то кроме int?

Если только int, то просто intval(), или каст (int), больше ничего не нужно.

Denormalization

CodeInMyHeart

bodqhrohro

Очистить от чего? От инъекций? С переменными PHP всё просто — не заворачивайте в коде строки в двойные кавычки попусту, только в одинарные (не будут конструкции $переменная заменяться, это и на производительность влияет положительно). По поводу SQL, если калькулятор зачем-то лезет в БД: для MySQL, например, есть функция mysql[i]_real_escape_string, экранирующая строку от инъекций, для остальных тоже должно подобное быть, а лучше возьмите готовый ORM (можно и изкоробочный PDO, но у него заморочки есть) и не изобретайте велосипед.

Войдите, чтобы написать ответ

Можно ли получить список пользователей группы/чата с использование telegram API или telegram Bot API на php?

Источник

Читайте также:  Java lang string github
Оцените статью