2012-12-13 66 views
-1

我想创建一个基于用户在数据库中的访问级别的菜单,用户将显示两个不同的菜单之一。在PHP中比较会话变量

现在我的代码如下:

if($_SESSION['acl'] == "Administrator"){ 
    echo $_SESSION['acl']; 
    echo "You are an administrator"; 
} 
{ 
    echo $_SESSION['acl']; 
    echo "You are a basic user"; 
} 

我的问题是,测试if语句总是失败,并直接进入其他部分。任何帮助,将不胜感激。

回答

9

问题是你没有一个else部分,你忘了写字else!因此,底层代码块总是执行总是,这就是您总是看到它的原因。

关于为什么检查用户是否是管理员的顶部if()语句永远不会被调用:这可能是因为您正在访问会话变量而未先在代码的顶部调用session_start()。如果不是这样,请确保您之前正确设置了该会话变量。

// start the session (required on all pages using session variables) 
session_start(); 

// I assume that for debug, you print the session variable 
echo $_SESSION['acl']; 

if($_SESSION['acl'] == "Administrator"){ 
    echo "You are an administrator"; 
} 
else 
{ 
    echo "You are a basic user"; 
} 

只是一个建议:我认为代码echo $_SESSION['acl'];只是为了调试。我将它移动到session_start()之下,因为这样,它仍然总是被调用,但是你没有写两次。

+0

我正要写。假设发布问题时不仅仅是一个错字。 – NappingRabbit

0

用同样的逻辑,会是这样的:

if(isset($_SESSION['acl'])){ 
    if($_SESSION['acl'] == "Administrator"){ 
     echo 'You are an administrator'; 
     } 
    else{ 
     echo 'You are a basic user'; 
     } 
}else{ 
    echo 'Session "acl" was not set'; 
    }