Version complète: sur le forum Webmaster Hub : Comment exploiter le résultat d'une requête
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
Bourinho
Bonjour à tous,

Dans ma quête d'informations pour créer mon site web, il y a une étape où je ne trouve pas mon bonheur...

Voilà, maintenant, j'arrive a me connecter à ma base de donnée IMSTP2.gif

J'arrive même à faire des requêtes SQL IMSTP2.gif

Le truc, c'est que j'arrive pas trop à exploiter le résultat de cette requête wacko.gif

Voilà ce que j'ai codé : (vous allez tout de suite comprendre que je m'adresse aux pros du SQL qui en font au moins depuis....une semaine laugh.gif )

CODE
$Pseudo=$_POST['pseudo'];
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = '.$Pseudo);
while ($donnees = mysql_fetch_array($reponse))
{
   ce que je veux faire...faut pas être trop curieux!!!!
}


Ce qui m'embête, c'est que lorsque le résultat de la requête est vide (là, je pense que j'utilise pas forcément le terme adéquat pour les puristes...), EasyPHP me renvoit la phrase suivante :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\monsite\inscription.php on line 19

Admettez que c'est pas forcément le truc le plus joli qu'on peut trouver pour décorer un site web laugh.gif

J'espère avoir été clair...

Par avance, merci!
ludo88
je te conseille ca :
CODE
$Pseudo=$_POST['pseudo'];
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = '.$Pseudo);
if($reponse){
while ($donnees = mysql_fetch_array($reponse))
{
  ce que je veux faire...faut pas être trop curieux!!!!
}
}


ca devrait etre mieux et easyphp ne devrait plus rien dire

Ludo
Bourinho
4min pour une réponse qui fonctionne...

C'est quand même mieux que les 13 minutes de la dernière fois!!! laugh.gif

Que dire à part : MERCI LE HUB!!!

et bien sur, merci ludo88!!

PS : Pour comprendre quand même ce qui se passe...le if($reponse)...c'est pas un peu comme un isset pour le resultat d'une requete???
NorSeb
Bonjour,

Un extrait de http://fr.php.net/manual/fr/function.mysql-query.php :
CITATION
Pour les requêtes du type SELECT, SHOW, DESCRIBE ou EXPLAIN, mysql_query() retournera une ressource en cas de succès, ou FALSE en cas d'erreur.

Pour les autres types de requêtes, UPDATE, DELETE, DROP, etc., mysql_query() retourne TRUE en cas de succès ou FALSE en cas d'erreur.

En bref, si ta requète est "fausse", au sens SQL, mysql_query() retournera une valeur FALSE.

Tu peux aussi tester le nombre d'enregistrements retournés par une requete de type SELECT avec la fonction mysql_num_rows() (je te laisse la découvrir wink.gif )
captain_torche
le if($quelquechose), va vérifier la valeur de la variable en question.
Si la valeur est assimilable à un false (0, '{chaîne vide}', NULL, false), la condition ne sera pas vérifiée.
Dans le cas contraire, elle sera vérifiée.
ludo88
désolé j'avais meme aps pris le temps d'expliquer , ca m'avait paru un peu facile ... tongue.gif
Mais tu as eu les explications en à peine plus de temps ....

Le Hub c'est quand meme bien ... esperons que ca restera tout le temps comme ca et que ca changera pas comme beaucoup d'autres forums ... enfin ca fait deja quelques années que c'est bien, il ya pas de raison pour que la qualité se déteriore...

Ludo
Bourinho
Ludo, ta réponse était nickel mais je souhaitais juste un complément d'information pour ne pas rester ignard toute ma vie sans comprendre ce que je fais... ce qui ressemblerait un peu à du suicide sur le web.

Car qui dit applique sans rien capter, dit possibilité de laisser des failles. Attention, je ne dis pas que ta solution aurait pu être dangereuse (car j'ai confiance en les utilisateurs de ce forum) mais la compréhension me semble nécessaire pour la programmation (oh punaise, ça rime!!!)

Et comme disait un des profs de maths que j'ai du endurer : "Sciences sans conscience n'est que ruine de l'âme"...Je vous laisse méditer whistling.gif
ludo88
pas de problème, je me vexe pas pour rien ... tongue.gif mais c'est vrai qu j'aime bien comprendre aussi et j'aurai du expliquer vite fait ma solution ... c'est le minimum
Bourinho
En fait, la première solution proposée ne résout pas tout...Je n'ai plus le WARNING mais ça ne fait pas ce que je souhaite car $reponse est toujours false laugh.gif ...la solution du rajout du 'if' est à conserver mais la requête est à modifier...je la rappelle:

CODE
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = '.$Pseudo);


En effet, il faut:

CODE
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo=\''.$Pseudo.'\'');


Je pense que c'est du au fait que dans la première requête, $Pseudo n'est pas entouré de quotes et ça doit pas correspondre au format souhaité dans une requête SQL. En tout cas, la seconde fonctionne et elle n'utilise pas de double-quotes qui ralentissent le processus d'après ce qui se dit sur le net (et sur ce forum...)

C'était un complément au passage... et puis ça me permet de fournir ma première "réponse" dans ce forum ou pour l'instant je ne fais que poser des questions... whistling.gif
captain_torche
Le ralentissement dû aux double-quotes est vraiment minime, tu n'es pas obligé de t'en dispenser.
Surtout que là, le facteur potentiellement "ralentisseur", est plus l'exécution de la requête elle-même, que l'analyse de la chaîne à passer à MySQL.
Bourinho
Je suis d'accord avec toi que le gain est minime...mais bon, ça coûte vraiment pas grand chose...surtout que ça marche cette fois!!! tongue.gif Et puis, étant un noob, je préfère prendre de bonnes habitudes d'écriture dans la mesure du possible...

En plus de ça, un gain minime multiplié par 30.000visiteurs/jour, ça peut soulager le serveur... laugh.gif . Si un jour ça arrive, tu en seras le premier prévenu!!! Mais je te rassure, tu peux dormir sur tes deux oreilles pendant un bon bout de temps!!!
AllForEver
En utilisant mysql_num_rows() comme conseillé plus haut, tu affiche ce que tu veut si il n'y a aucun membre avec le pseudo demandé... smile.gif
CODE
$Pseudo=$_POST['pseudo'];
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = '.$Pseudo);

if(mysql_num_rows($reponse) > 0){
 
  while ($donnees = mysql_fetch_array($reponse)){

     ce que je veux faire...faut pas être trop curieux!!!!
   
  }

}else{

  ce que tu fait quand il n'y pas d'enregistrements...

}

wink.gif
Bourinho
Salut AllForEver,

Je sais pas si c'est mon EasyPHP qui déconne mais la requête suivante :
CODE
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = '.$Pseudo);

ne fonctionne pas tip top car elle renvoit toujours faux...

Enfin, j'ai expliqué le problème quelques (4) messages plus haut...
captain_torche
Déjà, il va falloir entourer le pseudo de quotes.
Si tu tiens absolument à garder tes simples quotes, ça va donner quelque chose comme ça :
CODE
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = \''.$Pseudo.'\'');

ce qui est somme toute difficilement lisible.
Tu pourrais bien sûr entourer le pseudo de doubles quotes :
CODE
$reponse=mysql_query('SELECT IdMembre FROM membres WHERE Pseudo = "'.$Pseudo.'"');

ce qui est légèrement mieux.

Mais sinon, pourquoi se priver des doubles quotes dès le début ?
CODE
$reponse=mysql_query("SELECT IdMembre FROM membres WHERE Pseudo = '$Pseudo'");

C'est tout de même plus propre, non ?

Pour une meilleure sécurité de ton code, d'ailleurs, il sera nécessaire d'éviter les injections SQL, en paramétrant ta variable comme ceci, avant la requête :
CODE
$Pseudo = mysql_real_escape_string($Pseudo);


Et, pour finir, ça serait sympa que tu te permettes d'exploiter ce que te retourne la requête en cas d'erreur :
CODE
$reponse = mysql_query($query) or die(mysql_error());

Ca nous permettrait (et à toi aussi), d'y voir plus clair.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.