Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Filter Functions : filter_input_array

filter_input_array

Gets multiple variables from outside PHP and optionally filters them (PHP 5 >= 5.2.0, PECL filter:0.11.0)
mixed filter_input_array ( int type [, mixed definition] )

Example 674. A filter_input_array() example

<?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";
?>

The above example will output:

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)
 }
}

Code Examples / Notes » filter_input_array

darren craine

Your example code does not work.  According to this page
http://us.php.net/manual/en/ref.filter.php#filter.intro
FILTER_FLAG_SCALAR and FILTER_FLAG_ARRAY dont exist.  If you replace them with FILTER_REQUIRE_SCALAR and FILTER_REQUIRE_ARRAY (or FILTER_FORCE_ARRAY if you want to just force it) then your example will execute.
.daRRen.


phpnotes dot 20 dot zsh

The above example will actually output "NULL" because of the undefined variable doesnotexist - see http://bugs.php.net/bug.php?id=42608.

iam4webwork

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.


sinured

extract() is a very convenient way of copying all those variables to the local scope. (see http://www.php.net/extract)

Change Language


Follow Navioo On Twitter
filter_has_var
filter_id
filter_input_array
filter_input
filter_list
filter_var_array
filter_var
eXTReMe Tracker