Bonsoir,

Je suis actuellement en train de créer un site (logique..).

Seulement, sur la page d'édition du profil, je bug un peu sur la vérification de l'e-mail dans la base de donnée afin de déterminer si un autre compte possède déjà cette adresse e-mail.

Voici mon code :

if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $userinfo['mail'])
        {
            $newmail = htmlspecialchars($_POST['newmail']);

            if(filter_var($newmail, FILTER_VALIDATE_EMAIL))
            {
                $mexist = $bdd->prepare('SELECT id FROM membres WHERE mail = ?');
                $mexist->execute(array($newmail));
                $mailexist = $mexist->fetch();

                if($mailexist['id'] == 0)
                {
                    $insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?");
                    $insertmail->execute(array($newmail, $_SESSION['id']));
                    unset($_SESSION['mail']);
                    $_SESSION['mail'] = $newmail;
                }
                else
                {
                    $erreurs[] = "Cette adresse e-mail est déjà utilisée.";
                }
            }
            else
            {
                $erreurs[] = "L'adresse e-mail n'a pas un format valide.";
            }
        }

Ce que je ne comprends pas, c'est que j'ai exactement le même code en haut au niveau de la lecture de la BDD, etc pour le pseudo et ce code pour le pseudo fonctionne. Alors pourquoi pas pour l'e-mail ?

Voici mon code pour les deux :

if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $userinfo['pseudo'])
        {
            $newpseudo = htmlspecialchars($_POST['newpseudo']);
            $longueurpseudo = strlen($_POST['newpseudo']);

            if($longueurpseudo >= 3)
            {
                if($longueurpseudo <= 25)
                {
                    $pexist = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
                    $pexist->execute(array($newpseudo));
                    $pseudoexist = $pexist->fetch();

                    if($pseudoexist['id'] == 0)
                    {
                        $insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?");
                        $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
                        unset($_SESSION['pseudo']);
                        $_SESSION['pseudo'] = $newpseudo;
                    }
                    else
                    {
                        $erreurs[] = "Ce pseudo est déjà utilisé.";
                    }

                }
                else
                {
                    $erreurs[] = "Le pseudo ne doit pas dépasser 25 caractères.";
                }
            }
            else
            {
                $erreurs[] = "Le pseudo doit faire minimum 3 caractères.";
            }

        }

        if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $userinfo['mail'])
        {
            $newmail = htmlspecialchars($_POST['newmail']);

            if(filter_var($newmail, FILTER_VALIDATE_EMAIL))
            {
                $mexist = $bdd->prepare('SELECT id FROM membres WHERE mail = ?');
                $mexist->execute(array($newmail));
                $mailexist = $mexist->fetch();

                if($mailexist['id'] == 0)
                {
                    $insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?");
                    $insertmail->execute(array($newmail, $_SESSION['id']));
                    unset($_SESSION['mail']);
                    $_SESSION['mail'] = $newmail;
                }
                else
                {
                    $erreurs[] = "Cette adresse e-mail est déjà utilisée.";
                }
            }
            else
            {
                $erreurs[] = "L'adresse e-mail n'a pas un format valide.";
            }
        }

Est-il possible que ce soit parce qu'il s'agit de deux conditions différents l'un à la suite de l'autre ?

Merci de votre aide,
Boris95098

4 réponses


Lartak
Réponse acceptée

Bonjour.
Si je comprends bien, que ce soit pour le pseudo ou le mot de passe, tu ne vérifies que pour l'utilisateur courant et non sur tous les utilisateurs, ce qui pourrait te poser des problèmes par la suite.
Si c'est pour faire ça, pour le pseudo par exemple, autant que tu définisses son pseudo dans la session quand tu le connecte, de cette manière, tu pourras faire la vérification en évitant de faire une requête SQL.
Ensuite, il est inutile de faire :

if (isset($_POST['password']) && !empty($_POST['password']))

Car juste :

if (!empty($_POST['password']))

Donne le même résultat, étant donné que empty() en plus de vérifier si la variable est vide, vérifie également si la variable est définie.

Détermine si une variable est considérée comme vide. Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE.

Huggy
Réponse acceptée

Bonjour,
la méthode fetch renvoie false si l' email n'existe pas, et renvoie un tableau s'il existe.
il faut donc remplacer

                if($mailexist['id'] == 0)

par

                if( !$mailexist )

quand tu dis que cela ne fonctionne pas tu peux être plus precis. il y a une erreur ?

Bonjour et tout d'abord, merci à vous pour vos réponses ! :)
Lartak, j'ai effectivement modifié le code comme tu me l'a suggéré et il s'avère que ça donne exactement la même chose, comme tu dis ! Merci ! Pour ce qui est des sessions pour le mot de passe, je l'ai ai mises également. Je n'étais pas sur si cela était sécurisé mais au final, quand c'est hashé, ça ne craint rien je penses :)

Huggy, merci de ta réponse ! C'était bien cela qui faisait buguer. Je ne sais pas pourquoi je m'attardais à savoir s'il me retournait 0 ou 1 mais en tout cas, ta solution a fonctionné et je t'en remercie !! :)

Quoi qu'il en soit, merci beaucoup à vous !!

Bonne journée,
Boris95098