Aller au contenu

Comment exploiter le résultat d'une requête


Sujets conseillés

Posté

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 :fete:

J'arrive même à faire des requêtes SQL :fete:

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

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 :lol: )

$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 :lol:

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

Par avance, merci!

Posté

je te conseille ca :

$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

Posté (modifié)

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

C'est quand même mieux que les 13 minutes de la dernière fois!!! :lol:

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???

Modifié par Bourinho
Posté

Bonjour,

Un extrait de http://fr.php.net/manual/fr/function.mysql-query.php :

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 ;) )

Posté

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.

Posté

désolé j'avais meme aps pris le temps d'expliquer , ca m'avait paru un peu facile ... :P

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

Posté

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:

Posté

pas de problème, je me vexe pas pour rien ... :P mais c'est vrai qu j'aime bien comprendre aussi et j'aurai du expliquer vite fait ma solution ... c'est le minimum

Posté (modifié)

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 :lol: ...la solution du rajout du 'if' est à conserver mais la requête est à modifier...je la rappelle:

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

En effet, il faut:

$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:

Modifié par Bourinho
Posté

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.

Posté

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!!! :P 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... :lol: . 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!!!

Posté

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é... :)

$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...

}

;)

Posté

Salut AllForEver,

Je sais pas si c'est mon EasyPHP qui déconne mais la requête suivante :

$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...

Posté

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 :

$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 :

$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 ?

$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 :

$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 :

$reponse = mysql_query($query) or die(mysql_error());

Ca nous permettrait (et à toi aussi), d'y voir plus clair.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...