私は持っていますが、$_SESSION['ugid']=1
なぜそれがまだIFブロックに分類されるのですか? 条件ステートメントに何か問題がありますか?
if(($_SESSION['ugid']!="1")||($_SESSION['ugid']!="2"))
{
$_SESSION['error']="access";
header("location:../error.php");
}
私は持っていますが、$_SESSION['ugid']=1
なぜそれがまだIFブロックに分類されるのですか? 条件ステートメントに何か問題がありますか?
if(($_SESSION['ugid']!="1")||($_SESSION['ugid']!="2"))
{
$_SESSION['error']="access";
header("location:../error.php");
}
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 と等しくないため、このコード ブロックを入力しています。
たぶん、あなたのセッションの価値が二重に引用されているでしょう。削除してみてください:)
|| の代わりに && を使用
if(($_SESSION['ugid']!="1")&&($_SESSION['ugid']!="2"))
{
$_SESSION['error']="access";
header("location:../error.php");
}
1 の場合でも 2 とは異なるためです (OR のため)。を入れるつもりだったと思います&&
。
これを試してください
if(($_SESSION['ugid']!=1)||($_SESSION['ugid']!=2))
{
$_SESSION['error']="access";
header("location:../error.php");
}
次のような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
}