Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: apollon4, PrimFX
Ce topic a été résolu
Auteur Sujet: Vérifier sir le pseudo n'est pas déjà prit

apollon4

Messages: 9

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
Membre Premium

Messages: 133

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é !
Publicité

PrimFX
Membre Premium

Messages: 133

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 😀

apollon4

Messages: 9

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
Membre Premium

Messages: 133

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é !

apollon4

Messages: 9

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 !";
   }
}
?>


apollon4

Messages: 9

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
Membre Premium

Messages: 133

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 😉 ).

apollon4

Messages: 9

c'est se que j'ai fait merci beaucoup

apollon4

Messages: 9

Sa fonctionne merci x 100000000 😀

PrimFX
Membre Premium

Messages: 133

De rien ! N'hésite pas à passer le topic en "Résolu" 😉


Vous devez vous connecter ou créer un compte pour poster une réponse