【问题标题】:PHP - UserRole - Function - OOPPHP - 用户角色 - 函数 - OOP
【发布时间】:2015-09-16 02:23:16
【问题描述】:

我正在尝试制作自己的自定义 CMS,我可以注册用户并可以登录,现在我正在尝试为用户角色制作一个功能,

文件:class.user.php

function getUserrole() {
    $username = htmlentities($_SESSION['user_session']);
    $stmt = $this->db->prepare('SELECT * FROM users WHERE user_name = :username');
    $stmt->bindParam(':user_name', $username);
    $stmt->execute();

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    $userrole = $row['user_role'];

    if($userrole == 3) {
        return $userrole = 3;
    }

    if($userrole == 2) {
        return $userrole = 2;
    }

    if($userrole == 1) {
        return $userrole = 1;
    }

    if($userrole == 0) {
        return $userrole = 0;
    }
} 

文件:Home.php

<?php 
    $userrole = getUserrole();
    if($userrole == 1) {
        echo "Hi Admin";
    }

    else {
        echo "You are not a admin";
    }
?>

当我尝试这样做时,会出现错误:

Fatal error: Call to undefined function getUserrole() in /Applications/MAMP/htdocs/test/home.php on line 24

我发现有问题,我希望你们能在这里帮助我:)

整个class.user.php:

<?php
class USER
{
    private $db;

    function __construct($DB_con)
    {
        $this->db = $DB_con;
    }

    public function register($uname,$umail,$upass)
    {
        try
        {
            $new_password = password_hash($upass, PASSWORD_DEFAULT);

            $stmt = $this->db->prepare("INSERT INTO users(user_name,user_email,user_pass) 
                                                       VALUES(:uname, :umail, :upass)");

            $stmt->bindparam(":uname", $uname);
            $stmt->bindparam(":umail", $umail);
            $stmt->bindparam(":upass", $new_password);                                        

            $stmt->execute();   

            return $stmt;   
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }               
    }

    public function login($uname,$umail,$upass)
    {
        try
        {
            $stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname OR user_email=:umail LIMIT 1");
            $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
            if($stmt->rowCount() > 0)
            {
                if(password_verify($upass, $userRow['user_pass']))
                {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function is_loggedin()
    {
        if(isset($_SESSION['user_session']))
        {
            return true;
        }
    }

    public function redirect($url)
    {
        header("Location: $url");
    }

    public function logout()
    {
        session_destroy();
        unset($_SESSION['user_session']);
        return true;
    }


function getUserrole() {
    $username = htmlentities($_SESSION['user_session']);
    $stmt = $this->db->prepare('SELECT * FROM users WHERE user_name = :username');
    $stmt->bindParam(':user_name', $username);
    $stmt->execute();

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    $userrole = $row['user_role'];

    if($userrole == 3) {
        return $userrole = 3;
    }

    if($userrole == 2) {
        return $userrole = 2;
    }

    if($userrole == 1) {
        return $userrole = 1;
    }

    if($userrole == 0) {
        return $userrole = 0;
    }
} 

}
?>

【问题讨论】:

  • getUserrole() 是在一个实际的类中,还是只是一个函数?您是否在Home.php 中包含或要求class.user.php
  • 它是类中的一个函数 ;) 我在 dbconfig.php 中包含了 dbconfig.php 我包含了 class.user.php
  • 如果是类中的函数,必须先定义类名?喜欢:$class->getUserrole()
  • 您需要先初始化该类并在该对象上调用方法getUserrole。除了将return $userrole = 3; 更改为return 3;
  • “->”运算符意味着您正在访问一个对象的方法,而不仅仅是一个随机函数。此外,您需要使用“new”运算符实例化对象,以便能够访问所述对象的方法。下面由 sanderbee 提供的答案正好说明了我刚刚解释的内容

标签: php oop user-roles


【解决方案1】:

需要在你的 home.php 中的类,初始化它然后调用函数

<?php 

require_once 'class.user.php';
$userClass = new USER(<yourdbcon>);

$userrole = $userClass->getUserrole();
if($userrole == 1) {
    echo "Hi Admin";
}

else {
    echo "You are not a admin";
}

?>

【讨论】:

  • 你能解释一下为什么是 $userClass 吗? class.user.php 中的类名为 USER
  • 它是对象的持有者(USER)。你可以给它起任何你喜欢的名字。如果您愿意,请阅读:code.tutsplus.com/tutorials/…
  • 我明白了:) aswel 函数有问题,我认为与此有关,$stmt->execute();当我删除它时,脚本没有错误,但在数据库中返回值 0 我的用户是 user_role 1,当 $stmt->execute();在函数中:
  • 致命错误:在 /Applications/MAMP/htdocs/test/class.user.php:85 中带有消息“SQLSTATE[HY093]:无效参数编号:未定义参数”的未捕获异常“PDOException”堆栈跟踪:#0 /Applications/MAMP/htdocs/test/class.user.php(85): PDOStatement->execute() #1 /Applications/MAMP/htdocs/test/home.php(41): USER-> getUserrole() #2 {main} 在第 85 行的 /Applications/MAMP/htdocs/test/class.user.php 中抛出
  • 我认为您需要先创建数据库连接对象,然后将其作为参数传递给 USER 类的对象。如果您可以使用 DB 连接类的代码以及您如何在应用程序中使用它来更新您的问题,将会很有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多