2013-06-26 25 views
1

這是怎麼回事?它不工作了PHP簡單等式

// define 
$prv=0; 

if(isset($_GET['prv'])) { 
$prv = intval($_GET['prv']); 
} 

// security 
if($prv != 0 OR $prv != 2) { 
die("<p>Error</p>"); 
} 

這總是通過die()部分得好,即使prv未定義或URL(and is 2

被定義爲2而這樣做的工作:

// security 
if($prv == 0 OR $prv == 2) { } else { 
die("<p>Error</p>"); 
} 
+7

你需要的,而是OR – Bun

+1

'X或者是'X'是真的還是'Y'是真的Y'是真實的。所以如果'$ prv'是2,那麼'$ prv!= 0'是真的,所以整個表達式是真的。 – Barmar

+0

@ user2386164,我想你可以將其作爲回答 – Sergio

回答

0

將您的if語句更改爲:

// security 
if($prv != 0 AND $prv != 2) { 
    die("<p>Error</p>"); 
} 

隨着OR它總是會評估爲真,因爲當$ prv == 0它不等於2.是否有意義?

0

無論「prv」的價值是多少,它肯定不能同時爲0和2,所以其中一個條件總是如此;這就是爲什麼你在這個條款。

0

它分解:

  • 如果$prv不爲0,第一個條件通過,並且OR成功
  • 否則,$pev必須爲0。因此,它必須是「不爲2」,所以OR成功。

嘗試用&&代替。

0

==更換!=

if($prv != 0 AND $prv != 2) { 
    die("<p>Error</p>"); 
}