首页 > 解决方案 > 登录时它没有带我到正确的位置

问题描述

使用 PHP 我试图检查用户是管理员还是普通用户。如果他们是普通用户,那么它应该将他们重定向到 home.php。但是,如果他们是管理员,那么它应该将他们重定向到 admin.php。当输入标准用户的用户名和密码时,它会将我发送到 home.php,这是预期的。但是,每当我使用管理员登录时,它都不会将我定向到 admin.php。相反,它会将我重定向到 authentication.php,这是检查用户名和密码是否正确的脚本。

我尝试了 2 个不同的代码块,第一个完全没有工作,因为它出现了语法错误。但是,这个应该可以正常工作,但事实并非如此。我还检查了数据库中是否存储了正确的数字。1 是标准用户,2 是管理员。我已经在我的个人资料页面上打印了管理员级别,所以我知道它正在正确存储数据。

if (isset($_SESSION['admin'])) {
           if ($_SESSION['admin'] === "2") {
        header('Location: admin.php');
    } else {
        header('Location: home.php');
    }
} else {
    header('Location: home.php');
}

我希望当管理员登录时它应该将我引导到 admin.php,但是我只是被引导到 authentication.php 的空白屏幕。

标签: phphtmlcsssql

解决方案


你的代码是准确的。例如

<?php
$_SESSION['admin'] = "2";
if (isset($_SESSION['admin'])) {
           if ($_SESSION['admin'] === "2") {
        header('Location: admin.php');
    } else {
        header('Location: home.php');
    }
} else {
    header('Location: home.php');
}
?>

如果您在 localhost 上运行它,它会正确重定向到 admin.php 页面。当您使用 === 时,您必须确保您的数据类型匹配。

例如:

<?php

$a = "1";

if ($a === 1) {
echo "not ok";  
}

if ($a == 1) {
echo "ok";  
}

if ($a === "1") {
echo "This time ok";    
}

if ($a == "1") {
echo "it's also ok";    
}
?>

第一个回显没有显示为无法匹配的数据类型。所以我建议您将 === 更改为 == 并查看。希望它能解决你的问题

    <?php
    if (isset($_SESSION['admin'])) {
               if ($_SESSION['admin'] == "2") {
            header('Location: admin.php');
exit();
        } else {
            header('Location: home.php');
exit();
        }
    } else {
        header('Location: home.php');
exit();
    }
    ?>

推荐阅读