#1 Le 05/11/2008, à 14:17
- MiNiShOoTeR
[PHP] Problème de vérification dans une BDD
Bonjour à tous,
J'ai un petit soucis en PHP, je suis en train de créer un système de membre assez basique.
Le petit soucis vient du fait que lors de l'inscription, j'aimerais vérifier si le pseudo demander n'est pas déjà utiliser, je vais donc vérifier dans la BDD, voila donc le code que j'utilise :
<?php
//Je définis mes variables
$pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];
$email = $_POST['email'];
$date = date('d/m/Y');
//Connexion à la BDD
mysql_connect("localhost","*********","*******");
mysql_select_db("*********");
//J'extrais des infos de la BDD
$membre = mysql_query("SELECT * FROM membre WHERE pseudo='.$pseudo.'");
mysql_close ();
//Je vérifie que les infos sont présentes et donc mes variables non nuls.
if ($pseudo==NULL OR $mdp==NULL OR $email==NULL)
{
echo " Il manque des informations, veuillez completer l'ensemble des champs s'il vous plait!<br/><br/>
Veuillez retourner à la page précédente en <a href=\"membre1.php\">cliquant ici</a>" ;
}
//Je vérifie que le pseudo n'existe pas dans la BDD
elseif ($membre!=NULL)
{
echo "Ce pseudo et déjà utilisé!<br/><br/>
Veuillez retourner à la page précédente en <a href=\"membre1.php\">cliquant ici</a>";
}
//Après les deux vérifications, j'inscris le nouveau membre
else
{
mysql_connect("localhost", "*********", "********");
mysql_select_db("********");
mysql_query("INSERT INTO membre VALUES('', '$pseudo', '$mdp', '$email', '$date')");
mysql_close ();
echo "Inscription effectuée avec succès!";
}
?>
Je pense que l'erreur vient d'une des lignes suivantes :
$membre = mysql_query("SELECT * FROM membre WHERE pseudo='.$pseudo.'");
elseif ($membre!=NULL)
J'ai beaucoup recherché sur Google, tombé sur pas mal de liens, essayé pas mal de chose mais j'ai toujours un soucis. Dans le cas de ce code là, il me renvoie toujours (peu importe le pseudo tapé) que le pseudo est déjà utilisé.
Merci d'avance pour votre aide!
Dernière modification par MiNiShOoTeR (Le 05/11/2008, à 14:59)
Hors ligne
#2 Le 05/11/2008, à 14:21
- rniamo
Re : [PHP] Problème de vérification dans une BDD
tu ne récupères pas le résultat de ta requête là, il te manque une fonction (regarde chez developpez.com je ne m'en rappelle plus).
edit : mysql_fetch_array()
Dernière modification par rniamo (Le 05/11/2008, à 14:22)
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#3 Le 05/11/2008, à 15:19
- ...::ShAdY::...
Re : [PHP] Problème de vérification dans une BDD
Exact, il te manque une boucle avec "mysql_fetch_array()"
du style :
$membre = mysql_query("SELECT * FROM membre WHERE pseudo='.$pseudo.'");
while ($reponse = mysql_fetch_array($membre) )
Hors ligne
#4 Le 05/11/2008, à 16:32
- MiNiShOoTeR
Re : [PHP] Problème de vérification dans une BDD
Ok merci pour vos réponses, j'essaie tout de suite.
Hors ligne
#5 Le 05/11/2008, à 21:47
- Dark-Sham
Re : [PHP] Problème de vérification dans une BDD
Utilise if(empty($mdp)) plutôt que if($mdp == NULL)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#6 Le 05/11/2008, à 22:35
- MiNiShOoTeR
Re : [PHP] Problème de vérification dans une BDD
Utilise if(empty($mdp)) plutôt que if($mdp == NULL)
Merci du conseil, c'est fait!
Par contre, j'ai fait une boucle avec :
while ($reponse = mysql_fetch_array($membre))
Mais le problème persiste, sa ne me renvoie jamais que le pseudo est déjà utilisé, voilà le nouveau code complet (j'ai détaillé toutes mes étapes pour que vous puissez lire plus facilement) :
<?php
//Je définis mes variables
$pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];
$email = $_POST['email'];
$date = date('d/m/Y');
//Connexion à la BDD
mysql_connect("localhost","****","*****");
mysql_select_db("*****");
//J'extrais des infos de la BDD
$membre = mysql_query("SELECT * FROM membre WHERE pseudo='.$pseudo.'");
//Je crée une boucle et met les infos de la BDD dans une variable $reponse
while ($reponse = mysql_fetch_array($membre));
{
//Je vérifie que les infos sont présentes et donc mes variables non nuls.
if (empty($pseudo) OR empty($mdp) OR empty($email))
{
echo " Il manque des informations, veuillez completer l'ensemble des champs s'il vous plait!<br/><br/>
Veuillez retourner à la page précédente en <a href=\"membre1.php\">cliquant ici</a>" ;
}
//Je vérifie que le pseudo n'existe pas dans la BDD
elseif ($reponse!=NULL)
{
echo "Ce pseudo et déjà utilisé!<br/><br/>
Veuillez retourner à la page précédente en <a href=\"membre1.php\">cliquant ici</a>";
}
//Après les deux vérifications, j'inscris le nouveau membre
else
{
mysql_query("INSERT INTO membre VALUES('', '$pseudo', '$mdp', '$email', '$date')");
echo "Inscription effectuée avec succès!";
}
//Je referme la boucle
}
//Déconnexion de la BDD
mysql_close ();
?>
Merci de votre aide!
Dernière modification par MiNiShOoTeR (Le 05/11/2008, à 22:35)
Hors ligne
#7 Le 06/11/2008, à 19:25
- zonyxt
Re : [PHP] Problème de vérification dans une BDD
Moi pour réaliser ce genre de chose j'ai utilisé ceci :
//recupération du login
$testlogin=$_GET['login'];
//requete SQL
$query="SELECT count(*) FROM membre WHERE login ='".$testlogin."'";
$result= mysql_query($query);
if (!$result){
echo 'impossible de faire la requete'. mysql_error();
exit;
}
$res=mysql_fetch_row($result);
//Si le nombre de pseudo correspondant est zéro le login est libre
if($res[0]=="0")
echo "true";
//Sinon le login est déjà pris
else
echo "false";
Dernière modification par zonyxt (Le 06/11/2008, à 19:25)
Hors ligne
#8 Le 07/11/2008, à 11:49
- Ultim4T0m
Re : [PHP] Problème de vérification dans une BDD
Bonjour,
Pour commencer, ton code SQL n'est pas bon.
$membre = mysql_query("SELECT * FROM membre WHERE pseudo='.$pseudo.'");
Ceci serait mieux
$membre = mysql_query("SELECT * FROM membre WHERE pseudo='".$pseudo."'");
Ensuite, le plus simple serait par exemple de faire
if(mysql_num_rows($membre)==1) {
// Le compte existe déjà
}
Mais cette fonction n'est pas du tout optimisée.
Le mieux à faire est quelque chose du style
$membre = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS nbMembres FROM membre WHERE pseudo='".$pseudo."'"));
if($membre['nbMembres']==1) {
// Le compte existe déjà
}
Et pense à utiliser la fonction mysql_real_escape_string() sur les données que tu récupères en POST et que tu passes dans une requête SQL
Dell Inspiron 6400 ~ Ubuntu Intrepid Ibex
Hors ligne
#9 Le 07/11/2008, à 15:36
- Dark-Sham
Re : [PHP] Problème de vérification dans une BDD
Au passage, pendant ta boucle, il faut que tu indiques quel champ de ta table tu veux utiliser, exemple :
<?php
$requete = mysql_query('SELECT id,nom,mdp FROM membres WHERE id="'.$membre_id.'"');
while($donnees = mysql_fetch_array($requete))
{
echo $donnees['id']; // Affiche le champ id
echo $donnees['nom']; // Affiche le champ nom
// etc, etc
}
?>
Dernière modification par Dark-Sham (Le 07/11/2008, à 15:37)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne