2017-05-30 104 views
-1

如何在此類上添加更改密碼?我試圖但我得到更改錯誤-pass.php無法更改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; 
    } 
} 
?> 

,這是我修改密碼的PHP腳本

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    
       )); 



    } 
+0

你爲什麼認爲'password_hash'是'USER'類的一個方法?這裏沒有定義。它只是'password_hash()',而不是'$ auth_user-> password_hash()'。 – deceze

+0

此外,您不會將':user_pass'的任何內容傳遞給'execute()'。 –

+0

你是對的@MichaelJaros現在它的固定歡呼:) – Roger

回答

0

是的,正如其他貢獻者指出的,您的USER類中沒有稱爲password_hash()的方法。檢查你從哪裏獲得該課程,以確保你複製了所有的功能。或者你可以在USER類中創建你自己的password_hash($ plain_text_password)實現。該方法應返回發送給它的密碼的bcrypt散列。

0

錯誤r對於缺少的內容非常清楚,您正嘗試在USER類中調用方法password_hash,該類不存在。因此,無論是爲password_hash創建一個包裝方法,還是隻使用password_hash函數本身。我會推薦最後一個,雖然