problème de récupération de données avec un while

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 : problème de récupération de données avec un while

par dread » 09 févr. 2007, 13:03

Et bien, c'est du service rapide dis moi.
Ca marche pour moi aussi, je te remercie pour ta contribution.
Si toutefois tu avais un avis sur le problème qui me tracasse, pourrais tu jeter un coup d'oeil au post suivant:
http://www.phpfrance.com/forums/voir_sujet-27102.php
Merci encore.

par Cugel » 09 févr. 2007, 12:37

Bon ben je me réponds à moi-même. Ma supposition était la bonne. Tu dois simplement tester si to recordset contient au moin un enregistrement.

En fait moi j'ai fait çà
<?php $totalRecords_qry_news=mysql_num_rows($qry_news); ?>
<?php
if ($totalRecords_qry_news>0)
 {
     do {  
     $dateSQL=$row_qry_news['timestamp_validation']; 
     list($annee,$mois,$jourheure)=explode("-",$dateSQL); 
     list($jour,$heure)=explode(" ",$jourheure); 
     $dateFR=$jour.'/'.$mois.'/'.$annee; 
     echo '<strong>'.$row_qry_news['titre'].'</strong>'.'<br /><br />'; 
     echo $row_qry_news['contenu'].'</div><br />'; 
     echo 'Posté le '.$dateFR.' à '.$heure.'<br />'; 
     echo'<Br />'; 
     } 
while ($row_qry_news = mysql_fetch_assoc($qry_news)); 
 
mysql_close(); 
}
?> 
voilou :wink:

J'ai simplifié ici, parce que normalement j'ai du code de formattage XHTML en plus. si tu as du code de formattaque aussi il y a deux solutions possibles :

soit le formattaque (tableau, ...) ne doit pas être visible si il n'y a rien à afficher : tu l'inclus dans la condition

Dans le cas contraire tu le place en dehors de ta condition...

par dread » 09 févr. 2007, 12:31

Je vais creusé dans cette voie alors. Si toutefois tu y arrives avant moi pourrais-tu m'en faire part stp. J'en ferai de même dans le cas contraire.

par Cugel » 09 févr. 2007, 12:22

Effectivement j'ai la même erreur. J'avais pas testé cette possibilité car j'avais fais çà sur un coin de banquette de train en rentrant du boulot hier ... :lol:

Maintenant je suppose (mais pas encore testé) qu'on peut contourner ce probleme en testant la présence d'enregistrements avec un mysql_num_row() . Si le résultat retourné est supérieur à 0, on exécute le code (car il y à au moins 1 enregistrement à afficher) dans le cas contraire on ne fait rien.

Mais attention, c'est juste une supposition, hein ... :)

par dread » 09 févr. 2007, 10:04

Bonjour à tous.
Je me permet d'intervenir dans ce post puisque jusqu'à présent, j'étais confronté au même problème.
A l'instar de cugel, j'avais utilisé un do...while pour faire afficher mes enregistrements dans une boucle de 8.
Tout marchait parfaitement sauf que sur une remarque d'une des personnes de phpfrance, le doute planait sur le fait qu'en l'absence de résultat, une page s'afficherait quand même faisant apparaitre une présentation de page vide ou avec certains éléments de présentation (images de background,...) mais sans contenu. Ce doute s'est avéré juste et en l'absence de résultat mon image d'arrière plan s'est affiché mais bien évidemment sans contenu.
J'ai donc suivi les conseils qui m'avaient été prodigués et utilisa juste une fonction while.
Sauf que comme Cugel, seulement 7 enregistrements apparaissaient sur la page au lieu de 8. Je suis retourné à la fonction do...while mais le problème reste toujours le même en l'absence de résultat à ma requête.
Ma question est donc la suivante:
Cugel, as tu vérifié si tu avais le même problème en l'absence d'enregistrement avec la fonction do...while???
Voici mon code de boucle:
<?php do { ?>
	      <table class="tableau" height="110px" width="461px" border="0" cellspacing="0" cellpadding="0" background="vignette_annuaire.gif">
	        
	        <tr>
	          <td class="photo" rowspan="4" height="97px" width="140px" ><img src="<?php echo $row_rs_camping['url_photo4']; ?>" alt="<?php echo $row_rs_camping['alt_photo1']; ?>"/></td>
        <td class="nom" colspan="2" width="315px" height="30px"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><?php echo $row_rs_camping['nom_etab']; ?></a></td>
      </tr>
	        <tr>
	          <td width="315px" height="24px" colspan="2"><span class="Style1"><?php echo $row_rs_camping['cp_etab']; ?> <?php echo $row_rs_camping['ville_etab']; ?></span></td>
      </tr>
	        <tr>
	          <td colspan="2" width="315px" height="18px" valign="top"><span class="Style1"><?php echo $row_rs_camping['date_ouverture']; ?></span></td>
      </tr>
	        <tr>
	          <td width="150px" height="25px" valign="top"><span class="Style1"><?php echo '<img src="Images/etoile'.$row_rs_camping['nb_etoile_camping'].'.gif"  alt="Camping '.$row_rs_camping['nb_etoile_camping'].' étoiles"></img>'; ?></span></td>
        <td width="165px" height="25px" valign="top"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><span class="Style1"> Fiche complète</span></a></td>
      </tr>
        </table>
	      <?php } while ($row_rs_camping = mysql_fetch_assoc($rs_camping)); ?>
