2013-01-03 76 views
1

重複的文章我最近發現我的網站上的新聞網頁是重複的新聞文章從所有「可能」的數據庫(你看這裏需要注意:www.darlingtontowntwinning.co.uk/news_&_events出現在網站

我知道,編碼是混亂的,可能過時了,但是,這個網站是爲我們建造的,而且我沒有這些技能(但我正在學習!)來改變整個網站。

有沒有辦法從發生的歷史阻止這一點 - 因爲我相信我已經得到每條記錄的一個來顯示限制:

<div id="right" class="news"> 
<h3>Archive</h3> 
<? $news=$session->getNews("","","",1);?> 
<? while($article=mysql_fetch_array($news)){?> 
<? 
$date = $article['thedate']; 
$year = date('Y', $date); 
$month = date('F', $date); 
?> 
<h4><?=$month." - ".$year;?></h4> 
<nav class="small"> 
<? $innernews=$session->getNews("",$month,$year);?> 
<? while($innerarticle=mysql_fetch_array($innernews)){?> 
<a href="/news/<?=$innerarticle['ftitle']?>" <? if($title==$innerarticle['ftitle']){?> class="active"<? }?>><?=$innerarticle['title']?></a> 
<? }?> 
</nav> 
<? }?> 
</div> 

獲取新聞的功能是:

function getNews($title,$month,$year,$group){ 
global $database; 
return $database->getNews($title,$month,$year,$group);} 

$數據庫 - > getNews功能是:

//get news 
function getNews($title,$month,$year,$group){ 
    if($title){ 
     $q=$this->query("SELECT * FROM ".TBL_NEWS." WHERE ftitle = '$title'"); 
     return mysql_fetch_array($q); 
    }else if($year && $month){ 
    $q=mysql_query("SELECT * FROM ".TBL_NEWS." WHERE (FROM_UNIXTIME(thedate, '%Y') = '$year') AND (FROM_UNIXTIME(thedate, '%M') = '$month') ORDER BY thedate DESC"); 
    return $q; 
    }else if($group){ 
     $q=$this->query("SELECT * FROM ".TBL_NEWS." GROUP BY (FROM_UNIXTIME(thedate, '%Y')),(FROM_UNIXTIME(thedate, '%M')) ORDER BY thedate DESC"); 
     return $q; 
    }else{ 
     $q=$this->query("SELECT * FROM ".TBL_NEWS." ORDER BY thedate DESC"); 
     return $q; 
    } 

}

+1

它顯示「計劃維護通知 - 網頁不可用」。你能把舊代碼備份嗎? –

+1

你需要顯示這個函數getNews,因爲沒有它,我們不知道'$ news = $ session-> getNews(「」,「」,「」,1);'確實選擇並返回記錄 – Popnoodles

+0

@dasfisch I正在編輯網站,現在回來 - 抱歉! –

回答

-2

Welp。這是你的問題。

你的函數說,if($ title)。由於$ title是函數中的必需參數,我認爲PHP將它註冊爲,是的,這是一個設置的變量。所以,基本上會發生什麼,然後,你是否得到一個mysql_fetch_array結果,然後你再次運行mysql_fetch_array。

嘗試:

//in your function getNews() 
if($title){ 
    $q=$this->query("SELECT * FROM ".TBL_NEWS." WHERE ftitle = '$title'"); 
    return $q; 
} 
//rest of function down here 

可以工作。我看到的問題是,這樣做會導致無論哪種情況都會導致功能無法使用。所以要小心!上面的修復程序是確保您獲得更好狀態的代碼。如果你想一劈,試試這個:

<? $innernews=$session->getNews("",$month,$year);?> 
<? foreach($innernews as $innerarticle) {?> 
<a href="/news/<?=$innerarticle['ftitle']?>" <? if($title==$innerarticle['ftitle']){?> class="active"<? }?>><?=$innerarticle['title']?></a> 
<? }?> 

foreach循環應該給你你想要的!

+0

腳本詢問'$ innernews = $ session-> getNews(「」,$ month,$ year);'$ title不涉及,因爲'if($ title)'when'$ title =「」'返回false; – Popnoodles

+0

這是我能看到的唯一能讓他雙打的東西。我也認爲,因爲它被設置爲兩個函數中的必需參數,所以它被作爲一個集合變量傳入,其中沒有任何內容。我不知道他會不會得到一個錯誤?假設我錯了嗎? –

+0

它正在做的是將一個空字符串從一個函數傳遞到另一個函數,沒有任何猜測會使得返回值不爲false。當代碼只有一種行爲方式時,你錯誤地認爲某些東西可能會有所不同。 *我認爲這可能*當比較有確定的結果時是瘋狂的。你不能幫助別人繼續你認爲PHP **可能做的事情,特別是當需要花費幾秒鐘的時間來找出它**做的事情時**每次都沒有偏差。 – Popnoodles

0

的代碼似乎是工作

//get news from group 1 

$news=$session->getNews("","","",1); 

// for each article work out the date 

while($article=mysql_fetch_array($news)) 
    $date = $article['thedate']; 
    $year = date('Y', $date); 
    $month = date('F', $date); 
... 

// then select everything again after working out the date (odd way of doing it) 

$innernews=$session->getNews("",$month,$year); 

// and output each 

如此,是因爲在五月有兩個事件,它的輸出兩次頭。讓我回顧一下......

  • 得到消息的日期(據說)
    • 六月,分組只是1條
    • 1:
      • 輸出頭
      • 選擇文章
    • 輸出文章
    • 五月,2篇文章
    • 1:
      • 輸出頭
      • 選擇物品
      • 輸出文章
    • 2:
      • 輸出頭
      • 選擇物品
      • 輸出的文章

按照預期的方式返回兩個結果五月

試試這個代碼

<div id="right" class="news"> 
<h3>Archive</h3> 
<? 
$news=$session->getNews(); 
$bydate=array(); // articles by date 
while($article=mysql_fetch_array($news)){ 
    $k=date('YF', $date); 
    if (!isset($bydate[$k])) $bydate[$k]=array(); // create sub array 
    $bydate[$k][]=$article; // push article to this sub array 
} 
foreach ($bydate as $date->$articles){ // run through top array 
    ?><h4><?= substr($date,4) . " - " . substr($date,0,4); ?></h4><nav class="small"><? 
    foreach ($articles as $innerarticle){ // now each article within this date 
     ?><a href="/news/<?=$innerarticle['ftitle']?>" <? if($title==$innerarticle['ftitle']){?> class="active"<? }?>><?=$innerarticle['title']?></a><? 
    } 
    ?></nav><? 
} 
?></div> 

,並請更改該組由SELECT * FROM ".TBL_NEWS." GROUP BY (FROM_UNIXTIME(thedate, '%Y')),(FROM_UNIXTIME(thedate, '%M')) ORDER BY thedate DESC沒有表現

function getNews($title,$month,$year,$group){ 

function getNews($title=NULL, $month=NULL, $year=NULL, $group=NULL){ 
+0

無法得到這個工作:\ –