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

Eléphanteau du PHP | 17 Messages

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...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

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 ...

Eléphant du PHP | 186 Messages

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.

Eléphanteau du PHP | 17 Messages

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 ... :)

Eléphant du PHP | 186 Messages

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.

Eléphanteau du PHP | 17 Messages

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...

Eléphant du PHP | 186 Messages

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.