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






Согласно комментарию это, если ввод является массивом и вы используете filter_input, вам необходимо использовать следующую настройку:
var_dump(filter_input(INPUT_POST, 'partsused', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY));
и согласно документации:
FILTER_REQUIRE_ARRAY- Requires the value to be an array.
@Ronald, не цитируйте меня по этому поводу, но из того, что я вижу на основе документации, это то, что FILTER_DEFAULT - это флаг дезинфекции, тогда как FILTER_REQUIRE_ARRAY - стандартный флаг опций. Во-вторых, и третий, и четвертый параметры в функции являются необязательными, поэтому для установки четвертого параметра нам нужно предоставить FILTER_DEFAULT, который также является необязательным значением, если третий параметр опущен. Опять же, отнеситесь к этому с долей скепсиса, поскольку я не эксперт во внутреннем устройстве filter_input.
Вместо этого вы должны использовать filter_input_array
$someArray = filter_input_array(INPUT_POST, 'partsused');
Итак, спасибо, это работает, как я вижу сейчас, но мой вопрос в том, что я использовал его таким образом раньше для сгруппированных флажков, и я также использую filter_require_array, кстати, пробовал, но разница в том, что у вас также есть filter_default , почему это решает проблему, насколько я понимаю, filter_require_array - это все, что следовало использовать, но filter_default решает проблему, не могли бы вы объяснить, почему работает filter_default, насколько я понимаю, filter_default говорит, что не фильтруйте его.