Page 1 sur 1

WHILE avec mysql_fetch_array ne boucle pas

Posté : 02 août 2012, 08:58
par Fantilir
Bonjour, voila un jour et demi que ce problème me pourris la vie, j'ai retourné le web à la recherche d'une solution, d'autres personnes ont un problème similaire mais leurs solutions sont simples : soit ils changent la requête à l'intérieur du while, soit ils mettent une semicolon après les conditions du while.

Ceci n'est pas mon cas.

Il est à préciser que le while fonctionne 1 fois, mais dans mon cas il devrait tourner 121 fois (vérifié avec mysql_num_rows).
Mon QUERY fonctionne parfaitement, si j'extrait les données ailleurs que dans le while je les ai, pas de problème.

Voila mon code :
$sql_pos_xy = mysql_query("SELECT id, x, y FROM terre WHERE z='$posz' and x between '$x_debut' and '$x_fin' and y between '$y_debut' and '$y_fin' ORDER BY x DESC, y DESC") or die('erreur dans la selection des terrains : '.mysql_error());

while($data_pos_xy = mysql_fetch_array($sql_pos_xy, MYSQL_ASSOC)) 
{
   ${'t_id'.$data_pos_xy['x'].$data_pos_xy['y']} = $data_pos_xy['id'];
}
mysql_free_result($sql_pos_xy);
La variable enregistrée dans le while n'existera pas (undefined) car le while ne boucle pas.

Merci d'avance !

Re: WHILE avec mysql_fetch_array ne boucle pas

Posté : 02 août 2012, 11:25
par Ryle
A priori ton code semble correct... Et si dans ton while tu ajoutes un echo ${'t_id'.$data_pos_xy['x'].$data_pos_xy['y']}; est-ce qu'il t'affiche uniquement le premier id ? uniquement le dernier ? ou est-ce qu'il t'affiche les 121 résultats ?

Et si au lieu de mysql_fetch_array($sql_pos_xy, MYSQL_ASSOC) tu faisais un mysql_fetch_assoc($sql_pos_xy) ?

Re: WHILE avec mysql_fetch_array ne boucle pas

Posté : 02 août 2012, 13:07
par Fantilir
Solution trouvée sur un autre forum, j'explique ici au cas ou quelqu'un en aurait besoin :
ok, solution trouvée. Quand j'avais fais ce script on était en PHP4, avec PHP 5 certaines choses ce sont apparemment durcies, dont l'usage des apostrophes et guillemets à l'intérieur de requêtes sql.

Dans mon cas, j'avais essayé d'inclure les variables de différentes manières :
- "SELECT BLABALBA z="'.$posz.'" BLABLABLA"
- "SELECT BLABALBA z='$posz' BLABLABLA"

En fait le problème venait uniquement de la ... Ce qui est étrange c'est que le premier résultat de la boucle passait, ce qui veut dire que php savait lire les variables, mais dès qu'il fallait faire la boucle ça doit gêner quelque part, j'ai donc solutionné en changeant par :

- "SELECT BLABALBA z=".$posz." BLABLABLA"

Voilà donc la requête fonctionnelle en duo avec le while :

<?php
$sql_pos_xy = mysql_query("SELECT x, y, id_terrain, accessibilite FROM terre WHERE z=".$posz." AND x BETWEEN ".$x_debut." AND ".$x_fin." AND y BETWEEN ".$y_debut." AND ".$y_fin." ORDER BY x DESC, y DESC") or die('erreur dans la selection des terrains : '.mysql_error());
?>

Merci infiniment à _Exo_ et Cartman34 pour votre aide :3,
a bientôt !