2013-06-26 4 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 не определен или определен как 2 в URL (and is 2)

И это делает работу:

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

вам нужен И вместо ИЛИ – Bun

+1

'X или Y' является истинным, если либо' x' истинно или 'Y' верно. Поэтому, если '$ prv' равно 2, тогда' $ prv! = 0' истинно, поэтому все выражение истинно. – Barmar

+0

@ user2386164, я думаю, вы можете опубликовать это как ответ – Sergio

ответ

0

Измените свою формулу, если:

// 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>"); 
}