微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你如何修复我的多用户登录系统

如何解决你如何修复我的多用户登录系统

您好,我遇到这个错误已经很长时间了。 所以基本上这里是通过代码

function loginUser($conn,$username,$password) {
    $checkExists = checkExists($conn,$username);

    if ($checkExists === false) {
        header("Location: ../login.PHP?error=wronglogininfo");
        exit();
    }

    $passwordHashed = $checkExists['password'];
    $checkPassword = password_verify($password,$passwordHashed);

    if ($checkPassword === false) {
        header("Location: ../login.PHP?error=wronglogin");
        exit();
    } elseif ($checkPassword === true) {
        $query = "SELECT * FROM users WHERE username='$username' AND password='$checkPassword'";
        $query_run = MysqLi_query($conn,$query);
        $usertypes = MysqLi_fetch_array($query_run);

        if ($usertypes['usertype'] == "admin") {
            header('Location: ../login.PHP?admin');
        } elseif ($usertypes['usertype'] == "user") {
            header('Location: ../login.PHP?user');
        }
    }
}

function checkExists($conn,$email) {
    $sql = "SELECT * FROM users WHERE username = ? OR email = ?;";
    $stmt = MysqLi_stmt_init($conn);

    if (!MysqLi_stmt_prepare($stmt,$sql)) {
        header("Location: ../register.PHP?error=stmtFailed");
        exit();
    } 

    MysqLi_stmt_bind_param($stmt,"ss",$email);
    MysqLi_stmt_execute($stmt);

    $resultData = MysqLi_stmt_get_result($stmt);

    if ($row = MysqLi_fetch_assoc($resultData)) {
        return $row;
    } else {
        $result = false;
        return $result;
    }
    
    MysqLi_stmt_close($stmt);
}

所以错误工作正常。 真正的问题是,每当我使用正确的凭据登录时,它都会将我发送到一个 404 页面,其中包含一个我从未放置过的目录。我希望它发送到管理面板用户页面。有人可以帮忙吗?

解决方法

这个选择看起来像一条毁灭之路:SELECT * FROM users WHERE username='$username' AND password='$checkPassword' 如果 $checkPassword 是 password_verify() 的结果。 (还要注意可能的 SQL注入。)

我怀疑这是您的主要问题。这基本上会将您的查询转换为:

Exception: Cannot call SpreadsheetApp.getUi() from this context.

这可能会返回一个空的结果集,但您的下一个if 语句期望的是一个填充有数据的用户数组。

SELECT * FROM users WHERE username = 'tony' AND password = '1';

现在发生了什么?您不会被重定向到任何地方,当前脚本将继续处理。那你能做什么?

如果你已经有了用户行,通过 checkExists() (这可能是 命名更好?),为什么要再次调用数据库以获取 用户类型?

您已经可以访问您的用户数组,因为您在上面调用了 if ($usertypes['usertype'] == "admin") { header('Location: ../login.php?admin'); } elseif ($usertypes['usertype'] == "user") { header('Location: ../login.php?user'); } 并验证它不是假的。直接使用数组即可。

我只是稍微清理了您的代码并添加了一些注释。我没有以任何方式更改您的查询,也没有验证它们是否正确。

checkExists

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。