POST变量数组和filter_input

时间:2013-10-28 14:18:46

标签: php arrays variables post input

使用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 个答案:

答案 0 :(得分:112)

尝试:

$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

答案 1 :(得分:10)

如果FILTER_REQUIRE_ARRAY变量包含标量值,

POST将返回false。如果您不确定或只是打算接受标量和数组值的POST变量,请改用FILTER_FORCE_ARRAY,这会将任何输入视为数组,从而基本上相应地投射标量值。

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

答案 2 :(得分:1)

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

然后我将把所有数据都放到一个我可以传递的数组中......

答案 3 :(得分:0)

或者,您也可以一次过滤...例如

import datetime

s_dt = 'Mon Jul 01 17:17:37 UTC'
datetime.datetime.strptime(s_dt, '%a %b %d %H:%M:%S %Z')
# datetime.datetime(1900, 7, 1, 17, 17, 37)

s_dt = 'Mon Jul 01 17:17:37 GST'
datetime.datetime.strptime(s_dt, '%a %b %d %H:%M:%S %Z')
# ValueError: time data 'Mon Jul 01 17:17:37 GST' does not match format '%a %b %d %H:%M:%S %Z'

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