2011-11-09 81 views
2

問題是,當我使用PHP isset()函數VS!空()

$fname = isset($_POST['fname']) ? $_POST['fname'] : 'sample'; 
die($fname); 

在PHP端表單提交有什麼我填寫,提交與未填充FNAME輸入字段後填充FNAME領域獲得輸出之後,獲得絕對沒有任何輸出。使用的代碼,而不是!empty

$fname = !empty($_POST['fname']) ? $_POST['fname'] : 'sample'; 
die($fname); 

提交與未填充FNAME輸入字段,獲得輸出sample後。

+0

人不妨去看看http://stackoverflow.com/questions/1219542/in-哪裏應該使用isset和空?rq = 1 – ErichBSchulz

+2

RTFM是***不是一個有效的答案。 – iconoclast

回答

5

這是因爲「FNAME」變量反正提交發送,因此你沒有一點輸出,它只是空的,但是發送!

嘗試將您的表單方法從POST更改爲GET,您將自己看到。

8

isset()只檢查變量是否爲NULL,如果您訪問數組中的未定義索引,則不會拋出E_NOTICE錯誤(與is_null()不同)。

不是檢查變量是否包含空字符串!

+1

有人可能會期望'is_null()'檢查它是否爲空,而'isset()'檢查它是否被設置。可悲的是,你的描述是準確的。 –

2

你的問題是什麼?

在這種情況下使用isset()$_POST['key']將返回true,因爲變量本身已被設置並從窗體傳遞。因爲您將$_POST['fname']的值分配給$fname變量,所以該值將始終分配,即使它是空的。

empty()如果沒有賦值給該變量將返回false。

4

這對我來說似乎是完全可以預料的。

您提交了一個名爲fname的元素的表單,所以即使它爲空也仍然設置。

含義isset值爲true,如果你什麼也沒有

2

對我來說這似乎是對的。它發生在輸入字段發送空時,它將是$_POST數組,而不是NULL

$_POST['fname'] = ""; 
isset($_POST['fname']) == true; 

$_POST['fname'] = ""; 
!empty($_POST['fname']) == false; 

你可以做的是使用array_key_exists檢查它是$_POST陣列,而不是isset

$_POST['fname'] = ""; 
array_key_exists('fname', $_POST) == true; // independent of its value