Lea Posté 8 Septembre 2004 Partager Posté 8 Septembre 2004 Bonjour, Tout d'abord, je voulais remercier tous les hubmaster pour leur aide très précieuse et leur rapidité à répondre. Si ce forum n'existait pas, je me demande comment je ferais, moi qui débute en programmation.... Alors voilà, j'ai un problème (et oui, encore un!) avec une requête qui permet d'afficher des infos correspondant à une personne identifiée via un login et un mot de passe, voilà la requête : SELECT mission.ID, mission.date_envoi, mission.theme, mission.besoin, mission.commentaires, mission.budget, mission.resultat, mission.suivi, mission.commentaires_suivi, mission.date_realisation, mission.infos_complement, mission.realise_par, mission.login, mission.pass FROM mission WHERE mission.login = '$clientlogin' AND mission.pass = '$clientpass' puis dans ma page : <?php do { ?> <tr bordercolor="#FFFFFF" bgcolor="#FFFFFF"> <td width="99"><p><?php echo $rsdate; ?></p></td> <td width="140"><p align="center"><?php echo $themet; ?></p></td> <td width="41"><p align="center"><a href="detail_mission.php">1</a></p></td> <td width="65"><p align="center"><?php echo $rsbudget; ?> €</p></td> <td width="61"><p align="center"><a href="entrer-resultat.php">2</a></p></td> <td width="86"><p align="center"><?php echo $rssuivi; ?></p></td> </tr> <tr valign="top"> <td height="2" colspan="6"> </td> </tr> <?php } while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique)); ?> Au lieu d'afficher toutes les entrées de la base (il y en a 2) correspondant aux bons login et pass, j'ai juste 1 entrée répétée 2 fois... Comprends pas d'où vient le problème.... Si quelqu'un a une idée, je le remercie par avance... Léa Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dams Posté 8 Septembre 2004 Partager Posté 8 Septembre 2004 Et comme ca : <?php while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique)) { Echo "<tr bordercolor='#FFFFFF' bgcolor='#FFFFFF'> <td width='99'><p>$row_rsHistorique[1]</p></td> <td width='140'><p align='center'>$row_rsHistorique[2]</p></td> <td width='41'><p align='center'><a href='detail_mission.php'>1</a></p></td> <td width='65'><p align='center'>$row_rsHistorique[5] €</p></td> <td width='61'><p align='center'><a href='entrer-resultat.php'>2</a></p></td> <td width='86'><p align='center'>$row_rsHistorique[7]</p></td> </tr> <tr valign='top'> <td height='2' colspan='6'> </td> </tr>"; }?> Ca marche ?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 8 Septembre 2004 Partager Posté 8 Septembre 2004 Effectivement, la boucle : do{ ... }while () n'est pas adaptée à la fonction mysql_fetch_array. Préfères lui la forme contraire, sans le 'do' : while(){ } La différence entre les 2 est que pour la première, la boucle se fera au moins une fois, même si la condition du while est évaluée en faux, alors que dans la seconde, la boucle pourrait ne pas se faire. Ensuite : Dans le code que tu donnes, il n'y a pas de liens entre la variable affectée à la fonction mysql_fetch_array ($row_rsHistorique), et les variables dont tu te sers dans ton code ($rsdate,$rsbudget,..). Donc, le programme ne peut les deviner. Dans le code donnée par Dams, il y a un lien : On affecte à $row_rsHistorique la valeur du tableau retourné par mysql_fetch_array. Donc, pour chaque ligne de ta base de données, tu auras de nouvelles valeur pour ton $row_rsHistorique. $row_rsHistorique sera toujours un 'Array', les 'clés' du tableau seront les champs retournés par la requète (mission.ID, mission.date_envoi, mission.theme, mission.besoin, ...), sans le nom des tables (soit : ID, date_envoi, theme, besoin, ...), et les valeurs seront respectivement, (pour chaque boucle while), la valeur retournée par mysql_fetch_array (je me répète, non?). Voilà. Sinon, tu as accès à ces champs à partir des index (comme l'exemple donné par Dams ($row_rsHistorique[0],$row_rsHistorique[1],..) soit à partir des clés ($row_rsHistorique['ID'],$row_rsHistorique['date_envoi'],..) Anonymus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dams Posté 8 Septembre 2004 Partager Posté 8 Septembre 2004 Y'a pas à dire Anonymus.. Contrairement à moi... Tu as de la pédagogie Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lea Posté 8 Septembre 2004 Auteur Partager Posté 8 Septembre 2004 Non, ça ne marche toujours pas même en mettant le while au début, pourtant j'ai bien défini mes variables comme ça : $rsdate = $row_rsHistorique['date_realisation'];$rsbudget = $row_rsHistorique['budget'];$rssuivi = $row_rsHistorique['suivi'];$rstheme = $row_rsHistorique['theme']; La requête me renvoie x fois la même ligne Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lea Posté 8 Septembre 2004 Auteur Partager Posté 8 Septembre 2004 (modifié) Je pense que le problème vient de l'écriture de l'affectation des variables : exemple : $rsdate = $row_rsHistorique['date_realisation']; car si j'écris <? echo $row_rsHistorique['date_realisation']; ?> au lieu de <? echo $rsdate; ?> , ça marche.... Quelque chose m'échappe Modifié 8 Septembre 2004 par Lea Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 8 Septembre 2004 Partager Posté 8 Septembre 2004 Si la requète te renvoie X fois la même ligne, c'est parce qu'elle est X fois dans la base de données. Si cela ne te dérange pas, et que tu veux tout de même ne l'affiche qu'une seule fois, il y a deux solutions : - Tu enlèves le while (en laissant le mysql_fetch_array). Dans ce cas, tu auras la première ligne retournée par la fonction mysql_fetch_array, autrement dit, la première ligne retournée par la base (qui en retournera plusieurs tout de même). - Tu demandes à Mysql de limiter le nombre de résultats en placant, à la fin de ta requète la clause LIMIT : LIMIT 0,1 signifie "On se limite à un enregistrement à partir de l'enregistrement zéro (donc au début)". Ta requète donnerait alors : SELECT mission.ID, mission.date_envoi, mission.theme, mission.besoin, mission.commentaires, mission.budget, mission.resultat, mission.suivi, mission.commentaires_suivi, mission.date_realisation, mission.infos_complement, mission.realise_par, mission.login, mission.pass FROM mission WHERE mission.login = '$clientlogin' AND mission.pass = '$clientpass' LIMIT 0,1 Voilà. Je rappelle : Si la base retourne plusieurs résultats, c'est qu'il y a plusieurs enregistrement. Anonymus. _AT_Dams : Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lea Posté 8 Septembre 2004 Auteur Partager Posté 8 Septembre 2004 Le problème c'est dans ma base, la ligne en question n'y est qu'une fois d'où mon interrogation ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 8 Septembre 2004 Partager Posté 8 Septembre 2004 1/ Tu peux remettre la requète que tu emploies ? 2/ Tu peux remettre le code que tu utilises ? 3/ Tu peux nous mettre le schéma de la table 'mission' ? Merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 9 Septembre 2004 Partager Posté 9 Septembre 2004 Si tu utilises mysql_fetch_assoc() au lieu de mysql_fetch_array(), il faut utiliser les noms des variables et non leur numéro d'ordre De plus, un "HERE_DOCUMENT" (utilisation de print <<< LABEL) permet de se libérer des contraintes de formatage du code (quotes/doubles quotes)... attention à bien mettre l'étuquette de fin "LABEL;" en tout début de ligne ! <?php if (mysql_num_rows($rsHistorique) != 0) { print "<table>"; while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique)) { print <<< HERE <tr bordercolor='#FFFFFF' bgcolor='#FFFFFF'> <td width='99'><p>$row_rsHistorique["date_envoi"]</p></td> <td width='140'><p align='center'>$row_rsHistorique["theme"]</p></td> <td width='41'><p align='center'><a href='detail_mission.php'>1</a></p></td> <td width='65'><p align='center'>$row_rsHistorique["budget"] €</p></td> <td width='61'><p align='center'><a href='entrer-resultat.php'>2</a></p></td> <td width='86'><p align='center'>$row_rsHistorique["suivi"]</p></td> </tr> <tr valign='top'> <td height='2' colspan='6'> </td> </tr>HERE; } print "</table>";}?> Si cela ne fonctionne toujours pas, donnes-nous le résultat de ce code: while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique)) print_r($row_rsHistorique); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant