Na seção anterior, vimos a função filter_var(). Porém existem outras funções que podem ser utilizadas para filtrar e validar variáveis, as quais veremos resumidamente à seguir.
filter_has_var ( int $type , string $variable_name )
Verifica se a variável $variable_name é de determinado tipo (GET, POST, COOKIE, SERVER, ENV), e retorna true ou false.
filter_input_array ( int $type [, mixed $definition ] )
Obtém múltiplas variáveis e opcionalmente, as filtra.
$tipe pode ser INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION, ou INPUT_REQUEST.
$definition pode ser entendido pelo exemplo abaixo, retirado de
http://www.php.net/manual/pt_BR/function.filter-input-array.php:
<?php
error_reporting(E_ALL | E_STRICT);
/* dados recebidos pela página pelo método POST
$_POST = array(
'product_id' => 'libgd<script>',
'component' => '10',
'versions' => '2.0.33',
'testscalar' => array('2', '23', '10', '12'),
'testarray' => '2',
);
*/
$args = array(//aqui são determinados os filtros que serão apelidados para cada uma das variáveis do POST
'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);//aqui se aplicam os filtros na variável $_POST
var_dump($myinputs);
echo "\n";
?>
Parece complicado, mas se você estudar os filtros utilizados, facilmente irá compreender o código e poderá compor rotinas de validação e filtragem muito simples e muito poderosas para suas páginas.
O exemplo acima deverá imprimir algo próximo disto:
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 ( int $type , string $variable_name [, int $filter [, mixed $options ]] )
A função acima obtém uma variável e a filtra opcionalmente. Veja o exemplo abaixo:
<?php
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);//pega a variável $_GET, aplica FILTER_SANITIZE_ENCODED em $_GET['search']
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
echo "Você procurou por $search_html.\n";
echo "<a href='?search=$search_url'>Procure novamente.</a>";
?>
O código retornado ao navegador é o seguinte:
Você procurou por Me & son.
<a href='?search=Me%20%26%20son'>Procure novamente.</a>
filter_var_array ( array $data [, mixed $definition ] )
Esta função obtém várias variáveis e as filtra, opcionalmente. Muito parecida com a função filter_input_array(), diferenciando-se da mesma pelo fato de que $data pode ser um array definido no código, como no exemplo abaixo:
<?php
error_reporting(E_ALL | E_STRICT);
$data = array(//repare que para filter_input_array(), os dados a serem filtrados foram recebidos via POST
'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_FORCE_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_FORCE_ARRAY,
)
);
$myinputs = filter_var_array($data, $args);
var_dump($myinputs);
echo "\n";
?>