JeuWeb - Crée ton jeu par navigateur
Problème (requètes MySQL, variables...) - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème (requètes MySQL, variables...) (/showthread.php?tid=896)

Pages : 1 2


Problème (requètes MySQL, variables...) - Prizor - 03-03-2007

Bonsoir.

J'ai un problème concernant l'affichage de la valeur de mes variables sur une de mes pages.:non:

En voici le code (très simplifié, car j'ai enlevé les parties qui n'ont rien à voir avec ce sujet) :
Code PHP :
<?php
session_start
();


// Nombre - Ressources
$po = mysql_query("SELECT mp_po FROM comptes WHERE pseudo='$pseudo' AND password='$password'"); //Défaut: 20
$nourriture = mysql_query("SELECT mp_nourriture FROM comptes WHERE pseudo='$pseudo' AND password='$password'"); //Défaut: 0
$bois = mysql_query("SELECT mp_bois FROM comptes WHERE pseudo='$pseudo' AND password='$password'"); //Défaut: 0
$pierre = mysql_query("SELECT mp_pierre FROM comptes WHERE pseudo='$pseudo' AND password='$password'"); //Défaut: 0
$fer = mysql_query("SELECT mp_fer FROM comptes WHERE pseudo='$pseudo' AND password='$password'"); //Défaut: 0
$or = mysql_query("SELECT mp_or FROM comptes WHERE pseudo='$pseudo' AND password='$password'"); //Défaut: 0


// Ici j'aurais pû fermer la balise php, mais je trouve ça lourd de devoir ouvrir puis fermer les balises php pour chaque variable, surtout que mon code html est court...
print '
<table>
<caption>Vos ressources</caption>
<tr><td>Pièces d\'or :</td><td>'
.$po.'</td></tr>
<tr><td>Nourriture :</td><td>'
.$nourriture.'</td></tr>
<tr><td>Bois :</td><td>'
.$bois.'</td></tr>
<tr><td>Pierre :</td><td>'
.$pierre.'</td></tr>
<tr><td>Fer :</td><td>'
.$fer.'</td></tr>
<tr><td>Or :</td><td>'
.$or.'</td></tr>
</table>
'
;

mysql_close();
?>


Je pense que je fais une erreur de syntaxe quelque part (concaténation ?), car au final sur ma page j'obtiens quelque chose qui ressemble à :

Vos ressources
Pièces d'or : Resource id #7
Nourriture : Resource id #8
Bois : Resource id #9
Pierre : Resource id #10
Fer : Resource id #11
Or : Resource id #12



