- Как в PHP выполнить очистку POST для массива?
- Как очистить $_POST после загрузки страницы?
- Очистка данных из форм в PHP
- Использование класса
- Логический тип (0 или 1)
- Целое положительное число
- Десятичные дроби
- Цена
- Строка
- Текст
- HTML
- ЧПУ
- Имя файла
- Unix Timestamp
- Как и чем очистить массив $_POST?
- Войдите, чтобы написать ответ
- Можно ли получить список пользователей группы/чата с использование telegram API или telegram Bot API на php?
Как в 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» а не «пусто»? Что делаю не так?
print "
"; var_dump($filter); print "";
Здравствуйте! Вы уверены, что нигде нет логической ошибки? Например, вы дампите переменную $video, которая в вашем приведенном коде не инициализируется. Может нужно дампить $filter[‘video’]? Или это просто опечатка?
К тому же, судя по фильтрам, вы должны получать false для [‘url’] и [‘translators’] а в дампе тот же ‘test’, такое ощущение, что ваш $_POST вообще не фильтруется.
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 ""; ?>
Screamie Di, Тут дело в автоматической инициализации переменных с названиями элементов массива $_POST.
Был такой параметр register_globals, при котором переменные для удобства наверно, хз,
инициировались для суперглобальных массивов.
Т.е. как вот у автора в $_POST есть элемент «video» которому также можно получить доступ как и к $_POST[«video»] через переменную $video.
Но его в версии 5.4 убрали, а взамен я не знаю, сделали что-то или нет. Хотя сам, как и вы — никогда этим не пользовался, поэтому даже и всех нюансов работы не знаю:)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» — выводите своё «запись добавлена».
@nezzard обычно такая надпись просто избыточна. Достаточно направить человека на список сообщений и он увидит свое в списке.
Я так и хотел изначально, но проблема в том что когда скрипт отдал пост данные перезагрузил страницу то wp_insert_post( $my_post) уже не отдает айди записи, если делать редирект, т.е. отдает только когда нету редиректа, соответственно и не могу подставить айди. Видимо в отдельных файлах придется делать
@nezzard в таком случае надо было указать в вопросе, что в php вообще не понимаете. Кнопке submit укажите имя «send» (если его там нет) и вторую строку замените на «if(isset($_POST[‘send’]))».
@mayken Я совсем новенький в пхп. Спасибо, сейчас заработало но не могу вывести сообщение Запись добавлена
@mayken Благодарю, я уже у себя поправил до этого поста, сейчас не могу понять как работают сессии, не могу вывести надпись на экран
Стартанул, видимо я ничего в этом не понимаю ( Прописал вверху документа пробовал в отдельном
пробовал в том же. Выводить пробовал echo и print, все равно не выводит Буду еще очень признателен если подскажешь как вывести $_SESSION в нужном месте? Оно все в начале кода выводится
Почитайте 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 комментарий
Вы вообще читали описание функций этих?
Что-то мне подсказивает что вы понятия не имеете что делаю данные функции и даже не прочитали документацию по ним, и теперь задаете глупые вопросы.
Зачем? Калькулятор принимает что-то кроме int?
Если только int, то просто intval(), или каст (int), больше ничего не нужно.
Очистить от чего? От инъекций? С переменными PHP всё просто — не заворачивайте в коде строки в двойные кавычки попусту, только в одинарные (не будут конструкции $переменная заменяться, это и на производительность влияет положительно). По поводу SQL, если калькулятор зачем-то лезет в БД: для MySQL, например, есть функция mysql[i]_real_escape_string, экранирующая строку от инъекций, для остальных тоже должно подобное быть, а лучше возьмите готовый ORM (можно и изкоробочный PDO, но у него заморочки есть) и не изобретайте велосипед.