Merci de bien vouloir répondre pour que je sache si dans le cas contraire et si tout fonctionne bien si je dois vérifier mon code.

par Invité » 09 févr. 2007, 08:11

Ben non, pas de if en vue. Quand je dis que c'est pas logique ...

Mais bon, j'ai pour habitude de dire que la logique s'arrête là où l'informatique commence ...

par Ryle » 08 févr. 2007, 18:27

t'aurais pas un if($row_qry_news = mysql_fetch_assoc($qry_news)) dont tu aurais oublié de nous faire part dans ton code ? parce que la c'est franchement bizare.... quand tu rentre dans le do, $row_qry_news n'est pas encore défini, il devrait te coller un warning...

par Cugel » 08 févr. 2007, 18:18

J'ai trouvé !!!
Il suffisait de prendre le problème à l'envers :
<?php 
do { 
     $dateSQL=$row_qry_news['timestamp_validation'];
     list($annee,$mois,$jourheure)=explode("-",$dateSQL);
     list($jour,$heure)=explode(" ",$jourheure);
     $dateFR=$jour.'/'.$mois.'/'.$annee;
     echo '<strong>'.$row_qry_news['titre'].'</strong>'.'<br /><br />';
     echo $row_qry_news['contenu'].'</div><br />';
     echo 'Posté le '.$dateFR.' à '.$heure.'<br />';
     echo'<Br />';
     }
while ($row_qry_news = mysql_fetch_assoc($qry_news)); 
mysql_close();
?>
Mais bon, çà reste quand même bizarre et çà va à l'encontre de ce que j'ai lu dans les tutos auxquels j'ai pu avoir accès...

par Invité » 08 févr. 2007, 16:01

Combien de fois tu passes dans ton while ?
--
Ben visiblement 4 fois, puique au passage dans la 5° boucle cà ne marche plus ...

par Cugel » 08 févr. 2007, 12:31

et tu obtiens quoi ? 4 'Affichage' et 1 'Erreur' ? ou 5 'Affichage' ? ou autre ?
4 Affichage et 1 Erreur

par Ryle » 08 févr. 2007, 12:26

et tu obtiens quoi ? 4 'Affichage' et 1 'Erreur' ? ou 5 'Affichage' ? ou autre ?

par Cugel » 08 févr. 2007, 12:22

Ben çà marche pas non plus : les quatre premiers enregistrements sont toujours bien affichés, mais pas le 5° (enfin le premier en ordre d'id)...

J'ai bien "Affichage ligne 0", "...ligne 1","... ligne 2","... ligne 3", puis j'ai "Erreur ligne 4" .

Cà commence à me foutre en boule grave là... parce que c'est pas logique. :evil:

par mere-teresa » 08 févr. 2007, 12:17

Combien de fois tu passes dans ton while ?
--

par Ryle » 08 févr. 2007, 12:09

for ($i = 0; $i < mysql_num_row($qry_news); $i++) {
  if($donnees_news = mysql_fetch_assoc($qry_news))
    echo 'Affichage ligne '.$i;
  else
    echo 'Erreur ligne '.$i;

  echo '<pre>'; 
  print_r($donnees_news); 
  echo '</pre>';
}  

Et ça ?

par Cugel » 08 févr. 2007, 11:49

Oui, le problème est le même. je n'ai que 4 enregistrements affichés ...
Je ne comprend vraiment pas pourquoi MySQL retourne tous les enregistrements et pas php, c'est pas du tout logique çà :(