Résolu [PHP] Vérifier mot de passe existant

Statut
N'est pas ouverte pour d'autres réponses.

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Bonsoir,

J'essaie de faire une page de modification de mot de passe en PHP, or je bloque sur un truc assez con que je ne comprends pas.

Avant de pouvoir faire la requête SQL qui UPDATE le mot de passe, je vérifie déjà ceci :

  1. Si un/des champs ne sont pas vides
  2. Si le nouveau mot de passe correspond avec la confirmation (voir image ci-dessous)
  3. Si le mot de passe existant est correct
Voici à quoi ressemble le formulaire :

Capture du 2018-01-06 03-34-12.png


Le problème étant que quand je valide le formulaire, celui-ci me retourne "Wrong password" qui est la dernière vérification avant de faire la requête SQL permettant de changer le mot de passe.

Dans la BDD, le mot de passe est chiffré en SHA1.

J'ai donc décidé de faire un "var_dump" de "currentPassword" ainsi que de la fonction qui vérifie le mot de passe actuel, voici le résultat :

Capture du 2018-01-06 03-37-24.png


On peut voir que les mots de passes sont bien les mêmes, mais je me demande pourquoi celui ci sort 3 fois alors que je vérifie seulement 2 variables? (d'ailleurs je pense que le problème vient de la).

Voici mon PHP :

PHP:
function verify_password($currentPassword)
{
    global $db;
    $a = [
        'current'  => sha1($currentPassword),
        'user_id'  => $_SESSION['logged']
    ];
    $sql = "SELECT password FROM users WHERE password = :current AND id = :user_id";
    $req = $db->prepare($sql);
    $req->execute($a);
    $verify = $req->fetchAll();
    return $verify;
}

if(isset($_POST['submit'])){
    $currentPassword = htmlspecialchars(trim($_POST['current']));
    $newPassword = htmlspecialchars(trim($_POST['password']));
    $repeatPassword = htmlspecialchars(trim($_POST['repeat']));

    if(empty($currentPassword) || empty($newPassword) || empty($repeatPassword)){
        echo "<p>Not all fields have been filled !</p>";
    }

    if($newPassword != $repeatPassword){
        echo "<p>Password don't match !</p>";
    }else{
        $verify = verify_password($currentPassword);
        if($verify != sha1($currentPassword)){
            var_dump($verify);
            var_dump(sha1($currentPassword));
            echo "<p>Wrong current password !</p>";
        }else{
           
$sql = "UPDATE users SET password = :password WHERE id = :user_id";
            $req = $db->prepare($sql);
            $req->execute(array(
                'password'  => sha1($newPassword),
                'user_id'    => $_SESSION['logged']
            ));
            echo "<p>Success</p>";
        }
    }
}

Merci d'avance pour votre aide !
 
Dernière édition:
Statut
N'est pas ouverte pour d'autres réponses.
Haut