2014-11-21 95 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