[RESOLU] WHILE avec mysql_fetch_array ne boucle pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] WHILE avec mysql_fetch_array ne boucle pas

Re: WHILE avec mysql_fetch_array ne boucle pas

par Fantilir » 02 août 2012, 13:07

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 !

Re: WHILE avec mysql_fetch_array ne boucle pas

par Ryle » 02 août 2012, 11:25

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

WHILE avec mysql_fetch_array ne boucle pas

par Fantilir » 02 août 2012, 08:58

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 !