Bonjour,

Je suis sur le tutoriel Espace utilisateur en PHP et en plus de vérifier si les mots de passe sont identiques, je souhaite aussi qu'ils fassent au minimum 8 caractères alors j'ajoute à la condition:

strlen($_POST['password']) < 8

de cette façon:

    function modifMdp(){
        if (!empty($_POST)){
            if ($_POST['password'] != $_POST['password_confirm'] || strlen($_POST['password']) < 8){
                $_SESSION['flash3'] = "Les mots de passe doivent être identiques et doivent comporter au moins 8 caractères !";
            }else{
                $user_id = $_SESSION['auth']->id;
                $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
                require './CONTROLLER/config.php';
                $pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]);
                $_SESSION['flash4'] = "Votre mot de passe a bien été modifié !";
            }
        }
    }

mais cela ne teste que si les mots de passe sont différents. Je vous remercie de votre aide.

3 réponses


Russandol
Réponse acceptée

Bonsoir,

Tout d'abord pour que le mot de passe fasse au minimum 8 caractères je pense qu'il est préférable d'utiliser '<=' au lieu du '<'.
Ensuite, pouvez-vous nous dire avec quelles valeurs pour password et password_confirm avez-vous essayé ?

Lartak
Réponse acceptée

Bonsoir.
Ta condition fonctionne très bien, puisque pour y entrer dedans, il faut soit que les valeurs des champs password et password_confirm ne soient pas identiques OU que la valeur du champ password aient une taille inférieure à 8.
C'est plutôt la définition de ta condition qui est incorrecte, si tu veux vérifier si les valeurs des champs
password et password_confirm
ne sont pas identiques et que la taille de la valeur du champ password soit inférieur à 8, il te faut remplacer || par &&.
Par contre, tu aura un problème avec ce genre de double condition, car si la première des condition est respéctéé mais pas la seconde, se sera le else qui sera prit en compte.
Je te recommanderait donc de faire plutôt quelque chose comme :

if ($_POST['password'] != $_POST['password_confirm'] || strlen($_POST['password']) < 8) {
    if ($_POST['password'] != $_POST['password_confirm'] && strlen($_POST['password']) < 8) {
        $_SESSION['flash3'] = "Les mots de passe doivent être identiques et doivent comporter au moins 8 caractères !";
    } else if (strlen($_POST['password']) < 8) {
        $_SESSION['flash3'] = "Le mots de passe doit comporter au moins 8 caractères !";
    } else {
        $_SESSION['flash3'] = "Les mots de passe doivent être identiques !";
    }
} else {
    $user_id = $_SESSION['auth']->id;
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
    require './CONTROLLER/config.php';
    $pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]);
    $_SESSION['flash4'] = "Votre mot de passe a bien été modifié !";
}

De cette manière, tu couvres tous les cas.

pour que le mot de passe fasse au minimum 8 caractères je pense qu'il est préférable d'utiliser '<=' au lieu du '<'

C'est incorrect, puisqu'il veut vérifier si le mot de passe saisie fait moins de 8 caractères.

barpoi78
Auteur

Merci les gars je vais regarder quand j'aurais un moment.