2012-07-22 88 views
1

我相信我對PHP中的isset函數有些困惑。我試圖用這個函數來確定一個表單中的一個字段是null ......我在isset函數檢查一個字段是否有值的印象之下......但我相信isset函數只確定傳遞給它的東西是否存在。PHP isset函數

例如。

如果我有一個名稱屬性設置爲「日」的表單輸入字段。我會使用isset($_GET['day']);來確定表單輸入字段是否不是null?或者isset只是檢查'天'是否存在,並沒有檢查它通過的值?

任何幫助將是偉大的! 謝謝!

+1

'isset'不是函數,而是語言結構 – galymzhan 2012-07-22 05:19:58

回答

5

從PHP isset()頁:

[isset()函數確定]如果一個變量被設置,而不是NULL。

這意味着:

$var1; 
$var2 = NULL; 
$var3 = 0; 
$var4 = 'test'; 
isset($var1); //false 
isset($var2); //false 
isset($var3); //true; note that if($var3) still returns false 
isset($var4); //true 
isset($var0); //false 

綜上所述該位在那裏,isset()返回FALSE如果變量未設置(因此函數名)或者包含NULL作爲值。要使isset()返回true,必須同時存在變量幷包含實際值(包含布爾值false)。

對於$_GET['day']的情況,您可以使用isset()來檢查一個值是否已經實際傳遞給它(即它不爲空)。

+1

是的,但如果輸入爲空,它實際上會傳遞一個空字符串'''',所以'isset'將返回true,並且您必須使用'empty'來檢查。 – 2012-07-22 04:54:55

+0

好點。但據我所知,空字段的默認行爲是根本不發送'$ _GET'變量。 – Palladium 2012-07-22 04:56:35

+0

我不確定,但也許你是對的。我個人使用'empty'而不是'isset',因爲我經常使用Ajax和javascript來獲取輸入值,所以即使它是空的,我也會發送它。 – 2012-07-22 05:03:04

3

Isset只是檢查是否定義了一個變量。使用empty知道它是否爲空或未定義或類似的東西。

if(!empty($_GET['day'])) 
    //Stuff 
+0

或者您可以使用!= null。 – 2012-07-22 04:17:49

+0

好吧,所以如果你單獨訪問表單動作,isset函數總是會計算爲false - 例如,如果我在post.php中有動作,並且只是在瀏覽器中輸入了post.php,它將評估爲false。它評估真實的唯一方法是如果表單被髮布並且名稱值被設置爲輸入字段?感謝所有的迴應:) – 2012-07-23 05:33:24

+0

正確。但是,不要使用isset來檢查您的訪問者是否來自您的其他頁面,因爲任何人都可以使用導致您的頁面post.php的相同輸入名稱來僞造一個表格。但它阻止他們直接訪問頁面,爲true。 – 2012-07-23 05:50:20

0

絕對正確,isset()函數只是檢查變量'day'是否存在。爲了檢查值是否存在或者是空的,你必須使用empty()函數。