php - filter_input - 如果未设置GET键,则设置为默认值

时间:2014-11-21 08:24:29

标签: php get filter-input

我希望有一个干净,优雅的方法,如果所述参数设置(和数字),则将变量设置为GET参数,如果不是,则设置为0(或其他默认值)集。

现在我有:

if (($get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
    $opened_staff['id'] = $get_id;
    // some database queries etc.
} else { $opened_staff['id'] = 0; }

我尝试使用一个回调函数,如果值为null或不是数字,则返回0,但是如果GET参数' id'没有设置,回调甚至不会被调用 - 它只是将$get_id设置为空。

包含else语句没什么大不了的,只是想我可能会错过filter_input的某些功能。

2 个答案:

答案 0 :(得分:15)

filter_input函数接受options参数。每个过滤器都接受不同的选例如,FILTER_VALIDATE_INT过滤器可以接受defaultmin_rangemax_range个选项as described here

$get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array("options" => array(
    "default" => 0,
    "min_range" => 0
)));
var_dump($get_id);

// $get_id = 0 when id is not present in query string, not an integer or negative
// $get_id = <that integer> otherwise

答案 1 :(得分:3)

您可以使用默认选项来实现此目的,如果未设置值,则默认值将获得分配,示例如下所示

$options = array( 'options' => array('default'=> 0) ); 
$valid = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options); 

filter_input()不读取_POST / _GET / _COOKIE / _SERVER / _ENV

$opened_staff['id'] = 0;
if($valid){
  $opened_staff['id'] = $_GET['id'];
}

您可以使用某些类来实现此目的。 [注意: - 这只是一个例子]

class RequestFilter{
 public static function get_filter_int($id){

   $options = array( 'options' => array('default'=> 0) ); 
   $valid = filter_input(INPUT_GET, $id, FILTER_VALIDATE_INT, $options); 

   if($valid){
     return $_GET[$id]; // Value will return
   }

   return $valid; // Default will return
 }
}

$opened_staff['id'] = RequestFilter::get_filter_int('id');

这里将返回值或默认值,此处为零。