Filter_input false, $ _POST содержит данные

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

Итак, моя проблема в том, что когда вы запускаете этот сценарий и выполняете дамп переменной на входе фильтра, он возвращает false (нет данных), но когда вы сбрасываете переменный глобальный $ _POST, он имеет данные, которые я ищу, любая идея, что я делаю неправильно.

вот код:

$submit = filter_input(INPUT_POST, 'submit', FILTER_SANITIZE_SPECIAL_CHARS);

if (!isset($submit)){
    ?>
<form action = "" method = "post">
    <select name = "partsused[]" id = "usedparts" multiple>
        <option value = "empty" selected>Empty</option>
        <option value = "full" selected>Full</option>
    </select>

    <br/>
    <button type = "submit" name = "submit" value = "submit">Apply</button>
</form>
  <?php  
} else {    
    $someArray = filter_input(INPUT_POST, 'partsused');

    var_dump($someArray);
    var_dump($_POST['partsused']);
    die;
}  

Результат, который я получаю от var_dump, выглядит следующим образом:

bool(false) 
array(2) { [0]=> string(5) "empty" [1]=> string(4) "full" }   

Итак, как вы можете видеть, filter_input вообще не считывает значение из $ _POST, как должно, я перепробовал все разные фильтры, даже не фильтруя их вообще.

так что просто чтобы прояснить это, да, присвоение S_POST ['partsused'] переменной $ someArray тогда работает, но мне не нравится это делать, я всегда использую filter_input, не знаю, почему это происходит, какие-либо идеи или решения.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
575
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Согласно комментарию это, если ввод является массивом и вы используете filter_input, вам необходимо использовать следующую настройку:

var_dump(filter_input(INPUT_POST, 'partsused', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY));

и согласно документации:

FILTER_REQUIRE_ARRAY - Requires the value to be an array.

Итак, спасибо, это работает, как я вижу сейчас, но мой вопрос в том, что я использовал его таким образом раньше для сгруппированных флажков, и я также использую filter_require_array, кстати, пробовал, но разница в том, что у вас также есть filter_default , почему это решает проблему, насколько я понимаю, filter_require_array - это все, что следовало использовать, но filter_default решает проблему, не могли бы вы объяснить, почему работает filter_default, насколько я понимаю, filter_default говорит, что не фильтруйте его.

Ronald 12.07.2018 11:35

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

Script47 12.07.2018 11:43

Вместо этого вы должны использовать filter_input_array

$someArray = filter_input_array(INPUT_POST, 'partsused');

Другие вопросы по теме