Vérifier sir le pseudo n'est pas déjà prit

Ce topic a été résolu
AlexisParder

AlexisParder Le 29 octobre 2018 à 15:46 (Édité le 25 janvier 2019 à 17:54)

Bonjour voila mon problème mon espace membre est presque opérationnel il manque quelque petit truc mais mon problème majeurs se serait de faire une sécurité pour pas avoir deux personnes qui ont le même pseudos, en gros que sa affiche un message d'erreur si la personne qui veut s'inscrire rentre un pseudo déjà enregistré dans la base de données Merci de votre aide et bonne journée.
PrimFX

PrimFX Le 29 octobre 2018 à 17:09 (Édité le 29 octobre 2018 à 17:38)

Ok ! Dans ce cas voici le code que je te propose :
<?php
// On suppose que $pseudo contient le pseudo du nouvel inscrit sécurisé (avec htmlspecialchars, strip_tags, etc.) et $bdd la connexion PDO à ta base de données
$pseudoDejaPris = $bdd->prepare('SELECT 1 FROM membres WHERE pseudo = ?');
$pseudoDejaPris->execute(array($pseudo));
$pseudoDejaPris = $pseudoDejaPris->fetchColumn(); // Ici, soit le pseudo est déjà pris et $pseudoDejaPris contient 1 (du "SELECT 1"), soit il est libre et $pseudoDejaPris contient false
// Il n'y a donc plus qu'à tester la variable et afficher une erreur si le pseudo est déjà pris
if (!$pseudoDejaPris) {
   // On continue l'inscription
} else {
   $erreur = "Ce pseudo est déjà utilisé";
}

En espérant que ça puisse t'aider 😉
Comme dit, n'hésite pas à envoyer ton code d'inscription (même une fois le code ci-dessus ajouté) si tu rencontres un soucis, histoire d'avoir un contexte autour du code que je t'ai ici proposé !
Meilleure réponse
PrimFX

PrimFX Le 29 octobre 2018 à 16:22

Bonjour !
Aurais-tu une partie du code à nous passer histoire de pouvoir me nous situer ? Ou au moins un screenshot de l'architecture de la table des utilisateurs de ta base de données, histoire de pouvoir te proposer une requête correspondante 😉
L'idée serait simplement de récupérer dans ta base de données un membre avec le pseudo que le nouvel utilisateur a déjà indiqué -> s'il y a un résultat, c'est que le pseudo est déjà pris, sinon, il est libre 😀
AlexisParder

AlexisParder Le 29 octobre 2018 à 17:02

Le code c'est exactement le même que les tutos espace_membre + se souvenir de moi + confirmation par mail.
Et voici la structure de la base de données :


PrimFX

PrimFX Le 29 octobre 2018 à 17:09 (Édité le 29 octobre 2018 à 17:38)

Ok ! Dans ce cas voici le code que je te propose :
<?php
// On suppose que $pseudo contient le pseudo du nouvel inscrit sécurisé (avec htmlspecialchars, strip_tags, etc.) et $bdd la connexion PDO à ta base de données
$pseudoDejaPris = $bdd->prepare('SELECT 1 FROM membres WHERE pseudo = ?');
$pseudoDejaPris->execute(array($pseudo));
$pseudoDejaPris = $pseudoDejaPris->fetchColumn(); // Ici, soit le pseudo est déjà pris et $pseudoDejaPris contient 1 (du "SELECT 1"), soit il est libre et $pseudoDejaPris contient false
// Il n'y a donc plus qu'à tester la variable et afficher une erreur si le pseudo est déjà pris
if (!$pseudoDejaPris) {
   // On continue l'inscription
} else {
   $erreur = "Ce pseudo est déjà utilisé";
}

En espérant que ça puisse t'aider 😉
Comme dit, n'hésite pas à envoyer ton code d'inscription (même une fois le code ci-dessus ajouté) si tu rencontres un soucis, histoire d'avoir un contexte autour du code que je t'ai ici proposé !
Meilleure réponse
AlexisParder

AlexisParder Le 29 octobre 2018 à 17:19

Merci mais je le met a quel endroit le code :
<?php
$bdd = new PDO('mysql:host=localhost;dbname=id7558902_espace_membre', 'id7558902_apollon4', 'apollon16');
//$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 255) {
         if($mail == $mail2) {
            if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
               $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
               $reqmail->execute(array($mail));
               $mailexist = $reqmail->rowCount();
               if($mailexist == 0) {
                  if($mdp == $mdp2) {
                     $longueurKey = 15;
                     $key = "";
                     for($i=1;$i<$longueurKey;$i++) {
                        $key .= mt_rand(0,9);
                     }
                     $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey) VALUES(?, ?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp, $key));
                     $header="MIME-Version: 1.0\r\n";
                     $header.='From:"apollon4"<maCandi.apollon4@outlook.fr>'."\n";
                     $header.='Content-Type:text/html; charset="uft-8"'."\n";
                     $header.='Content-Transfer-Encoding: 8bit';
                     $message='
                     <html>
                        <body>
                           <div align="center">
                              <a href="https://apollon4-fr.000webhostapp.com/comptes/confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">Confirmez votre compte</a>
                           </div>
                        </body>
                     </html>
                     ';
                     mail($mail, "Confirmation de compte", $message, $header);
                     $valide ="Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>";
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>

AlexisParder

AlexisParder Le 29 octobre 2018 à 17:27

il n'y a qu'un probleme :
$pseudoDejaPris = $bdd->prepare('SELECT 1 FROM membres WHERE pseudo = ?');
                     $pseudoDejaPris->execute(array($pseudo));
                     $pseudoDejaPris = $pseudoExiste->fetchColumn();
la variable $pseudoExiste n'est pas définie.
PrimFX

PrimFX Le 29 octobre 2018 à 17:40

Oups oui en effet 😅 J'avais utilisé ce nom de variable au début pour mon exemple mais j'ai décidé de changer entre temps... J'ai update mon message précédent, la variable qui doit être utilisée est toujours la même : $pseudoDejaPris.
Pour le placement dans le code, tu peux faire ça dans n'importe quelle autre condition imbriquée, par exemple après la vérification de l'existence du mail (tu remarqueras d'ailleurs que le principe est exactement le même 😉 ).
AlexisParder

AlexisParder Le 29 octobre 2018 à 17:45

c'est se que j'ai fait merci beaucoup
AlexisParder

AlexisParder Le 29 octobre 2018 à 17:49

Sa fonctionne merci x 100000000 😀
PrimFX

PrimFX Le 29 octobre 2018 à 17:58

De rien ! N'hésite pas à passer le topic en "Résolu" 😉
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte