0

この IF を使用して、権限に基づいてユーザーをリダイレクトしたいと思います。ただし、ユーザーは常にダッシュボードにリダイレクトされます。

実際に私は設定しました:

$perm_edit = '0';
$user_level = '1';

if ($perm_edit !== 1 || $user_level !== 1) {
      header("Location: $url/dash.php?error=1"); exit;
 }

|| 演算子は、先に進むために必要な条件は 1 つだけです。

私は何を間違っていますか?

4

2 に答える 2

6

トリプル比較演算子は「厳密」です。つまり、値だけでなく型もチェックします。文字列を数値と比較しているため、常に false になります。両方を数値に変換するか、単に二重比較を使用します。$perm_edit != 1

于 2013-09-09T00:58:35.473 に答える
1

これは、同一ではない演算子 ( )を使用しているためです!==。この場合に必要なtype jugglingは実行しません。

異なる型の 2 つのが等しいかどうかを調べるには、等しくない演算子 ( )を使用する必要があります。!=

if ($perm_edit != 1 || $user_level != 1) {
    header("Location: $url/dash.php?error=1");
    exit;
}

それを書く別の方法は次のとおりです。

if ( ! $perm_edit || ! $user_level) {
    header("Location: $url/dash.php?error=1");
    exit;
}

機能する理由は、PHP が型をジャグリングするためです。言い換えれば、それはandに0変わり、次に演算子 (NOT 演算子とも呼ばれます) がそれを反対に変えます。false1true!

比較演算子演算子全般について読む必要があります。

于 2013-09-09T01:19:36.460 に答える