Page 1 sur 2

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

Posté : 08 févr. 2007, 10:34
par Cugel
Bonjour, Je suis en train d'apprendre php et je me retrouve face un petit problème dans la récupération des données en provenance d'une table MySQL :
<?php require_once ('Connections/dbConnect.php');

mysql_select_db($dbName,$dbIdentifiant);

$query_qry_news="SELECT n.id,n.titre,n.contenu,n.timestamp_proposition FROM news n WHERE valide=1 ORDER BY n.timestamp_proposition DESC LIMIT 0,5";

$qry_news=mysql_query($query_qry_news,$dbIdentifiant) or die(mysql_error());

while ($donnees_news=mysql_fetch_assoc($qry_news))
{
             $dateSQL=$donnees_news['timestamp_proposition'];
             list($annees,$mois,$jourHeure)=explode("-",$dateSQL);
             list($jour,$heure)=explode(" ",$jourHeure);
             $dateFR=$jour.'/'.$mois.'/'.$annee;
             
             echo '<strong>'.$donnees_news['titre'].'</strong><Br />';
             echo $donnees_news['contenu'].'<Br />';
             echo 'Posté le '.$dateFR.' à '.$heure.'<Br />';
}

mysql_close();

?>
Mon problème est que la table news contient 5 enregistrements et que le code devrait donc me ressortir tous les enregistrements de la table. Or, seuls 4 enregistrements sont ressortis.

Il y à maintenant trois jours que je tourne en rond là-dessus, et pour finir je ne vois plus rien. Quelqu'un verrait-il où çà coince ???

Merci

Posté : 08 févr. 2007, 10:38
par charabia
Tu devrais avoir une erreur ici : while ($donnees_news=mysql_fetch_assoc($qry_news) normalement.

Posté : 08 févr. 2007, 11:10
par Cugel
Non, je ne voit aucune erreur de ce côté là (en fait c'est en restranscrivant ici que j'ai oublié une parenthèse, dans le code elle est bien présente).

J'ai oublié de préciser, si cela peut aider, que :

1) quand la table ne contient qu'un seul enregistrement, le code ne me ressort rien du tout (sauf si je supprime le while);

2) l'enregistrement qui n'est pas affiché est toujours le même : c'est le premier... (id de l'enregistrement : 1).

Posté : 08 févr. 2007, 11:13
par Ultim4T0m
J'imagine que le problème de coloration est également du au fait que tu ai mal recopié, de même pour la balise fermante ?> après le require_once (ou bien est-ce l'oublie de balise ouvrante <?php après celle-ci)

Pourrais-tu dans ce cas éditer ton premier message, histoire qu'on ai le vrai code sous les yeux ? ^^'

Posté : 08 févr. 2007, 11:17
par Cugel
oups, merci de la remarque, effectivement j'avais mal recopier le code. Modification effectuée, çà devrait être mieux visible maintenant :D

Posté : 08 févr. 2007, 11:21
par Ryle
Et quand tu joues la requête directement dans mysql, obtiens tu bien tes 5 lignes ?

quelle valeur as-tu si tu fais un mysql_num_row() de $qry_news ?

Posté : 08 févr. 2007, 11:31
par Cugel
Le passage direct de la requête dans MySQL me retourne bien tous mes enregistrements, et le mysql_num_row me renvoie bien 5 (nombre total des enregistrements présents.

Posté : 08 févr. 2007, 11:39
par Ryle
grumpf... et dans ton while, si tu colles un
echo '<pre>';
print_r($donnees_news);
echo '</pre>';
Tu vois toujours passer que les 4 derniers ?

Et avec un mysql_fetch_array() au lieu du assoc, même comportement ?

Posté : 08 févr. 2007, 11:49
par Cugel
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 çà :(

Posté : 08 févr. 2007, 12:09
par Ryle
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 ?

Posté : 08 févr. 2007, 12:17
par mere-teresa
Combien de fois tu passes dans ton while ?
--

Posté : 08 févr. 2007, 12:22
par Cugel
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:

Posté : 08 févr. 2007, 12:26
par Ryle
et tu obtiens quoi ? 4 'Affichage' et 1 'Erreur' ? ou 5 'Affichage' ? ou autre ?

Posté : 08 févr. 2007, 12:31
par Cugel
et tu obtiens quoi ? 4 'Affichage' et 1 'Erreur' ? ou 5 'Affichage' ? ou autre ?
4 Affichage et 1 Erreur

Posté : 08 févr. 2007, 16:01
par Invité
Combien de fois tu passes dans ton while ?
--
Ben visiblement 4 fois, puique au passage dans la 5° boucle cà ne marche plus ...