2012-12-19 21 views
1

我有我的$ _SESSION ['ugid'] = 1。但爲什麼它仍然落入IF塊? 我的病情陳述有問題嗎? 請指教。謝謝。PHP:我的IF語句有什麼不對嗎?

if(($_SESSION['ugid']!="1")||($_SESSION['ugid']!="2")) 
{ 
    $_SESSION['error']="access"; 
    header("location:../error.php"); 
} 
+0

真正的問題是,如果他們應該能夠進入該代碼塊在所有如果'($ _SESSION [「UGID」] ==「1 「)'。如果是這樣,那麼簡單地將它改爲AND語句並不是正確的方法。 –

回答

1

使用& &代替||

if(($_SESSION['ugid']!="1")&&($_SESSION['ugid']!="2")) 
{ 
    $_SESSION['error']="access"; 
    header("location:../error.php"); 
} 
2

只是因爲您使用的是OR條件。

if(($_SESSION['ugid']!="1")||($_SESSION['ugid']!="2"))

此全文

if session variable 1 doesn't equal 1 **OR** session 2 variable doesn't equal 2

顯然,會話2變量不等於2,因此要輸入該代碼塊。

1

因爲如果它是1,它仍然不是2(因爲OR)。我想你的意思是把&&

1

請儘量將

if(($_SESSION['ugid']!=1)||($_SESSION['ugid']!=2)) 
{ 
    $_SESSION['error']="access"; 
    header("location:../error.php"); 
} 
+0

「1」== 1在php中評估爲true。你的答案如何幫助? – TigOldBitties

1

也許有你的會話爲雙qouted值。嘗試刪除吧:)

+0

「1」== 1在php中評估爲true。你的答案如何幫助? – TigOldBitties

+0

對不起哈........ –

0

如果if語句像這樣有:

if (expr1 || expr2) { 
    // do something 
} 

與所述第一條件,expr1是假的,那麼PHP將評估第二個條件。在這種情況下,$ _SESSION ['ugid']!=「2」是true,所以它執行if塊中的代碼。

答案取決於你想要做什麼。如果12是唯一有效的值(即,那些值以外的任何值都是您的應用程序中的錯誤),那麼您可以用&&替換||。我認爲它可能會讀一點更好做這樣的事情:

$valid_guids = array(1, 2); 
if (!in_array($_SESSION['guid'], $valid_guids)) { 
    // Error code 
}