Disponibilité du pseudo PHP

Résolu
shoub-tcy Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   -  
shoub-tcy Messages postés 169 Date d'inscription   Statut Membre Dernière intervention   -
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

Utilisateur anonyme
 
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   Statut Membre Dernière intervention   2
 
(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
Utilisateur anonyme
 
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   Statut Membre Dernière intervention   2
 
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
Outini
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention   87
 
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   Statut Membre Dernière intervention   2
 
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