繁体   English   中英

登录特定的用户角色后,如何打印文本?

[英]How can I print a text, when a specific user role is logged in?

我的mySQL数据库中有一个简单的成员表,其中包含以下字段: memberID,用户名,密码,角色

登录特定角色后 ,我想打印文本。我尝试使用用户名进行尝试,并且在这里工作得很好:

  <?php if ($_SESSION['username'] == 'Barbara') : ?>
            <span>Hello Admin!</span>
       <?php endif; ?>

但是,当我尝试对角色执行相同的操作时,它没有打印任何内容。

<?php if ($_SESSION['role'] == 'admin') : ?>
            <span>Hello Admin!</span>
       <?php endif; ?>

可能是什么原因?

这是我的登录脚本:

<?php

require_once('includes/config.php');


if( $user->is_logged_in() ){ header('Location: memberpage.php'); } 


if(isset($_POST['submit'])){

    $username = $_POST['username'];
    $password = $_POST['password'];

    if($user->login($username,$password)){ 
        $_SESSION['username'] = $username;
        header('Location: memberpage.php');
        exit;

    } else {
        $error[] = 'Wrong username or password or your account has not been activated.';
    }

}


$title = 'Login';


require('layout/header.php'); 
?>

您尝试下面的代码

<?php session_start();
$_SESSION['name']='urname';
$_SESSION['role']='admin';
if($_SESSION['role']=='admin')
{?>
<span>your logged as a admin</span>

使用新方法更新了User.php类,以基于用户名获取userData。 您只需要使用一次用户名即可。 执行(除非您想加载其他用户数据)

然后更新会话设置器以获取角色数据,并进行设置。

最佳乔纳斯


尝试使用以下方法更新您的User.php文件:

<?php
include('password.php');
class User extends Password{
    private $_db;
    private $_userData;

    function __construct($db){
        parent::__construct();

        $this->_userData = null;

        $this->_db = $db;
    }



    private function get_user_hash($username){  
        try {
            $stmt = $this->_db->prepare('SELECT password FROM members WHERE username = :username AND active="Yes" ');
            $stmt->execute(array('username' => $username));

            $row = $stmt->fetch();
            return $row['password'];
        } catch(PDOException $e) {
            echo '<p class="bg-danger">'.$e->getMessage().'</p>';
        }
    }
    public function login($username,$password){
        $hashed = $this->get_user_hash($username);

        if($this->password_verify($password,$hashed) == 1){

            $_SESSION['loggedin'] = true;
            return true;
        }   
    }

    public function getUserData($username = null)
    {
        if( is_null( $this->_userData ) && is_null( $username ) )
        {
          return null;
        }

        if( !is_null( $this->_userData ) && is_null( $username ) )
        {
            return $this->_userData;
        }

        if( !is_null($username) )
        {
            try {
                $stmt = $this->_db->prepare('SELECT username,role FROM members WHERE username = :username AND active="Yes" ');
                $stmt->execute(array('username' => $username));

                $this->_userData = $stmt->fetch(PDO::FETCH_OBJ);
                return $this->_userData;
            } catch(PDOException $e) {
                echo '<p class="bg-danger">'.$e->getMessage().'</p>';
            }
        }

    }

    public function logout(){
        session_destroy();
    }
    public function is_logged_in(){
        if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
            return true;
        }       
    }

}
?>

然后,执行以下操作:

<?php

    require_once('includes/config.php');


    if( $user->is_logged_in() ){ header('Location: memberpage.php'); } 


    if(isset($_POST['submit'])){

        $username = $_POST['username'];
        $password = $_POST['password'];

        if($user->login($username,$password)){ 
            $userData = $user->getUserData( $username );
            // This is where you set your username session
            $_SESSION['username'] = $username;
            // Set your role session here aswell

            $_SESSION['role'] = $userData->role; 

            header('Location: memberpage.php');
            exit;

        } else {
            $error[] = 'Wrong username or password or your account has not been activated.';
        }

    }


    $title = 'Login';


    require('layout/header.php'); 
    ?>

您的会话仅存储用户名而不是角色,您需要从数据库中加载角色,即

<?php
  $rUserInfo=mysql_query("select * from members where username='".addslashes($_SESSION['username'])."'");
  if($aUserInfo=mysql_fetch_array($rUserInfo))
  {
    if($aUserInfo['role']=='admin')
    { 
?>
        <span>Hello Admin!</span>
<?php  
    }
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM