首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用BCRYPT更改密码脚本

用BCRYPT更改密码脚本
EN

Stack Overflow用户
提问于 2015-08-27 07:26:21
回答 1查看 721关注 0票数 1

我有登录/注册表格,它们工作得很好。现在,我正在努力制作脚本,允许用户更改密码,但我不明白为什么不能工作。这是HTML表单

代码语言:javascript
运行
复制
<form action="editAccount.php" method="post"> 
  <div class="input-group">
    <span class="input-group-addon">Password:</span>
      <input type="password" name="password" class="form-control" placeholder="password">
  </div>
  <button class="btn btn-primary custom-button btn-block" type="submit"><i class="fa fa-check"></i> Save Changes</button>                           
    <div class="input-group">
       <span class="input-group-addon">Confirm password:</span>
          <input type="password" name="passwordConfirm" class="form-control" placeholder="Confirm password">
    </div>                                                                                                            
</form>

这是PHP部分

代码语言:javascript
运行
复制
if(empty($_SESSION['id'])) 
{ 
    header("Location: userAction.php"); 
    die("Redirecting to userAction.php"); 
} 
if(isset($_POST['submit']))
{
//basic validation
if(strlen($_POST['password']) < 3){
    $error[] = 'Password is too short.';
}

if(strlen($_POST['passwordConfirm']) < 3){
    $error[] = 'Confirm Password is too short.';
}

if($_POST['password'] != $_POST['passwordConfirm']){
    $error[] = 'Password and Confirm password doesn't match.';
}
  if(empty($error)){

        $hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT);

        try {
            $stmt = $pdo->prepare("UPDATE users SET password = :hashedpassword WHERE id = :user_id");
            $stmt->execute(array(
                    ':hashedpassword' => $hashedpassword,
                    ':user_id' => $_SESSION['id']
            ));

            header('Location: userAction.php?action=joined');
            exit;

        } catch(PDOException $e) 
          {
             $error[] = $e->getMessage();
          }

   }
}

var_dump($_POST['password']上的结果是- string(11) "newpassword",即POST获得密码。

关于var_dump($hashedpassword)的结果是- NULL。所以问题一定是在散列函数中。

这里也是我在$user中所拥有的

代码语言:javascript
运行
复制
class User extends Password{

private $_db;

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

    $this->_db = $pdo;
}

 private function get_user_hash($username){ 

    try {
        $stmt = $this->_db->prepare('SELECT password FROM users 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 login_user_id($username){  

    try {
        $stmt = $this->_db->prepare('SELECT id FROM users WHERE username = :username');
        $stmt->execute(array('username' => $username));

        $row = $stmt->fetch();

        return $row['id'];

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

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 08:03:38

正如您在注释中所说的,它甚至没有进入if(isset($_POST['submit'])) {部分,因为您没有一个名为"submit“的输入。

尝试使用<input type="submit" name="submit">或名为"submit“的隐藏输入。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32243141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档