Disponibilité du pseudo PHP

Résolu/Fermé
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 - 10 mars 2012 à 22:51
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 - 11 mars 2012 à 00:18
Bonjour,

J'ai créé un formulaire d'inscription, et je voudrais vérifier si le pseudo que le visiteur rentre est déja pris ou non. J'ai créer ce code mais que je rentre un bon ou un mauvais pseudo, il y a toujours ce même problème, la phrase : "Ce pseudo n'est pas disponible".
Voici mon code sur ma page de traitement :

<?php
$pseudo = $_POST['pseudo'];
$dn =(mysql_query('SELECT pseudo FROM formulaire WHERE pseudo="'.$pseudo.'"'));
if($dn>0)
{
$erreur=3;
include('page2.php');
exit();
}
?>

Et sur la page 2:

<?php
if (isset($erreur)) {
if ($erreur == 3) {
echo '<span class="erreur">Ce pseudo n\'est pas disponible.</span>';
}
}
?>

Mais le problème viens du premier code sur ma page de traitement puisque le phrase s'affiche.
A voir également:

3 réponses

Bonsoir (ou re :D),
Si on reprend ce que tu avais déjà fait sur le sujet précédent, tu auras ça logiquement :
<?php  
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;  
$bdd = new PDO('mysql:host=localhost;dbname=sitesql', 'root', '', $pdo_options);  

if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])) {  
 extract($_POST);  

 $sql = "SELECT * FROM formulaire WHERE pseudo='".$pseudo."'";  
 $req = $bdd->query($sql);  
 $req->setFetchMode(PDO::FETCH_OBJ);  

 if ($ligne = $req->fetch()){  
  // Le pseudo existe déjà  
  $erreur=3;  
  include('page2.php');  
  exit;  
 }  
 else {  
  // Enregistrement du pseudo dans la base de données  
 }  
}  
else {  
 // Manque le pseudo ou le mot de passe ou les deux  
 $erreur=2;  
 include('page2.php');  
 exit;  
}  
$req->closeCursor();  
?>


Je te laisse compléter la partie : Enregistrement du pseudo dans la base de données et tout ça en PDO, pas avec des mysql_query.

Il est tout à fait possible d'utiliser la syntaxe suivante pour la requête select :
$sql = "SELECT count(*) FROM formulaire WHERE pseudo='".$pseudo."'";  

comme l'a fait l3ajib.
1
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
11 mars 2012 à 00:00
(Re)Bonsoir Adenora, encore merci d'avoir répondue :)
Le problème c'est que je suis sur un autre formulaire, le formulaire d'inscription ette fois ci, qui n'est pas sur la même page.
J'ai donc repris ton code à partir de : $sql = "SELECT * FROM formulaire WHERE pseudo='".$pseudo."'";
tout en ouvrant l'accès à la base de bonné juste avant, mais quand je rentre un pseudo déja présent dans ma base de donnée, la requete est quand même accepté, et fait comme si il n'y avait pas d'erreur.
0
Si tu veux seulement la partie qui t'intéresse, je te conseille ce code (en gros, j'ai réduit le code que j'avais fait) :
<?php 
$pseudo = $_POST['pseudo'];  
$sql = "SELECT * FROM formulaire WHERE pseudo='".$pseudo."'";   
$req = $bdd->query($sql);   
$req->setFetchMode(PDO::FETCH_OBJ);   

 if ($ligne = $req->fetch()){   
         // Le pseudo existe déjà   
        $erreur=3;   
        include('page2.php');   
       exit;   
 }   
 else {   
       // Enregistrement du pseudo dans la base de données   
 }  
?>
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
11 mars 2012 à 00:18
Encore une fois, mille merci Adenora, tout fonctionne parfaitement :)
Tes réponses sont efficaces de matin comme de nuit apparament^^
Peut être à bientot pour un nouveau problème ^^
0
Bonsoir,
$dn =(mysql_query('SELECT pseudo FROM formulaire WHERE pseudo="'.$pseudo.'"')); 



1)il y a des parenthèses en trop.
$dn =mysql_query('SELECT pseudo FROM formulaire WHERE pseudo="'.$pseudo.'"'); 



2)$dn n'est pas un résultat mais une ressource(avec un pointeur) qu'il faut traiter pour obtenir un résultat.
Vous seriez arrivé à cette conclusion en affichant avec print_r ou echo votre variable $dn.

Voici comment faire:

$resultat=mysql_fetch_row($dn); 

print_r($resultat);/* vous montre le tableau de résultat. 
La variable $resultat vous renvoie un tableau de résultats. 
Il vous faudra ensuite tester si elle est vide*/
if( !empty($resultat['pseudo'])){ 
// le pseudo existe déjà  

}else{ 

// le pseudo n'existe pas 
}


Si vous voulez compter le nombre de valeurs avec $pseudo il vous faut utiliser la fonction SQL count:
comme ceci:
$requete=mysql_query("SELECT COUNT(*) FROM formulaire WHERE pseudo='".$pseudo."'"); 
// renvoi le nombre de lignes correspondant à la clause WHERE 
// traiter la ressource pour obtenir le résultat 

$resultat=mysql_fetch_row($requete); 
print_r($resultat); 
if($resultat[0]>0){ 

// pseudo existe 
}else{ 
// pseudo n'existe pas 

} 
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
10 mars 2012 à 23:41
Bonsoir Outini, merci d'avoir répondue aussi vite.
J'ai fait tout ce que tu m'as conseillé mais malheureusement, quand je rentre un pseudo déja existant, il ne le prend pas en charge l'erreur, et continue comme si le pseudo n'existait pas.
0
l3ajib Messages postés 178 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 12 mai 2012 87
10 mars 2012 à 23:09
Bonsoir;

Premièrement il faut se connecter sur la BDD, utilise la PDO de php

$dbh=new PDO('mysql:host=HostDelaBDD;dbname=NomDeLaBDD','UserDeLaBDD','');


Deuxièmement et pour la requête SELECT pseudo... ne complique pas les choses voici une façon de faire:

$c=0;
$sql="SELECT count(*) FROM formulaire WHERE pseudo='$pseudo'";
$c=(mysql_query($sql));

if ($c==0) // login inexistant
if ($c==1) // login existe déjà
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
10 mars 2012 à 23:42
Bonsoir l3ajib, merci d'avoir répondue aussi vite.
J'ai fait tout ce que tu m'as conseillé mais malheureusement, quand je rentre un pseudo déja existant, il ne le prend pas en charge l'erreur, et continue comme si le pseudo n'existait pas.
0