标头重定向不按预期工作

时间:2011-11-15 23:53:04

标签: php redirect header

我有以下功能可以检索当前登录用户的用户名并从数据库中找出他们的访问级别(“请求”,“用户”或“管理员”)

function fetchAccess()
    {
    global $con;
    $username = $_SESSION['username'];
    $q = "SELECT access FROM users WHERE username = '$username'  LIMIT 1";
    $result = mysql_query($q, $con);
    $row = mysql_fetch_assoc($result);
    $access = $row['access'];

    if(isset($_SESSION['username']))
        {

        if($access == 'user')
            {
            return 1; // Returns 1 if access level is user
            }
        elseif($access == 'admin')
            {
            return 2; // Returns 2 if access level is admin
            }
        elseif($access == 'requested')
            {
            return 3; // Returns 3 if access level is requested
            }
        }
    }

当我使用以下代码检查用户是否是管理员时,这可以正常工作。

/* Redirects user if access level does not equal admin */
    $result = fetchAccess();
    if($result != 2)
        {
        header("location:index.php");
        }

但是当我检查是否“请求”访问时 - 以下操作无效。

<?php

/* Redirects user if access level does is 'requested' */
    $result = fetchAccess();
    if($result == 3)
        {
        header("location:redirect.php");
        }

?>

有谁知道这是为什么?

3 个答案:

答案 0 :(得分:0)

您是否确认$ $实际上等于3?很可能在第一个例子中$ result ==&#34;&#34;这是!= 2所以它根本不起作用。尝试通过包含如下标题来调试它:

<?php

    $result = fetchAccess();
    header("X-my-result: [$result]");
    if ( $result == 3 ) {
         header("Location: redirect.php");
    } 

?>

然后看看你在标题中获得$ result的价值。

答案 1 :(得分:0)

执行echo语句以查看$ result变量的返回值。顺便说一句,我不确定你的第一个重定向声明中的逻辑是否包含'user'和'requested',但这些用户将被重定向到index.php

答案 2 :(得分:0)

你可以这样做:

function fetchAccess()
    {
    global $con;
    $username = $_SESSION['username'];
    $q = "SELECT access FROM users WHERE username = '$username'  LIMIT 1";
    $result = mysql_query($q, $con);
    $row = mysql_fetch_assoc($result);
global $access
    $access = $row['access'];
}

然后:

global $access
if($access != admin){
   header("location:redirect.php");
}