2010-11-17 8 views
0

Pourquoi est-ce que lorsque je regarde le mois de novembre 2010, il voit aussi le mois de 2009? Quelqu'un peut-il m'aider?Quel est le problème avec ce code?

<?php include("db.php"); 
$query = mysql_query("SELECT distinct YEAR(local_date) as year FROM tbl_localnews order by local_date desc"); 
while ($row = mysql_fetch_array($query)) { 
    //$row = array_unique($r); 
    $unique_year = $row['year']; 
    echo($unique_year)."<br>"; 

    $query2 = mysql_query("select distinct monthname(local_date) as month from tbl_localnews where local_date like '$unique_year%' order by local_date desc"); 
    while ($r2 = mysql_fetch_array($query2)) { 
     //$row2 = array_unique($r2); 
     $unique_month = $r2['month']; 
     print("<a href='news.php?month=$unique_month'&year=$unique_year>News for $unique_month</a><br>"); 
     //echo($unique_month); 
    } 
} 
?> 

Ceci est mon écran

<?php 
$year = $_REQUEST['year']; 
$last_date = ""; 
$result = mysql_query("SELECT *,YEAR(local_date) as year FROM tbl_localnews where year(local_date)='".$year."' ORDER BY local_date DESC "); 
//echo '<h1>'.$month.'</h1>'; 
if (mysql_num_rows($result)) { 
    while ($row = mysql_fetch_array($result)) { 
     if ($row['local_date'] != $last_date) { 
      print("<h2>News for ".date('F j, Y', strtotime($row['local_date']))."</h2>"); 
      $last_date = $row['local_date']; 
     } 
     print("<p><b>".$row['local_title']."</b></p>"); 
     print("<p>".$row['local_desc']."</p>"); 
     // print("<p><b>".date('F j, Y',strtotime($row['local_date']))."</b></p>"); 
     //print("<p><b>".$row['local_title']."</b></p>"); 
     //print("<p>".$row['local_desc']."</p>"); 
    } 
    mysql_free_result($result); 
} 
?> 

Répondre

0

Je suppose que vous voyez quelque chose comme

2010<br><a href='news.php?month=November&year=2010'>News for November</a><br> 
2009<br><a href='news.php?month=September&year=2009'>News for September</a><br> 

dans la sortie de votre premier exemple? En effet, nous parcourons chaque année et pour chaque année, vous récupérez les mois:

$query = mysql_query("SELECT distinct YEAR(local_date) as year FROM tbl_localnews order by local_date desc"); 
while($row = mysql_fetch_array($query)) { // loop through each year 
    $unique_year = $row['year']; 
    echo($unique_year)."<br>"; 

    /* get the months for current year */ 
    $query2 = mysql_query("select distinct monthname(local_date) as month from tbl_localnews where local_date like '$unique_year%' order by local_date desc"); 
    while($r2 = mysql_fetch_array($query2)) { // loop through each month for the current year 
     $unique_month = $r2['month']; 
     print("<a href='news.php?month=$unique_month'&year=$unique_year>News for $unique_month</a><br>"); 
    } 
} 

si vous avez 2 enregistrements avec des valeurs uniques année dans votre table tbl_localnews que vous allez finir avec 2 lignes dans votre sortie. Si vous voulez seulement 1 enregistrement, ajoutez LIMIT 1 à la fin de votre requête.

j'ai réussi à obtenir ce qui suit pour travailler pour votre page d'affichage:

<?php 

    include("db.php"); 

    $year = $_REQUEST['year']; 
    $month = $_REQUEST['month']; 

    $last_date = ""; 
    $result = mysql_query("SELECT *, YEAR(local_date) as year FROM tbl_localnews where YEAR(local_date)=".$year." AND monthname(local_date) = '".$month."' ORDER BY local_date DESC "); 

    if (mysql_num_rows($result) != 0) { 
     while ($row = mysql_fetch_array($result)) { 
      if ($row['local_date'] != $last_date) { 
       print("<h2>News for ".date('F j, Y', strtotime($row['local_date']))."</h2>"); 
       $last_date = $row['local_date']; 
      } 

      print("<p><b>".$row['local_title']."</b></p>"); 
      print("<p>".$row['local_desc']."</p>"); 

     } 
    } 
    mysql_free_result($result); 

?> 
+0

comment récupérer les mois et l'année? – roly

+0

Que dois-je faire à la zone d'affichage? afin qu'il imprimera le mois et l'année je clique? – roly

+0

@roly vous devez collecter le mois comme vous le faites avec year, ie '$ month = $ _REQUEST ['month'];' et l'ajouter au prédicat de votre requête, ie '... where year (local_date) = '". $ year."' AND mois (local_date) = '". $ month."' ... ' –