重定向用户登录后根据他们的访问级别(用户组)

问题描述:

这是我的第一篇文章,所以请新手如此评论。我对PHP很好,但我似乎在这里错过了一些东西(显然)。我希望在用户登录后重定向用户,具体取决于他们分配的用户组。因此,会员将前往会员区,管理员到管理区,最后superadmin到superadmin区。该代码最近正在工作,但似乎在我为网页顶部的链接添加了JavaScript下拉菜单后就停止了。我已经缩小的问题降到这个片段:重定向用户登录后根据他们的访问级别(用户组)

if($count==1){ 

     // Register $myusername, $mypassword and redirect to file "login_success.php" 
     $_SESSION['myusername'] = $myusername; 
     $_SESSION['mypassword'] = $mypassword; 
     $_SESSION['myusergroup'] = $myusergroup; 
      if($usergroup == "SuperAdmin"){ 
      header("location:superadmin_login_success.php"); 
      exit(); 
      } 
      elseif($usergroup == "Admin"){ 
      header("location:admin_login_success.php"); 
      exit(); 
      } 
      elseif($usergroup == "Member"){ 
      header("location:login_success.php"); 
      exit(); 
      } 
    } 

计数表示从SQL查询返回的结果。该查询选择表中所有字段,其中用户名和密码字段等于我之前在登录时提交的表单。我的所有登录PHP代码都位于同一个网页上,并且在PHP开头处的if语句阻止代码在未提交表单时执行。任何人都可以发现这个片段或我的逻辑有什么问题,我一直在类似的情况下一直盯着看这个问题,我仍然无法到任何地方。

正如你所看到的,我正在使用头部函数来重定向,并且在调用头部之前打印输出到页面上时,函数会出现问题。我对这个问题的具体问题并不完全确定,但如果有人能够澄清并举例,那么我将不胜感激。分别编写这些脚本并在需要时包含它们是否合适和正确?我也一直在想这个。

非常感谢

里斯

$ myusergroup和$ usergroup有什么区别?你的if语句检查$ usergroup。是否设置或应该是他们检查的$ myusergroup?

+0

谢谢,我最近更改了 – 2013-03-06 22:49:53

确保您在发送之前header()没有输出。即使很小的空白也会毁掉你的重定向。

+0

谢谢。我现在明白标题必须放在任何印刷的HTML或PHP之上了! – 2013-03-07 02:03:36

您可以使用ob_start()打开输出缓冲。看看PHP的Output Control Functions

提示:使用switch(),而不是几个if()声明

我注意到,您在分配$ myusergroup到您的会话变量,但在你的if语句,你只调用$用户组。是$ usergroup在其他地方使用?

+0

谢谢,我最近更改了变量,以与用户名和密码一起使用的相似命名约定。我现在也理解头部必须放置在任何印刷的HTML或PHP之上的方式。再次感谢你。 – 2013-03-07 02:12:33