首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在PHP PDO中使用正确的密码登录

无法在PHP PDO中使用正确的密码登录
EN

Stack Overflow用户
提问于 2019-03-27 04:46:27
回答 1查看 60关注 0票数 -1

我正在用php PDO构建一个简单的注册/登录应用程序,当我注册并尝试使用正确的密码登录时,密码错误不断出现。这里会有什么问题呢?

if ($stmt->execute()) {      
    if ($stmt->rowCount() === 1) {
        if ($row = $stmt->fetch()) {
            $hashed_password = $row['password'];
            if (password_verify($password, $hashed_password)) {

                session_start();
                $_SESSION['email'] = $email;
                $_SESSION['username'] = $row['username'];
                header('location: index.php');
            } else {
                $password_err = 'The password you entered is not valid';
            }
        }
    } else {
        $email_err = 'No account found for that email';
    }

} else {
    die('Something went wrong');
}
}

下面是register.php文件的一部分:

  $password = password_hash($password, PASSWORD_DEFAULT);


  $sql = 'INSERT INTO users (username, email, password) VALUES (:username, :email, :password)';

  if($stmt = $pdo->prepare($sql)){

    $stmt->bindParam(':username', $username, PDO::PARAM_STR);
    $stmt->bindParam(':email', $email, PDO::PARAM_STR);
    $stmt->bindParam(':password', $password, PDO::PARAM_STR);


    if($stmt->execute()){

      header('location: login');
    } else {
      die('Error');
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2019-03-27 07:52:34

如果我是你,我会像这样为user创建一个类

class User{
public static function Login($data){
    $_SESSION['user_id']=$data['user_id'];
    $_SESSION['username']=$data['username'];

}

之后,我将为我的所有项目创建post和get函数

function post($name)
{
    if (isset($_POST[$name])){
        if (is_array($_POST[$name]))
            return array_map(function($item){
                return htmlspecialchars(trim($item));
            }, $_POST[$name]);
        return htmlspecialchars(trim($_POST[$name]));
    }
}

function get($name)
{
    if (isset($_GET[$name])){
        if (is_array($_GET[$name]))
            return array_map(function($item){
                return htmlspecialchars(trim($item));
            }, $_GET[$name]);
        return htmlspecialchars(trim($_GET[$name]));
    }
}

我会创建一个函数来控制我的表单

   function form_control(...$except_these){
    unset($_POST['submit']);
    $data = [];
    $error = false;

foreach ($_POST as $key => $value){
    if (!in_array($key, $except_these)&& !post($key)){
        $error = true;
    }else {
        $data[$key] = post($key);
    }

}
    if ($error){
        return false;
    }
    return $data;
}

现在登录

if (post('submit')){
    if ($data = form_control()){

        $row = $db->query("SELECT * FROM users WHERE username = $data['username']")->fetch(PDO::FETCH_ASSOC);

        if (!$row){
            $error = 'no such user.';
        } else {

            $password_verify = password_verify($data['password'], $row['password']);
            if ($password_verify){

                    User::Login($row);

                    header('Location:');

            } else {
                $error = 'incorrect pass';
            }

        }

    } else {
        $error = 'enter your details.';
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55365924

复制
相关文章

相似问题

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