56

使用filter_input时,我无法拉入POST数组变量。输入POST

type              => 'container',
action            => 'edit',
data[display]     => 1,
data[query_limit] => 100

我可以将超全局变量作为数组正确访问data$_POST但该filter_input函数不返回任何内容:

$data   = $_POST['data']; // Working, woot
$data   = filter_input(INPUT_POST, 'data'); // returns null, should return array
$action = filter_input(INPUT_POST, 'action'); // returns "edit" (correctly)

不能filter_input用于POST数组变量吗?

4

4 回答 4

137

尝试 :

$data   = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

链接:

http://php.net/manual/en/function.filter-input.php

http://php.net/manual/en/filter.filters.flags.php

于 2013-10-28T14:27:00.347 回答
14

FILTER_REQUIRE_ARRAYPOST如果变量包含标量值,将返回 false 。如果您不确定或只是打算POST接受标量和数组值的变量,请FILTER_FORCE_ARRAY改用,它将任何输入视为数组,基本上相应地转换标量值。

$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_FORCE_ARRAY);
于 2016-07-24T03:49:06.063 回答
2

我在 javascript 中使用了 FormData 并使用 jquery ajax 发布字段。我收到所有这些字段的方式是:

$arrFields = array('field1','field2','field2','field3', 'field4','field5');
foreach($arrFields as $field){
   $params[$field] = filter_input(INPUT_POST, $field, FILTER_DEFAULT);
}
var_dump($params);

然后我会将所有数据放入一个可以传递的数组中......

于 2017-04-02T20:02:08.527 回答
2

或者,您可以一次性进行过滤...例如

$MY_INPUT = filter_input_array(INPUT_POST, [
    "item_id" => FILTER_SANITIZE_NUMBER_INT,
    "item_string_code" => FILTER_SANITIZE_STRING,
    "method" => FILTER_SANITIZE_STRING,
    "item_id_array" => array(
        'filter' => FILTER_SANITIZE_NUMBER_INT,
        'flags' => FILTER_REQUIRE_ARRAY
    )
]);

就您返回的内容而言,结果几乎与发布数据相同,除了全局 $_POST 不是您的变量,在这种情况下它将是 $MY_INPUT 。

于 2019-07-03T14:24:32.573 回答