0

$_SESSION変数と変数を比較しようとしてい$_GETます。

どちらも数字です:

$_SESSION['auth'] === $_GET['user']

両方の結果が 1 の場合は、次に進みます。

何らかの理由で、これが正しく機能していません。使用する場合: if $_SESSION['auth'] = 2, and $_GET['user'] = 1、それでも続行します。

編集:

if(isset($_SESSION['auth'])===isset($_GET['user'])){
// proceeding code
}

これで、$_GET 変数の結果が何であっても、処理は続行されます。(int)で以下の答えを試しても、同じ結果が得られます。

$_GET 変数をテストする文字列に設定しようとしましたが、 $_SESSION 変数が1. ただし、任意の番号のコードのみを処理します。

ありがとう

4

4 に答える 4

2

if「等しい」条件内に関数がある場合、その関数が返すものと比較します。

したがって、あなたの場合、パラメーターが設定されている場合はisset()戻り、そうでない場合は戻ります。truefalse

それはあなたが比較しているものであり、値ではありません。

比較する前に、変数が設定されているかどうかを確認したいのは明らかです。最初にそれを行ってから、比較を開始してください。このような:

if(isset($_SESSION['auth'])  && isset($_GET['user'])){

    if($_SESSION['auth'] === (int)$_GET['user'])
    // proceeding code
    }

}
于 2012-08-08T05:21:57.603 に答える
1

GET/POST/REQUEST スーパーグローバルから出力されるものは、数字だけで構成されている場合でも、文字列として入力されます。SESSION に実際の整数を格納した場合===、文字列を int と比較しているため、厳密な比較 ( ) は失敗します。

試す

$_SESSION['auth'] === (int)$_GET['user']

==代わりに、または単に型を比較しないへの比較を緩和します。

于 2012-08-08T04:48:13.320 に答える
1

$_SESSION['auth']実際にそれらを比較するのではなく、両方$_GET['user']が設定されているか設定解除されているかを確認しています。

if(isset($_SESSION['auth'])  && isset($_GET['user'])){
    if($_SESSION['auth'] == $_GET['user'])
    // proceeding code
    }
}
于 2012-08-08T05:19:38.587 に答える
1

追加のコードが表示されない場合、間違った比較演算子を使用しているようです。条件式が通過する唯一の方法は、次の状況です。

<?php
$a = 2;

if($a = 1 && $a = 5){
    echo 'yes';
}else{
    echo 'no';
}
?>

の使用法は===、値と型の両方について、同一の比較に使用されます。追加のリファレンスについては、比較演算子に関するドキュメントを参照してください。

アップデート:

コードを見た後、条件式が合格する理由は、の結果がisset($_SESSION['auth'])isTrueisset($_GET['user'])isのTrue場合は合格し、両方が の場合も同じだからですFalse。条件式は結果のみをチェックしておりisset(VARIABLE)、変数内の変数が一致するかどうかはチェックしていません。

于 2012-08-08T05:14:20.397 に答える