sql >> データベース >  >> RDS >> Mysql

falseを返すパスワードハッシュ

    クエリをもう一度見てください:

    SELECT password FROM users WHERE email = :email
    

    列のパスワードを選択しています

    行をフェッチするときは、フィールドhashを使用しています

    $_SESSION['hash'] = $row1['hash'];
    

    あなたが思っているのとは異なり、スクリプトはまったく単純ではありません。同じレコードに対して3つのクエリを実行しているので、このアプローチを試してください

    $email = $_POST['email'];
    $pass = $_POST['password'];
    
    if($email === ''){
        $_SESSION['message1'] = 'Enter a valid email';
        header('Location: index.php');
        exit();
    }
    
    if($pass === ''){
        $_SESSION['message1'] = 'Enter a valid password';
        header('Location: index.php');
        exit();
    }
    
    $query = 'SELECT name, email, password 
              FROM users 
              WHERE email = :email LIMIT 1';
    
    
    $stmt = $con->prepare($query);
    $stmt->bindValue(':email', $email);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if(!$row){
        $_SESSION['message1'] = 'User does not exist';
        header('Location: index.php');
        exit();
    }
    
    //hashed password from Database
    $hash = $row['password'];
    
    if(password_verify($pass, $hash)){
        $_SESSION['hash'] = $row['password'];
        $_SESSION['name'] = $row['name'];
        $_SESSION['email'] = $row['email'];
        header('Location: profile.php');
    }else{
        $_SESSION['message1'] = 'Make sure email and password are correct';
        header('Location: index.php');
        exit();
    }
    



    1. MySQL文字列内の特定の文字の他のすべてのインスタンスを置き換える方法は?

    2. 警告:mysqli_error()は正確に1つのパラメーターを期待し、0が指定されています

    3. 複数の列を持つ単一の固定テーブルと柔軟な抽象テーブル

    4. 例を含むSQLJOINチュートリアル