1

这有什么问题?它不工作

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

4 回答 4

0

将您的 if 语句更改为:

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

有了OR它,它总是会评估为真,因为当 $prv == 0 时它不等于 2。有意义吗?

于 2013-06-26T17:10:15.250 回答
0

无论“prv”的值是多少,它肯定不可能同时为0和2,所以其中一个条件永远为真;这就是你进入那个条款的原因。

于 2013-06-26T17:11:06.170 回答
0

分解它:

  • 如果$prv不为 0,则第一个条件通过并且 OR 成功
  • 否则,$pev必须为 0。因此它必须是“非 2”,所以 OR 成功。

试试&&吧。

于 2013-06-26T17:11:13.290 回答
0

==代替!=

if($prv != 0 AND $prv != 2)  {
    die("<p>Error</p>");
}
于 2013-06-26T17:17:20.177 回答