如何在复选框组上使用filter_input?

时间:2014-05-09 18:01:06

标签: php user-input sanitization

我有一组复选框,我很难看到如何使用filter_input来检索它们的值。

我的数据如下(来自print_r($_GET)):

Array ( 
  [Keywords] => Array ( 
    [0] => Dairy 
  ) 
  [Diet] => Array ( 
    [0] => Diabetes Appropriate 
    [1] => Healthy Weight 
  ) 
  [Regional] => Array ( 
    [0] => Greek 
    [1] => Mediterranean 
  )
)

此代码..

// the specific categories I want to retrieve
$cat_names = array(
  "Regional",
  "Diet",
  "Keywords"
);

// filter new category data
$cats = array();
foreach( $cat_names as $c ){
  $cats[ $c ] = filter_input(INPUT_GET, $c);
}

..产生这个:

array(4) (
  [Regional] => (bool) false
  [Diet] => (bool) false
  [Keywords] => (bool) false
)

..但希望如此:

array(4) (
  [Regional] => array(2) ('Greek', 'Mediterranean')
  [Diet] => array(2) ( 'Diabetes Appropriate', 'Healthy Weight')
  [Keywords] => array(1) ('Dairy')
)

我有一段时间没有在框架之外的php工作 - 我该怎么做?

2 个答案:

答案 0 :(得分:4)

当我找到你的帖子时,我正在寻找解决类似问题的解决方案,我确实提出了这个解决方案......

您可以在filter_input函数中添加这些过滤器:

$cats[$c] = filter_input(INPUT_GET, $c, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

而不是FILTER_DEFAULT,您可以按照自己的方式进行消毒。

但是,如果您的简单关联some_category => some_value不是数组,那么您最终会得到一个空的$cats['some_category']

例如,如果你的$ _GET包含这样的内容:

Array ( 
  [Regional] => Array ( 
    [0] => Greek 
    [1] => Mediterranean 
  )
  [some_category] => 'some value'
)

答案 1 :(得分:0)

所以这是在array_intersect_key()的帮助下使用array_flip()的简单案例。

$cats = array_intersect_key( $_GET, array_flip($cat_names) );的结果应该是您正在寻找的。

PHP - Array Intersect Key - PHP - Array Flip