@Diversia

Как передать данные c формы PHP и обезопасить при помощи функции filter_input_array?

В форме есть поля:
<form method="post">
<input type="text" name="title">
...
<p>ссылка 1</p>
<input type="text" name="video[url][]" placeholder="Ссылка на видео">
<select name="video[translators][]">
<option value="1">Перевод 1</option>
<option value="2">Перевод 2</option>
<option value="3">Перевод 3</option
</select>
<select name="video[type][]">
<option value="1">Тип 1</option>
<option value="2">Тип 2</option>
<option value="3">Тип 3</option
</select>

<p>ссылка 2</p>
<input type="text" name="video[url][]" placeholder="Ссылка на видео">
<select name="video[translators][]">
<option value="1">Перевод 1</option>
<option value="2">Перевод 2</option>
<option value="3">Перевод 3</option
</select>
<select name="video[type][]">
<option value="1">Тип 1</option>
<option value="2">Тип 2</option>
<option value="3">Тип 3</option
</select>

<p>ссылка ...</p>
...
</form>


В обработчике:
$title = trim(filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING));
$filterTr = array(
	'video' => array(
		'url' => array(
			'filter' => FILTER_SANITIZE_URL,
			'flags'  => FILTER_REQUIRE_ARRAY,
		),
		'translators' => FILTER_SANITIZE_NUMBER_FLOAT,
		'type' => FILTER_SANITIZE_NUMBER_FLOAT,
	)
);
$trailers = filter_input_array(INPUT_POST, $filterTr); 

print "<pre>";
print $title; // выводит данные
print_r ($trailers); // НЕ выводит данные
print "</pre>";


Но вывод пустой:

Заголовок title
Array
(
[video] =>
)


Подскажите пожалуйста, в чем ошибка?
  • Вопрос задан
  • 535 просмотров
Решения вопроса 1
@eugen81
Программист PHP, JS
$filterTr должен иметь структуру, описанную здесь. В Вашем случае фильтрация работать не будет. Чтобы она работала - нужно комбинировать filter_input_array и filter_var, например:
$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_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы