Diversia
@Diversia

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

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

<?
$filterTr = array(
    'video' => 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 "<pre>";
print_r($video);
print "</pre>";

?>
<form method="post">
<input name="video[url][]" type="text" value="test1">
<input name="video[translators][]" type="text" value="test1">
<input name="video[type][]" type="text" value="test1">
<br>
<input name="video[url][]" type="text" value="test2">
<input name="video[translators][]" type="text" value="test2">
<input name="video[type][]" type="text" value="test2">
<br>
<button type="submit">Сохранить</button>
</form>

Возвращает:
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" а не "пусто"? Что делаю не так?
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
Exploding
@Exploding
wtf?
Ничего не меняйте. Просто вот так напишите:
print "<pre>";
var_dump($filter);
print "</pre>";
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Screamie
@Screamie
Full-stack разработчик
Здравствуйте! Вы уверены, что нигде нет логической ошибки? Например, вы дампите переменную $video, которая в вашем приведенном коде не инициализируется. Может нужно дампить $filter['video']? Или это просто опечатка?

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

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

Похожие вопросы