Max33 Posté 18 Juillet 2008 Posté 18 Juillet 2008 (modifié) Salut à toutes et à tous, Voilà comme vous devez l'entendre souvent ici, je débute dans le langage PHP. Je suis entrain de faire mon propre site dynamique Mon problême est la façon que j'ai choisit pour afficher les news du site voici un exemple : Aujourd'hui - news1 - news2 - news3 - news4 Hier - news5 - news6 Avant hier - news7 - news8 - news9 - news10 Donc en faite j'aimerai que si la date est egal à "date("Y/m/d")" , on affiche la date (une seul fois) puis les news de cette date, ensuite si la date vaut "date('Y-m-d', time() - 3600 * 24)" par exemple, on affiche la date (une seul fois) et les news en relation à cette date etc... Je sais pas du tout comment je peux faire ça avec des boucles :s suis-je pas assez logique ? Je sais pas, j'ai pas eu de problême pour le reste mais là Si quelqu'un pourrait m'éclairer Merci d'avance. Modifié 18 Juillet 2008 par Max33
Sarc Posté 19 Juillet 2008 Posté 19 Juillet 2008 Bonjour, Il est possible de faire la chose en deux fois... J'imagine que tu as une table dans ta BDD avec deux colonnes "date" et "nom" pour la news... Je ne sais pas si c'est réellement ça, mais vu que tu ne donnes pas d'infos là-dessus, je vais partir comme si c'était ça. Après extraction de toutes les news de ta table, avec les dates $requete = "SELECT date, nom FROM news";$resultat_requete = mysql_query($requete); Je ne sais pas vraiment comment tu sors tes données de ta base, mais on va dire que tu fais comme ça : while($donnees = mysql_fetch_array($resultat_requete)){ $news[$donnees['date']][] = $donnes['nom'];}foreach($news as $date=>$tab){ echo "date : $date<br>"; foreach($tab as $val) { echo $val."<br>"; }}
mikaweb Posté 19 Juillet 2008 Posté 19 Juillet 2008 Tu veux un système comme ça : http://www.gunners.fr/actualite.html ? Si c'est le cas on peut regarder via MP.
captain_torche Posté 19 Juillet 2008 Posté 19 Juillet 2008 Le principe est simple : au début de ta boucle, tu intialises une variable date. A chaque itération de la boucle, tu compares la date de ton résultat SQL avec celle de ta variable : si elle est différente, tu affiches la date, et tu mets la variable à jour. Ca donnerait quelque chose du genre : <?php$sql = "SELECT date, texte FROM news ORDER BY date DESC";$req = mysql_query($sql);$date = '';while($row = mysql_fetch_assoc($req)) { if($row['date'] != $date) { echo '<h2>'.$row['date'].'</h2>'; $date = $row['date']; } echo '<p>'.$row['texte'].'</p>';}?> Mikaweb: pourquoi voir ça par MP ? Nous sommes sur un forum, le but est avant tout participatif.
Max33 Posté 19 Juillet 2008 Auteur Posté 19 Juillet 2008 (modifié) Le champ ou je stocke ma date sous ce format 2008/07/19 est "datereal" et pour le titre de la news le champ est "titreaccueil" Je veut juste afficher la date (avec le second format que j'enregistre quand je poste ma news, qui est sous se format (lundi 1 janvier 2000) le nom du champ est "date") puis les titres des news. Voici un exemple de ma requete sql $news1 = 'SELECT * FROM youps3_news WHERE Actif="1" ORDER BY datereal DESC LIMIT 20';$news2 = mysql_query ($news1); $news3 = mysql_fetch_array ($news2); Je viens de tester ta façon captain_torche mais le problême c'est que sa affiche la date pour tout (ou alors je l'ai mal édité), alors que j'aimerai afficher la date puis tout les articles de cette date et ainsi de suite. Je vais essayer celle de sarc mais c'est la première fois que j'utilise "foreach" Merci encore pour vos message. [EDIT] Voilà je viens de tester la technique de sarc est sa marche parfaitement Voici l'apercu du projet: http://91.121.53.135/index.ps3 Modifié 19 Juillet 2008 par Max33
Max33 Posté 20 Juillet 2008 Auteur Posté 20 Juillet 2008 (modifié) Rebonjour, En faite je viens de m'apercevoir que la dernière news que je venais de posté ne s'affiche pas :s Sa commence à partir de la 2eme Voici mon bout de code modifier à ma sauce $requete = 'SELECT * FROM youps3_news WHERE Actif="1" ORDER BY datereal DESC LIMIT '.$premiereEntree.', '.$messagesParPage.''; $resultat_requete = mysql_query($requete); $news3 = mysql_fetch_array ($resultat_requete);while($news3 = mysql_fetch_array($resultat_requete)) { $news[$news3['date']][] = $news3['titreaccueil']; } foreach($news as $date=>$tab) { if($date == $datenow){$date2 = "Aujourd'hui";}else{$date2 = $date;} echo '<table width="205" border="0" cellspacing="0" cellpadding="1"><tr><td class="NewsDate"><img src="Images/Spacer.gif" width="1" height="5" /><br />- '.$date2.'</td></tr>'; foreach($tab as $val) { $newslien1 = 'SELECT * FROM youps3_news WHERE titreaccueil="'.$val.'"'; $newslien2 = mysql_query($newslien1); $newslien3 = mysql_fetch_array ($newslien2); $url = $newslien3['titre']; echo '<tr><td class="NewsTt"><a href="article-'.$newslien3[id].'-'.mon_urlencode($url).'.ps3">'.$val.'</a></td></tr>'; } echo '</table>'; } Pour rester un peu plus clair, voici celui de sarc un peu modifié : $requete = "SELECT * FROM youps3_news WHERE Actif=1 ORDER BY datereal DESC LIMIT 20";$resultat_requete = mysql_query($requete);$news3 = mysql_fetch_array ($resultat_requete);while($news3 = mysql_fetch_array($resultat_requete)){ $news[$news3['date']][] = $news3['titreaccueil'];}foreach($news as $date=>$tab){ echo "date : $date<br>"; foreach($tab as $val) { echo $val."<br>"; }} les resultats sont les même, c'est à dire que le titre de la dernière news n'est pas affiché, sa commence à partir de la news 2 Un ptit apercu: http://91.121.53.135/NewsAjax2.php?page=1 Modifié 20 Juillet 2008 par Max33
Sarc Posté 20 Juillet 2008 Posté 20 Juillet 2008 Rebonjour, la ligne : $news3 = mysql_fetch_array ($resultat_requete); est en trop... Il le fait déjà dans le while ! Tu dois donc juste enlever cette ligne, et ça sera bon.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant