2013-06-26 22 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>"); 
}