2014-11-21 52 views
6

我想有一个干净,优雅的方式来一个变量设置为GET参数,如果说参数设置(和数字),而设置为0(或一些其他的默认值)如果没有设置。PHP - filter_input - 设置为默认值,如果获取密钥没有设置

现在我有:

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一些功能错过了。

+0

给我一些更明确的解释 – 2014-11-21 08:32:47

回答

14

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

宾果。这是我错过的东西。选项数组中的默认键。谢谢! – tangopianist 2014-11-21 16:28:53

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'); 

这里将返回值或默认,这是零。

+2

为什么就不能在你的if语句返回'$ valid'因为你已经提取在这种情况下,有效的价值,或者是有什么原因我失踪?(对于PHP来说相对较新) – Levon 2017-06-26 17:34:12

+0

您不需要if如果有效是“true”,那么您返回与'$ valid'相同的'$ _GET [$ id]',因为filter_input返回值有效。在其他情况下,你返回'$ valid'。所以你的返回总是和'$ valid'一样。 – PhoneixS 2017-11-29 09:06:17