Inscription - vérification des pseudos

Petit nouveau ! | 3 Messages

19 juil. 2011, 23:33

Bonjour!
J'ai commencé le PHP/SQL il y a 2 jours seulement. J'ai tenté de créer un script d'inscription avec quelques sécurités (vérification du mail, des champs vides,...). Mon soucis c'est que maintenant je souhaiterais vérifier si le pseudo entré par les gens est déjà existant dans la bdd ou pas, sinon: erreur et pas d'insertion.

Je vois pas vraiment comment faire ça, alors je vous partage mon code, en espérant obtenir un petit coup de pouce:
<?php
//connexion à la bdd
include("connexionbdd.php");
//fin de connexion à la bdd 
$drap = 0;
$_POST['pseudo'] = trim($_POST['pseudo']);
if (empty($_POST['pseudo'])) {
echo "<style>body{background-color:#FC3;}</style>Certains champs n'ont pas été remplis!<br>Veuillez <a href='formulaireinsc.php'>réessayer</a>.";
}
elseif (empty($_POST['mdp'])) {
echo "<style> body{background-color:#FC3;}</style>Certains champs n'ont pas été remplis!<br>Veuillez <a href='formulaireinsc.php'>réessayer</a>.";
}
elseif (empty($_POST['email'])) {
echo "<style>body{background-color:#FC3;}</style>Certains champs n'ont pas été remplis!<br>Veuillez <a href='formulaireinsc.php'>réessayer</a>.";
}

//anti doublon (not working)
// $listedespseudos = mysql_query("SELECT pseudo FROM membres");
// $pseudos = mysql_fetch_assoc($listedespseudos);
// elseif (ereg($_POST['pseudo'],$pseudos['pseudo'])) {
// echo "Pseudo déjà utilisé!";
// }
//fin anti doublon

//Sinon si TOUT (le mail aussi) EST OK, on exécute:
elseif (filter_var(($_POST['email']), FILTER_VALIDATE_EMAIL)) {
$drap = 1;
mysql_select_db("apprentissage", $con);
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$mdp = mysql_real_escape_string($_POST['mdp']);
$email = mysql_real_escape_string($_POST['email']);
//retrait des espaces
include("antiespaces.php");
//fin retrait des espaces
mysql_query("INSERT INTO membres (pseudo,mdp,email) VALUES ('$pseudo', '$mdp', '$email')");
echo "<style>body{background-color:#FC3;}</style>Vous êtes bien inscrit! <br><br>Bienvenue <b>".$pseudo."</b>!<br><br>Revenir à l'<a href='formulaireinsc.php'>accueil</a>.";
}
elseif ($drap == 0) {
echo "<style>body{background-color:#FC3;}</style>L'adresse mail est invalide! <br>Veuillez <a href='formulaireinsc.php'>réessayer</a>.";
}

//on ferme la connexion à la bdd
mysql_close($con);
?>
Vous pouvez remarquer la partie anti doublon insérée en commentaire qui ne fonctionnait pas :(

Merci d'avance :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2011, 23:45

Salut,

C'est parce que tu ne connais pas la clause where de SQL.
$sql='
Select count(pseudo) as nbpseudo from membres where pseudo=\''.mysql_real_escape_string($_POST['pseudo']).'\'';

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

19 juil. 2011, 23:51

Et comment je fais la vérification?

Le code qui traduirait:
reprends tous les pseudos (where?)
si $POST_PSEUDO est présent dans la table
...

C'est le "est présent dans" qui me dérange...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juil. 2011, 10:07

Justement c'est ca qui est interressant si tu recherche le pseudo exact dans la table tu aura ou pas de reponse ;)

Le count permet de compter le nombre de tulles que l'on trouve. Donc avec ma requete tu va avoir le nombre de fois le pseudo du nouveau membre se trouve dans la table membres. Si la reponse est zero c'est bon sinon, faut changer de lot de passe ;)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

20 juil. 2011, 13:15

$sql='
Select count(pseudo) as nbpseudo from membres where pseudo=\''.mysql_real_escape_string($_POST['pseudo']).'\'';
Ok donc j'entre ça tel quel ou je dois modifier quelque chose? Parce que le nbpseudo me semble étrange :P

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juil. 2011, 14:23

Le as sert a donner un alias (autre nom) a une colonne, lancera permet de nommer le resultat du count et l'utiliser plus simplement apres avec php.
Essai la requete avec phpmyadmin (sans le mysql_real_escape_string). Pur voir le resultat ;)
Coté php
$r = mysql_query($sql);
$data = mysql_fetch_assoc($r);
le nombre de membre ayant le meme pseudo est dans $data['nbpseudo'], si === 0 c'est bon sinon faut changer ;)

@+
Il en faut peu pour être heureux ......