JeuWeb - Crée ton jeu par navigateur
Créer une map - 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 : Créer une map (/showthread.php?tid=5200)

Pages : 1 2


RE: Créer une map - Ter Rowan - 31-01-2011

avec ce système tu ne sauterais pas une ligne sur deux ?

vu qu'à chaque itération de ton while tu appelles 2 fois mysql_fetch_array

une fois dans le while, une fois à la fin de la boucle
et puis ....

à quoi sert $downALL++;


de même à quoi sert le premier mysql_fetch_array avant le while


il faut que tu sois plus rigoureux


RE: Créer une map - christouphe - 31-01-2011

effectivement j'avais pas vu, SOIT tu fais FOR - FOR, SOIT WHILE - WHILE, pour plus de cohérences.


RE: Créer une map - niahoo - 31-01-2011

Oui il ne te faut laisser le mysql_fetch_array() que dans la boulce while.

De plus, un brin d'indentation correcte ne fais pas de mal !


$requeteALL = mysql_query('SELECT id,village,posx,posy,skin FROM users WHERE id != '.$_SESSION['userid'].'');
while ($downALL = mysql_fetch_array($requeteALL)) {
$posXall = $downALL['posx'];
$posYall = $downALL['posy'];
printf('<a href="profile.php?id=%d">'.
'<img src="default/images/Jeu/icon%s.png" '.
'style="position:absolute;top:%s;left:%d"/>'.'</a>',
$downALL['id'],
$downALL['skin'],
$downALL[$posYall],
$downALL[$posXall]);
$downALL++;
}



RE: Créer une map - Kurogane - 01-02-2011

(31-01-2011, 03:27 PM)niahoo a écrit :

$requeteALL = mysql_query('SELECT id,village,posx,posy,skin FROM users WHERE id != '.$_SESSION['userid'].'');
while ($downALL = mysql_fetch_array($requeteALL)) {
$posXall = $downALL['posx'];
$posYall = $downALL['posy'];
printf('<a href="profile.php?id=%d">'.
'<img src="default/images/Jeu/icon%s.png" '.
'style="position:absolute;top:%s;left:%d"/>'.'</a>',
$downALL['id'],
$downALL['skin'],
$posYall,
$posXall);

}

@niahoo : Je me suis permis de reprendre ton indentation. Et de corriger le code qui lui génère l'erreur.

Donc Déjà "$downAll++" Comme Ter Rowan le fait remarquer, A quoi sert-il ?
A mon avis à rien, Car $downAll est un tableau à 1 dimension. C'est comme si tu essayer d'ajouter "1" à ton enregistrement sql, cela n'as aucun sens.

Ensuite le mysql_fetch_array soit tu l'utilise une fois comme test dans le while ( Si mysql_fetch_array ne trouve plus de lignes non-traitées à renvoyer dans la variable le test renvois "Faux")
Soit avec le for tu l'utilise comme dans ton 1er code en fin de boucle puisque tu l'appel déjà une fois avant le for. ( Le While dans ce cas est beaucoup mieux car cela t'évite de faire une requête sql pour avoir le maximum de la boucle for )

Pour finir il est normal que tu ai des notices d'index puisque comme il t'as été expliqué précédemment , tu veut utiliser une case inexistante.
Le probléme vient de tes $downALL[$posYall] et $downALL[$posXall] car $posYall et $posXall contiennent la valeur des champs posy et posx de l'enregistrement sql que tu traite à ce tour de boucle. Hors tu souhaite afficher un champs/case de ton tableau $downALL qui porterait comme "nom" la valeur de ces variables.
[ironie gentille ]donc je t'incite à vérifier dans ta base de donnée que tu n'as pas de champs nommé "186" ou "32" ^^ [/ironie gentille ]

Donc le code que j'ai corrigé devrait t'éviter ces erreurs, et en soucis d'optimisation tu pourrais retirer :
$posXall = $downALL['posx'];
$posYall = $downALL['posy'];
et dans ton printf mettre directement :
$downALL['posx'],
$downALL['posy']);

Voila. Bonne chance.