2013-01-16 32 views
2

所以我對PHP相當陌生,但在真正瞭解之前,我已經習慣了這種習慣。當一個$_SESSION/$_POST/$_GET變量是否被設置檢查我用這個:

if($_SESSION['username'] != '' { 
//allow access 
header('Location: welcomefriend.php') 
} 
else { 
//get out 
header('Location: getoutofhereyournotwelcome.php') 
} 

我已經使用這個在登錄腳本,檢查是否會話設置允許訪問等,所以現在我知道約isset/empty但我似乎總是遇到這些問題。

所以我的問題是我會遇到一個問題,當使用if($some_far != '')來檢查變量是否設置?

+1

使用這不是一個很好的檢查,看看是否設置了變量。 '=='和'!=「在涉及到值時通常是」有問題的「;然而,如果一個變量(或數組索引)是「未設置」,那麼有*無值*開始,這使得它更不適合。 – 2013-01-16 06:31:13

+0

if($ some_far)可能足以檢查集 –

回答

2

如果變量不列入存在,將顯示通知,這樣做:

if(!empty($_SESSION["username"])) { 
... 
+0

我只在我的服務器上開發,所以我猜這個通知是被禁用的,所以它還沒有引起任何問題。將來我會用'空',因爲它似乎檢查同樣的事情。 – cantaffordretail

0

是的,如果表格已提交但未填寫,$_POST["value"]==""會給您與isset($_POST["value"])不同的結果。另外,在未設置的情況下,$_POST["value"]==""會在某些服務器上出現錯誤。

2

是 - 如果索引不存在於數組中,它會發出通知。

0

察看$_SESSION['username']是空的,不檢查是否存在實際上是$_SESSION陣列將拋出通知在username條目。對他們進行編碼是一種很好的做法。其中一種方法就像if (isset($_SESSION['username']) && $_SESSION['username'] != '')

至於empty() vs != "",這是個人喜好。你可能遇到的一個問題是empty()不接受數值,只有引用,所以你不能做empty(somefunction($_SESSION['username']))

0

使用empty()if(!empty($some_far)) {來檢查是否設置了$ _POST變量而不是空的。

如果變量也可以是空的,但必須設置使用if(isset($some_far)) {
隨着isset()變量也不能爲NULL返回true。

如果該變量沒有設置爲馬丁在他的文章中已經提到的話,您也不會收到通知。

0

我始終做到以下幾點:

if (isset($_SESSION['username']) && $_SESSION['username'] != '') { 
    //allow access 
    header('Location: welcomefriend.php') 
} 
else { 
    //get out 
    header('Location: getoutofhereyournotwelcome.php') 
} 

測試,如果指數在'username'首先在$_SESSION變量存在的if語句將意味着,如果索引不存在,那麼我們就不會與$_SESSION['username'] != ''繼續從而不會導致錯誤。

+0

'if(!empty($ _ SESSION ['username'])){'會做這個工作:) – Fabian

0

考慮

包含會話變量可用於當前腳本

爲什麼不使用提供的預定義功能的關聯數組? array_key_exists

if(array_key_exists('username', $_SESSION)) { 
    header('Location: welcomefriend.php'); 
} else { 
    header('Location: getoutofhereyournotwelcome.php'); 
} 
相關問題