Problème lors de l’utilisation de password_verify

Résolu/Fermé
AdrienB1 - 10 août 2022 à 10:10
 AdrienB1 - 11 août 2022 à 14:30
//Code d’inscription
include 'config.php';
 
error_reporting(0);
 
session_start();
 
if (isset($_SESSION['username'])) {
    header("Location: index.php");
}
 
if (isset($_POST['submit'])) {
    $username = htmlspecialchars($_POST['username']);
    $email = htmlspecialchars($_POST['email']);
    $password = htmlspecialchars($_POST['password']);
    $hpassword = password_hash($password, PASSWORD_DEFAULT);
    $ip = $_SERVER['REMOTE_ADDR'];
     
    if ($_POST['password'] == $_POST['cpassword']) {
        $sql = "SELECT * FROM users WHERE email='$email'";
        $result = mysqli_query($conn, $sql);
        if (!$result->num_rows > 0) {
            $sql = "INSERT INTO users (username, email, password, ip)
                    VALUES ('$username', '$email', '$hpassword', '$ip')";
            $result = mysqli_query($conn, $sql);
            if ($result) {
                $erreur = 'Vous êtes désormais inscrit !';
                $username = "";
                $email = "";
                $_POST['password'] = "";
                $_POST['cpassword'] = "";
                header("Location: index.php");
            } else {
                $erreur = 'Un problème est survenu ...';
            }
        } else {
            $erreur = 'L\'email existe déjà !';
        }
         
    } else {
        $erreur = 'Les mots de passe ne correspondent pas';
    }
}






//Code de connexion, qui ne marche pas
include 'config.php';
 
session_start();
 
error_reporting(0);
 
if (isset($_SESSION['username'])) {
    header("Location: welcome.php");
}
 
if (isset($_POST['submit'])) {
    $email = htmlspecialchars($_POST['email']);
    $password = htmlspecialchars($_POST['password']);
 
    $sql = "SELECT * FROM users WHERE email=$email";
    $result = mysqli_query($conn, $sql);
 
    $sqlpass = "SELECT password FROM users WHERE email='$email'";
    $hpassword = mysqli_query($conn, $sqlpass);
    if (password_verify($password , $hpassword)) {
        if (password_verify($password, $hpassword)) {
            $row = mysqli_fetch_assoc($result);
            $_SESSION['username'] = $row['username'];
            $_SESSION['email'] = $row['email'];
            $_SESSION['rang'] = $row['rang'];
            header("Location: welcome.php");
        } else {
            $incorrect = "Email et/ou mot de passe incorrect(s)";
        }
    } else {
        $incorrect = "Email et/ou mot de passe incorrect(s)";
    }   
}

Bonjour,

Malgré m'être renseigné a plusieurs reprises sur Internet sur l'utilisation de password_verify, je ne comprends toujours pas son focntionnement, ou peut-être que les requêtes SQL ne sont pas bonnes.

Pouvez-vous m’aider ?


iPhone / Safari 15.6

3 réponses

jordane45 Messages postés 38048 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 mars 2024 4 618
10 août 2022 à 10:33

Bonjour,

oulaaaa...

Bon.

Déjà, pas besoin de faire deux requêtes

 $sql = "SELECT * FROM users WHERE email=$email";
    $result = mysqli_query($conn, $sql);
 
    $sqlpass = "SELECT password FROM users WHERE email='$email'";
    $hpassword = mysqli_query($conn, $sqlpass);

La première suffit.

Ensuite, il faut faire un fetch de ta requête pour pouvoir récupérer les informations stockées dans ta bdd.

Tu compares ensuite, via password_verify, le mot de passe envoyé par ton formulaire de connexion ( sans aucun traitement dessus ! ) avec le mot de passe (hashé) qui se trouve dans la bdd.


0

Merci pour votre réponse !

Je ne comprends pas comment utiliser la fonction fetch, malgré la documentation ...

Faut-il mettre une variable dedans ?

De plus, comment stocker dans une variable le mot de passe haché de la base de donnée ?

0
jordane45 Messages postés 38048 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 mars 2024 4 618
Modifié le 10 août 2022 à 17:35

Exemple

$sql = "SELECT * FROM users WHERE email='$email'";
$result = mysqli_query($conn, $sql);
  
// Fetch one and one row
$row = mysqli_fetch_row($result);

$pwd = $row['password']; // on récupère le champ password de la bdd 
0

D'accord super ça marche ! Merci à vous !

0