Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用php类更改密码_Php_Pdo - Fatal编程技术网

无法使用php类更改密码

无法使用php类更改密码,php,pdo,Php,Pdo,如何在此类中添加更改密码?我正在尝试,但在change-pass.php上出错 我不熟悉课堂,如果这里有人能帮我修改密码脚本,我将不胜感激。这些代码根本不更新,我得到以下错误 Fatal error: Call to undefined method USER::password_hash() in C:\wamp\www\Login-Signup\profile.php on line 20 第20行 $new_password = $auth_user->password_hash(

如何在此类中添加更改密码?我正在尝试,但在change-pass.php上出错

我不熟悉课堂,如果这里有人能帮我修改密码脚本,我将不胜感激。这些代码根本不更新,我得到以下错误

Fatal error: Call to undefined method USER::password_hash() in C:\wamp\www\Login-Signup\profile.php on line 20
第20行

$new_password = $auth_user->password_hash($_POST['password'], PASSWORD_BCRYPT);
user.class.php

<?php

require_once('dbconfig.php');

class USER
{   

    private $conn;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }

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

            $stmt = $this->conn->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 doLogin($uname,$umail,$upass)
    {
        try
        {
            $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email, user_pass FROM users WHERE user_name=:uname OR user_email=:umail ");
            $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
            if($stmt->rowCount() == 1)
            {
                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 doLogout()
    {
        session_destroy();
        unset($_SESSION['user_session']);
        return true;
    }
}
?>

错误很明显,您正在尝试调用
USER
类上不存在的方法
password\u hash
。因此,要么为
password\u hash
创建一个包装器方法,要么只使用password\u hash函数本身。尽管如此,我还是推荐最后一个,正如其他贡献者所指出的,您的用户类中没有名为password_hash()的方法。检查从何处获取该类,以确保复制了所有函数。或者,您可以在用户类中创建自己的密码\u散列($plain\u text\u password)实现。该方法应返回发送给它的密码的bcrypt哈希

为什么您会认为
password\u hash
USER
类的一种方法?那里没有定义。它只是
password\u hash()
,而不是
$auth\u user->password\u hash()
。此外,您没有为
传递任何内容:user\u pass
execute()
。您是对的@MichaelJaros现在它固定的欢呼:)
require_once("session.php");

    require_once("class.user.php");
    $auth_user = new USER();


    $user_id = $_SESSION['user_session'];

    $stmt = $auth_user->runQuery("SELECT * FROM users WHERE user_id=:user_id");
    $stmt->execute(array(":user_id"=>$user_id));

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


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

//hash the password
   $new_password = $auth_user->password_hash($_POST['password'], PASSWORD_BCRYPT);

            $stmt = $conn->runQuery('UPDATE users SET user_pass = :user_pass WHERE user_id = '.$user_id.'');            
        $stmt->execute(array(
                     ':user_id' => $new_password             
                  ));



   }