1

私は持っていますが、$_SESSION['ugid']=1なぜそれがまだIFブロックに分類されるのですか? 条件ステートメントに何か問題がありますか?

if(($_SESSION['ugid']!="1")||($_SESSION['ugid']!="2"))
{
    $_SESSION['error']="access";
    header("location:../error.php"); 
}
4

6 に答える 6

2

OR条件を使用しているためです。

if(($_SESSION['ugid']!="1")||($_SESSION['ugid']!="2"))

これは次のように読みます

if session variable 1 doesn't equal 1 **OR** session 2 variable doesn't equal 2

明らかに、セッション 2 変数は 2 と等しくないため、このコード ブロックを入力しています。

于 2012-12-19T07:20:40.500 に答える
1

たぶん、あなたのセッションの価値が二重に引用されているでしょう。削除してみてください:)

于 2012-12-19T07:22:25.913 に答える
1

|| の代わりに && を使用

if(($_SESSION['ugid']!="1")&&($_SESSION['ugid']!="2"))
{
    $_SESSION['error']="access";
    header("location:../error.php"); 
}
于 2012-12-19T07:20:28.167 に答える
1

1 の場合でも 2 とは異なるためです (OR のため)。を入れるつもりだったと思います&&

于 2012-12-19T07:20:55.710 に答える
1

これを試してください

if(($_SESSION['ugid']!=1)||($_SESSION['ugid']!=2))
{
    $_SESSION['error']="access";
    header("location:../error.php"); 
}
于 2012-12-19T07:22:17.000 に答える
0

次のようなifステートメントがある場合:

if ( expr1 || expr2 ) {
    // do something
}

そして、最初の条件expr1がfalseの場合、PHPは2番目の条件を評価します。この場合、$ _ SESSION ['ugid']!= "2"はtrueであるため、ifブロックのコードを実行します。

答えはあなたがやろうとしていることに依存します。1またはが唯一の有効な値である場合2(つまり、これらの値以外のものがアプリケーションのエラーである場合)、をに置き換えることができ||ます&&。私はこのようなことをするのが少し良いと思うかもしれません:

$valid_guids = array(1, 2);
if ( !in_array($_SESSION['guid'], $valid_guids) ) {
    // Error code
}
于 2012-12-19T07:25:42.053 に答える