2010-04-19 53 views
7

如果嘗試讀取'get'變量的值,那麼如果在URL中未設置該變量,會發生什麼情況。例如:您請求頁面test.php,在該文件中它嘗試讀取$_GET['message']的值。在這種情況下會發生什麼?劑量值只返回爲''PHP讀取'get'變量可能已設置或可能未設置

這是否意味着,如果我總是期待值輸入,並不甘心接受'一個值,我可以做這樣的事情

$foo = $_GET['bar']; 
if($foo == ''){ 
    // Handle my 'error' 
} 
else 
{ 
    // $foo should now have a value that I can work with 
} 

請記住我知道我可以使用isset($_GET['bar'])但我不只是想知道它是否被設置,我不在乎它是否與否,我只關心它是否具有不僅僅是空字符串的值。

+0

哦獲得真正的布爾值,是我,我做我的標籤:PI試着寫「$ _GET」 – thecoshman 2010-04-19 10:06:26

回答

7

如果只是替換默認值你不在乎這個值是否真的設置好了,你可以這樣使用:

if (empty($_GET['bar'])) 
    // value is null, false, 0, '0' or an empty string (including whitespace). 
+0

我相信這是滿足我需求的完美解決方案。所以如果'$ _GET ['bar']'沒有被設置在第一位,這將不會產生錯誤。 – thecoshman 2010-04-19 10:32:58

+0

我認爲重要的是要指出,這將考慮字符串「0」爲空。如果你在哪裏使用這個作爲頁面的ID加載這可能會導致你的問題。我確實相信,儘管大多數數據庫開始自動編號的ID列在1 – thecoshman 2010-04-19 10:48:31

+0

年,並補充說,答案。 – elias 2010-04-19 10:53:48

0

如果我理解正確的是:

$foo = $_GET['bar']; 
if ((!isset($foo)) || $foo == '') { 
//GET veriable not set, error 
} 
else { 
// GET veriable set, code here. 
} 
+0

但是在這個代碼,我仍然需要檢查'$ foo =='''我想嘗試一下去做。 – thecoshman 2010-04-19 10:17:42

6

如果嘗試訪問不存在的數組項目,其結果將是null

$foo = $_GET['bar']; //$foo is now null 

值得注意的是,如果你使用的是弱comparison operator==,而不是嚴格的comparsion ===,然後''將被作爲無效處理。

上面的代碼的缺點是,當您訪問數組的索引不存在時,它會生成一個通知,這有點麻煩。

因此,您應該檢查是否將值包含的值分配給變量之前,設置值。

if (!isset($_GET['bar'])){ 
    //handle error or assign default value to $foo 
}else{ 
    $foo = $_GET['bar']; 
} 

如果你想有一個默認值,如果$ _GET值存在,你可以使用conditional operator(向下滾動到「三元運算符」)

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value'; 
1

這是我該怎麼做的。

$foo = (isset($_GET['bar'])) ? $_GET['bar'] : false; 

if(false === $foo){ 
    die('no Foo for your Bar'); 
} 

作爲一個方面,你可能永遠不會從$ _GET