PHP-POST变量数组和filter_inpu

使用filter_input时,无法插入filter_input数组变量。 POST输入:

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

我可以作为数组从POST超全局变量正确访问filter_input变量,但是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)

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

jterry asked 2020-02-21T05:28:52Z
4个解决方案
118 votes

尝试:

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

链接:

[HTTP://PHP.net/manual/恩/function.filter-input.PHP]

[HTTP://PHP.net/manual/恩/filter.filters.flags.PHP]

jbrtrnd answered 2020-02-21T05:43:02Z
11 votes

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

$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_FORCE_ARRAY);
reformed answered 2020-02-21T05:43:22Z
1 votes

我已经在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);

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

Jørgen Rudolph Låker answered 2020-02-21T05:43:47Z
0 votes

另外,您也可以一口气进行过滤...例如

$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。

Goddard answered 2020-02-21T05:44:12Z
translate from https://stackoverflow.com:/questions/19637210/post-variable-array-and-filter-input