无法使用php类更改密码
如何在此类中添加更改密码?我正在尝试,但在change-pass.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(
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
));
}