Vérification pseudo existant

Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - 15 déc. 2013 à 15:43
 torskint - 23 juil. 2015 à 12:13
Bonjour, je suis face à un problème vraiment VRAIMENT saoulant ! Ca fait des heures que j'essaie de faire comprendre à mon ordi que si un pseudo est déjà pris, il doit afficher "pseudo déjà pris" et dans le cas contraire "pseudo valide". Alors j'ai un formulaire sur une page qui envoie le pseudo à une autre page qui doit traiter tout ça. Voilà le code de la deuxième page :


<?php

try
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

$ps = $_POST['nom'];
$req = $bdd->query('SELECT pseudo FROM utilisateur WHERE pseudo=$ps');









if(isset($req))
{
echo "Le pseudo est pris par un autre membre";
}
if(!isset($req))
{
echo "Le pseudo n'est pas déjà pris par un autre membre.";
}



?>


Le formulaire envoie le pseudo sous le nom "nom". J'ai essayé je ne sais combien de méthodes différentes et aucune ne marche alors si quelqu'un trouvait le problème dans mon code, je lui en serait très reconnaissant !
Merci d'avance !
A voir également:

1 réponse

JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 15/12/2013 à 19:01
Salut,

Je commence avec un exemple :
$pseudo = 'parousky';
echo '$pseudo'; // Ceci affichera : $pseudo

echo "$pseudo"; // Ceci affichera : parousky

Entre simple quotes, PHP considère la chaîne comme étant purement du texte.
Entre double quotes, PHP analyse le contenu de la chaîne espérant trouver quelque chose a interpréter.

Donc puisque tu as utiliser un simple quotes, alors ta variable $ps n'est pas interprété comme étant le nom d'une variable, mais est plutôt considéré comme une chaîne de caractère.

Alors la solution est :
$req = $bdd->query("SELECT pseudo FROM utilisateur WHERE pseudo = '$ps'");
// Ou
$req = $bdd->query('SELECT pseudo FROM utilisateur WHERE pseudo = \'' . $ps . '\'');


Les deux méthodes sont déconseillé car passible d'une injection SQL, c'est possible d'utiliser des fonctions afin d'éviter cela, mais ... puisque tu utilises PDO, c'est vraiment du gâchis de ne pas utiliser les requêtes préparés !

Lorsqu'une requête doit recevoir des paramètres en entrés, on utilise les requêtes préparés afin d'éviter tout danger ...

Exemple d'une requête préparés rapide :
$req = $bdd->prepare('SELECT pseudo FROM utilisateur WHERE pseudo = :ps');
$req->execute(array(':ps' => $ps));


Le reste de ton code est faux, car la variable $req existe dans tout les cas, parce qu'elle retourne un résultat dans tout les cas.

Donc, il faut en premier temps récupérer le résultat, et normalement, puisque le pseudo est unique, alors on attend au plus 1 seul résultat.

Donc :
$result = $req->fetch();
if(!empty($result))
{
    echo "Le pseudo est pris par un autre membre"; 
} 
else 
{ 
    echo "Le pseudo n'est pas déjà pris par un autre membre."; 
} 



Mettez en résolu quand c'est résolu -.- ...
0
Dans le jeu jai vue une personne avec jn serpant mais sur internet il ne le mette pas donc si vous saver le pseudo dite le moi svp merci
0
parousky, a ta place je ferais un truc du genre:
<?php
//requêtes

if($req->rowCount()>0){
echo 'pseudo deja pris';
}
else {
echo 'pseudo valide';
}
?>
0