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

Eléphanteau du PHP | 17 Messages

08 févr. 2007, 10:34

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
Modifié en dernier par Cugel le 08 févr. 2007, 11:16, modifié 2 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 févr. 2007, 10:38

Tu devrais avoir une erreur ici : while ($donnees_news=mysql_fetch_assoc($qry_news) normalement.

Eléphanteau du PHP | 17 Messages

08 févr. 2007, 11:10

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).
Modifié en dernier par Cugel le 08 févr. 2007, 11:14, modifié 1 fois.

Eléphant du PHP | 445 Messages

08 févr. 2007, 11:13

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 ? ^^'
LLDC
Ulti

Eléphanteau du PHP | 17 Messages

08 févr. 2007, 11:17

oups, merci de la remarque, effectivement j'avais mal recopier le code. Modification effectuée, çà devrait être mieux visible maintenant :D

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

08 févr. 2007, 11:21

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

Eléphanteau du PHP | 17 Messages

08 févr. 2007, 11:31

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.

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

08 févr. 2007, 11:39

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

Eléphanteau du PHP | 17 Messages

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 çà :(

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

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

08 févr. 2007, 12:17

Combien de fois tu passes dans ton while ?
--
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 17 Messages

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:

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

08 févr. 2007, 12:26

et tu obtiens quoi ? 4 'Affichage' et 1 'Erreur' ? ou 5 'Affichage' ? ou autre ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 17 Messages

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

Invité
Invité n'ayant pas de compte PHPfrance

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