@iam4webwork
This is not specific to filter_input. If you have an element in HTML called names[], it can be accessed by calling $_POST['names'].
filter_input_array
(PHP 5 >= 5.2.0, PECL filter:0.11.0)
filter_input_array — Obtem variáveis externas e opcionalmente as filtra
Descrição
Esta função é útil para receber muitos valores sem repetidamente chamar a função filter_input().
Parâmetros
- type
-
Um dos INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION, ou INPUT_REQUEST.
- definition
-
Um definindo os argumentos. Uma chave válida é um string contendo o nome da variável e um valor válido é um tipo filtro, ou um array opcionalmente especificando o filtro, flags e opções. Se o valor é um array, chaves válidas são filter que especifica o tipo de filtro, flags que especifica uma flag aplica ao filtro, e options que especifica uma opção para aplicar ao filtro. Veja os exemplos abaixo para entender melhor.
Este parâmetro pode ser também um inteiro indicando uma constante da filter. Então todos valores na array de entrada serão filtradas por este filtro.
Valor Retornado
Um array contendo os valores das variáveis requisitads em caso de sucesso, ou FALSE em falha. Um array de valores será FALSE se o filtro falhar, ou NULL se a variável não é definida. Ou se a flag FILTER_NULL_ON_FAILURE é usada, é retornado FALSE se a variável não é definida e NULL se o filtro falhar.
Exemplos
Exemplo #1 Um exemplo da filter_input_array()
<?php
error_reporting(E_ALL | E_STRICT);
/* data actually came from POST
$_POST = array(
'product_id' => 'libgd<script>',
'component' => '10',
'versions' => '2.0.33',
'testscalar' => array('2', '23', '10', '12'),
'testarray' => '2',
);
*/
$args = array(
'product_id' => FILTER_SANITIZE_ENCODED,
'component' => array('filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_ARRAY,
'options' => array('min_range' => 1, 'max_range' => 10)
),
'versions' => FILTER_SANITIZE_ENCODED,
'doesnotexist' => FILTER_VALIDATE_INT,
'testscalar' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
),
'testarray' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_ARRAY,
)
);
$myinputs = filter_input_array(INPUT_POST, $args);
var_dump($myinputs);
echo "\n";
?>
O exemplo acima irá imprimir:
array(6) { ["product_id"]=> array(1) { [0]=> string(17) "libgd%3Cscript%3E" } ["component"]=> array(1) { [0]=> int(10) } ["versions"]=> array(1) { [0]=> string(6) "2.0.33" } ["doesnotexist"]=> NULL ["testscalar"]=> bool(false) ["testarray"]=> array(1) { [0]=> int(2) } }
filter_input_array
12-Aug-2008 09:42
08-Jul-2008 03:37
Looks like filter_input_array isn't aware of changes to the input arrays that were made before calling filter_input_array. Instead, it always looks at the originally submitted input arrays.
So this will not work:
$_POST['my_float_field'] = str_replace(',','.',$_POST['my_float_field']);
$args = array('my_float_field',FILTER_VALIDATE_FLOAT);
$result = filter_input_array(INPUT_POST, $args);
10-Sep-2007 07:32
The above example will actually output "NULL" because of the undefined variable doesnotexist - see http://bugs.php.net/bug.php?id=42608.
22-Aug-2007 07:10
extract() is a very convenient way of copying all those variables to the local scope. (see http://www.php.net/extract)
08-Jun-2007 10:02
The above example raises other questions such as how one would validate an html array. In the input form each input tag that refers to an html array would be named for example testarray[]. However, after the form is submitted, the syntax for validating the values is different from the expected $_POST['testarray[]']. Instead one has to drop the braces and validate as follows, assuming that testarray[] is supposed to be an html array of numerical values:
Valid test:
echo '*';
echo filter_input(
INPUT_POST,
'testarray',
FILTER_VALIDATE_INT,
FILTER_REQUIRE_ARRAY
);
echo '*';
But the following is an invalid test that results in 2 consequtive asterisks only!
echo '*';
echo filter_input(INPUT_POST,
'testarray[]',
FILTER_VALIDATE_INT,
FILTER_REQUIRE_ARRAY
);
echo '*';
So, there is a naming inconsistency going on, as after the form is submitted, one has to forget about the original name of the submitted array by dropping its braces. Maybe when the PECL/Filter extension is reviewed again, the great ones might consider making the syntax a little more forgiving.
