2014-09-18 73 views
0

我從頭開始創建自己的博客,主頁按照發布的時間順序加載最新的帖子。我使用前端控制器調用帖子並將數據存儲在MySQL數據庫中。該網站本身很好,帖子都完美加載沒有問題。問題是讓主頁工作。PHP while while從數據庫中取回發佈數據

我爲主頁創建了幾個PHP函數。他們通常按照ID降序排列帖子(數據庫行),因爲它是一個自動增量字段,並調用它們的數據。然後通過從數據庫最頂端的行中獲取最新帖子,將最新帖子顯示爲頂部的「精選帖子」,這是最新的帖子。

而且工作正常 - 當我回應結果時,它顯示最新的帖子,就像我想要的一樣。

在此之下,我想爲兩個帖子並排放置兩個帖子,在第一個帖子之前。所以我做了這個函數來調用它們:

function fetch_rest_posts_1($conn) { 

$stuff = $conn->query("SELECT * FROM table WHERE is_post = 1 ORDER BY id DESC LIMIT 1,2"); 

    while ($row = $stuff->fetch_array()) { 
     $i=1; 
     return '<div id="post_'.$i.'" style="width:308px;height:215px;padding:5px"> 
       <h2>'.$row['title'].'</h2> 
       <p>'.date('d/m/Y',strtotime($row['published_date'])).' by '.$row['author'].' | <a href="http://www.domainname.com/'.$row['uri'].'#disqus_thread"></a></p> 
       <p>'.$row['meta_description'].'</p> 
       </div>'; 
       $i++; 

    } // style="white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis" 

} 

,它實際上沒有工作的偉大,當我呼應的結果,顯示了我想要的一切,但它只能顯示一個DIV,而不是兩個。當我使用SQL查詢並直接將它輸入到phpMyAdmin中時,它給了我兩行。我做錯了什麼?

(我把自動增加有$我,這樣我可以隔離每個箱子,後來改變了風格。)

+3

'return'退出函數,它不走到另一個循環。 – Eternal1 2014-09-18 18:54:10

+0

Damnit。回聲呢? – jonbaldie 2014-09-18 18:56:44

+0

你每次循環時都會聲明$ i,如果你再次聲明它,$ i將永遠不會增加。取出$ i = 1; ...以及@TwiStar所說的...... – 2014-09-18 18:59:59

回答

1

你的問題是由循環return語句引起的。您應該在函數的頂部添加$return = '',在函數結束時將return替換爲$result .=return $result

另外,循環計數器$i在每次迭代中都被重置。將初始分配移出循環。

編輯:.=是故意的,以追加到$result代替與從下一個數據集構成的另一個值替換它。

+0

謝謝安迪,工作很好。Btw應該在你的第二句中是$ result =''。 – jonbaldie 2014-09-18 19:06:07

0

這是因爲回報會停止函數的執行試試這個方法:

function fetch_rest_posts_1($conn) { 
    $stuff = $conn->query("SELECT * FROM table WHERE is_post = 1 ORDER BY id DESC LIMIT 1,2"); 
    $post = array(); 
    while ($row = $stuff->fetch_array()) { 
     $post[] = $row; 
    } 
    return $post; 
} 

因此函數的目的是剛剛得到的數據,這樣你就可以在以後打印:

$row = fetch_rest_posts_1($conn); 
for($i = 0; count(row); $i++){ 
echo '<div id="post_'.$i.'" style="width:308px;height:215px;padding:5px"> 
     <h2>'.$row[$i]['title'].'</h2> 
     <p>'.date('d/m/Y',strtotime($row['published_date'])).' by '.$row[$i]['author'].' | <a href="http://www.domainname.com/'.$row[$i]['uri'].'#disqus_thread"></a></p> 
     <p>'.$row[$i]['meta_description'].'</p> 
     </div>'; 
} 
0

發起$i外循環和使用echo()代替return() return()斷環 或使用

$result .= '<div id="post_'.$i.'" style="width:308px;height:215px;padding:5px"> 
       <h2>'.$row['title'].'</h2> 
       <p>'.date('d/m/Y',strtotime($row['published_date'])).' by '.$row['author'].' | <a href="http://www.domainname.com/'.$row['uri'].'#disqus_thread"></a></p> 
       <p>'.$row['meta_description'].'</p> 
       </div>'; 

return $result;循環後