1

これの何が問題なのですか?うまくいかない

// define
$prv=0;

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

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

これは、が未定義の場合やURL で定義されているdie()場合でも、常にパーツを通過します( )prv2and 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>");
}

$prv == 0のOR場合は 2 に等しくないため、常に true として評価されます。意味はありますか?

于 2013-06-26T17:10:15.250 に答える
0

"prv" の値が何であれ、同時に 0 と 2 の両方になることはあり得ないので、条件の 1 つが常に真になります。それがあなたがその節に入る理由です。

于 2013-06-26T17:11:06.170 に答える
0

それを分解してください:

  • が 0 でない場合$prv、最初の条件はパスし、OR は成功します。
  • それ以外の場合は$pev0 でなければなりません。したがって、「2 以外」でなければならないため、OR は成功します。

&&代わりに試してください。

于 2013-06-26T17:11:13.290 に答える