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

请试试这个

if(($_SESSION['ugid']!=1)||($_SESSION['ugid']!=2))
{
    $_SESSION['error']="access";
    header("location:../error.php"); 
}
于 2012-12-19T07:22:17.000 回答
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 回答
0

如果你有这样的 if 语句:

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

第一个条件expr1为假,那么 PHP 将评估第二个条件。在这种情况下, $_SESSION['ugid'] != "2" 是true,所以它执行 if 块中的代码。

答案取决于你想要做什么。如果12是唯一有效的值(即,除了这些值之外的任何值都是您的应用程序中的错误),那么您可以将您的替换||&&. 我认为做这样的事情可能读起来更好:

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