2014-09-18 37 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;循环后