Je pense que vous n'aurez aucun problème à comprendre ce code, néanmoins, si vous avez besoin d'un renseignement quelconque (à propos de la table, ou quoi que ce soit d'autre), n'hésitez pas à me poser vos questions.

A noter que je pars demain en vacances, soit le dimanche 4 mars (aux alentours de midi), et je ne reviendrai pas avant une semaine, donc je devrais pouvoir surveiller le sujet jusqu'à demain midi environ.


Merci d'avance si vous trouvez la (ou les) source(s) du problème.

Amicalement:respect:


RE: Problème (requètes MySQL, variables...) - pascal - 03-03-2007

déjà, tu peux recuperer tous les champs en une seule requete: il suffit de les séparer par une virgule.

ensuite, ta syntaxe n'est pas bonne. n'importe quel tutorial sur mysql te donnera la solution, je te file juste la doc pour trouver la syntaxe dans l'exemple : http://fr.php.net/manual/fr/function.mysql-query.php

A+

Pascal


RE: Problème (requètes MySQL, variables...) - Prizor - 03-03-2007

SalutWink

Je suis pas sûr d'avoir bien tout saisi...:heuuu:

En gros, je dois faire ça ?
Code PHP :
<?php 
$result
= mysql_query("SELECT mp_po, mp_nourriture, mp_bois, mp_pierre, mp_fer, mp_or FROM comptes WHERE pseudo='$pseudo' AND password='$password'");

while (
$row = mysql_fetch_assoc($result)) {
$po = $row['mp_po'];
$nourriture = $row['mp_nourriture'];
$bois = $row['mp_bois'];
$pierre = $row['mp_pierre'];
$fer = $row['mp_fer'];
$or = $rox['mp_or'];
}

Il me semble que j'avais déjà essayé avec une boucle, mais que lors de l'affichage de mes variables, rien ne s'affichait là où la valeur de la variable devait apparaître (il n'y avait même pas d'erreur qui s'affichait)...
Peut-être est-ce parce que je dois utiliser des "echo" au lieu de bêtement assigner des valeurs aux variables (ça m'étonnerait beaucoup, mais bon, on peut pas dire que je sois expérimenté...).

Quoi qu'il en soit, dis-moi déjà si ce bout de code est correct...^^

Merci pour ta réponse !Wink
:respect:


RE: Problème (requètes MySQL, variables...) - pascal - 03-03-2007

c'est mieux Smile

la doc sur mysql_query nous donne une info intéressante:
_ si ça réussit, on a une ressource
_ si ça échoue, on a FALSE

donc il faut tester ça avant d'aller voir un éventuel résultat.

si tu attends une seule ligne de résultat, pas besoin d'utilser while;
si tu attends plusieurs résultats, utilise while.
Code PHP :
<?php 
$result
= mysql_query("SELECT mp_po, mp_nourriture, mp_bois, mp_pierre, mp_fer, mp_or FROM comptes WHERE pseudo='$pseudo' AND password='$password'");
// on teste que la requete a reussi
// + il y a au moins une ligne dans le resultat
if( !$result )
{
// partie pour traiter le cas "la requete a échoué"
// ... à compléter
}elseif( mysql_num_rows($result) == 0 )
{
// traiter le cas pour zero resultat alors qu'on en veut un
// à completer
}else{
// ça a réussi : on affiche les données
// à completer
}

voilà!
n'hésite pas à fouiller la doc, à tester les fonctions mysql_*, à poser des questions.

A+

Pascal


RE: Problème (requètes MySQL, variables...) - Raoull - 03-03-2007

Oui ca c'est correct, mais dans ce cas précis, l'utilisation du WHILE est inutile, puisque tu ne récupère qu'une ligne dans ta requète.

Le while est a utiliser lorsqu'on récupère plusieurs ligne, pour les parcourir une à une.

Donc tu peux faire direct

Code PHP :
<?php 
$result
= mysql_query("SELECT mp_po, mp_nourriture, mp_bois, mp_pierre, mp_fer, mp_or FROM comptes WHERE pseudo='".$pseudo."' AND password='".$password."'");

$row = mysql_fetch_assoc($result);

   $po = $row['mp_po'];
   $nourriture = $row['mp_nourriture'];
   $bois = $row['mp_bois'];
   $pierre = $row['mp_pierre'];
   $fer = $row['mp_fer'];
   $or = $rox['mp_or'];

// ou bien utiliation directe :

print '
<table>
  <caption>Vos ressources</caption>
  <tr><td>Pièces d\'or :</td><td>'
.$row['mp_po'].'</td></tr>
  <tr><td>Nourriture :</td><td>'
.$row['mp_nourriture'].'</td></tr>
  <tr><td>Bois :</td><td>'
.$row['mp_bois'].'</td></tr>
  <tr><td>Pierre :</td><td>'
.$row['mp_pierre'].'</td></tr>
  <tr><td>Fer :</td><td>'
.$row['mp_fer'].'</td></tr>
  <tr><td>Or :</td><td>'
.$row['mp_or'].'</td></tr>
</table>'
;

Au besoin, prends 1 heure pour faire le tour des fonction mysql sur le manuel php. Ca éclaire les idées et ya plein d'exemples pratiques.

EDIT : oups pascaltje m'a devancé, et l'idée de tester le résultat d'abord est + qu'une bonne idée Wink


RE: Problème (requètes MySQL, variables...) - genosite - 03-03-2007

Pourquoi vous ne faite pas ceci
Code PHP :
<?php 
SELECT
* FROM comptes WHERE pseudo='".$pseudo."' AND password='".$password."'"



RE: Problème (requètes MySQL, variables...) - Prizor - 03-03-2007

genosite a écrit :Pourquoi vous ne faite pas ceci
Code PHP :
<?php 
SELECT
* FROM comptes WHERE pseudo='".$pseudo."' AND password='".$password."'"

Parce que je crois que lorsqu'on utilise "*" le temps de chargement de la page est beaucoup plus long.



Merci pour ton exemple Pascal, mais maintenant le problème c'est que je suis dans le cas "0 résultat"...:heuuu:

Qu'est-ce que j'ai fait pour que ça foire ? Quelle peut être l'origine du problème ?

Ca m'étonnerait pas que j'aie fait une bêtise quelque part...


RE: Problème (requètes MySQL, variables...) - pascal - 04-03-2007

au debut du code, mets la requete SQL dans une variable :
Code PHP :
<?php 
$requete
= "SELECT mp_po, mp_nourriture, mp_bois, mp_pierre, mp_fer, mp_or FROM comptes WHERE pseudo='".$pseudo."' AND password='".$password."'";
$result = mysql_query($requete);

puis dans le cas "zero resultat" :
Code PHP :
<?php 
echo $requete;

en recopiant dans PHPMyadmin, tu sauras ce que donne la requête.

A+

Pascal


RE: Problème (requètes MySQL, variables...) - denisc - 04-03-2007

Toujours au taquet , hein Pascal...

On se voit Lundi ou tu seras en congés?


RE: Problème (requètes MySQL, variables...) - pascal - 04-03-2007

on se voit lundi Smile

j'espère que les inscriptions ne vont pas chambouler mon calendrier Confused

A+

Pascal