MySQLi 面向对象的重定向取决于用户角色

Posted

技术标签:

【中文标题】MySQLi 面向对象的重定向取决于用户角色【英文标题】:MySQLi Object-oriented redirect depending on user role 【发布时间】:2019-11-23 04:40:54 【问题描述】:

不知道我的错误在哪里,我想根据用户角色重定向到网站的不同部分。

if (isset($_POST['submit'])) 
    $stmt = $conn->prepare('SELECT id, password FROM accounts WHERE email = ?');
    $stmt->bind_param('s', $_POST['email']);
    $stmt->execute();
    $stmt->store_result();

    if ($stmt->num_rows > 0) 
        $stmt->bind_result($id, $password);
        $stmt->fetch();

        if (password_verify($_POST['password'], $password))        
            session_regenerate_id();
            $_SESSION['loggedin'] = TRUE;
            $row = $result->fetch_assoc();

            if ($row['role']=='admin') 
                header('Location: admin.php');
             else if ($row['role']=='user') 
                header('Location: profile.php');
            
         else 
            $password_incorrect = '¡Contraseña incorrecta! Si has olvidado tu contraseña puedes <a href="#">restablecerla</a>.';
        
    

【问题讨论】:

【参考方案1】:

您没有在查询中选择role 列,因此您永远无法检查该值。您也在使用store_result(),但保留一些声明方法。建议您保留其中一个(此代码删除 store_result() 并仅使用普通准备好的语句)。

if (isset($_POST['submit'])) 
    $stmt = $conn->prepare('SELECT id, password, role FROM accounts WHERE email = ?');
    $stmt->bind_param('s', $_POST['email']);
    $stmt->execute();
    $stmt->bind_result($id, $password, $role);

    if ($stmt->fetch() && password_verify($_POST['password'], $password))        
        session_regenerate_id();
        $_SESSION['loggedin'] = true;

        if ($role == 'admin') 
            header('Location: admin.php');
            exit;
         elseif ($role == 'user') 
            header('Location: profile.php');
            exit;
        
     else 
        $password_incorrect = '¡Contraseña incorrecta! Si has olvidado tu contraseña puedes <a href="#">restablecerla</a>.';
    

【讨论】:

以上是关于MySQLi 面向对象的重定向取决于用户角色的主要内容,如果未能解决你的问题,请参考以下文章

二十mysqli基于面向过程与面向对象的编程

mysqli 面向对象连接和面向过程连接

PHP数据访问(面向对象方式:mysqli类)

MySQLi面向对象实践---预处理

Mysqli面向对象操作数据库

MySQLi面向对象--insertupdatedelete