对分页的一些误解

时间:2015-05-08 13:32:11

标签: php mysql pagination

我试图在一篇博文中从一篇文章到下一篇文章进行分页。问题是当我用ID-1打开一篇文章并点击“下一步”按钮时,我得到一个空白/空白页面。

这是帖子页面,它在blog.php中获取所选帖子的ID。这就是我到目前为止所拥有的。有什么建议吗?

<?php
     // include database connection
     require_once 'database.inc.php';
     $pdo = Database::connect();
       if(isset($_GET['post_id']) && is_numeric($_GET['post_id'])){
                $post_id = $_GET['post_id'];
     // page is the current page, if there's nothing set, default is page 1
     $page = isset($_GET['page']) ? $_GET['page'] : 1;

     // set records or rows of data per page
     $recordsPerPage = 1;

     // calculate for the query LIMIT clause
     $fromRecordNum = ($recordsPerPage * $page) - $recordsPerPage;

     // select all data
     $query = "SELECT * FROM posts WHERE post_id = $post_id LIMIT {$fromRecordNum}, {$recordsPerPage}";

     $stmt = $pdo->prepare( $query );
     $stmt->execute();

     //this is how to get number of rows returned
     $num = $stmt->rowCount();

     //check if more than 0 record found
     if($num>0){                           
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){               

                     echo ' 
                           // post body ';     
                }
    }                                                 

         // *************** <PAGING_SECTION> ***************

             // ***** for 'first' and 'previous' pages
             if($page>1){       
                 // ********** show the previous page
                 $prev_page = $page - 1;
                 echo "
                <a href='" . $_SERVER['PHP_SELF'] . "?page={$prev_page}'>
                    <div class='prev-btn control-nav text-left'>
                        <h5>Previous Post</h5>
                    </div>
                </a>";     
             }
             // find out total pages
             $query = "SELECT COUNT(*) as total_rows FROM posts";
             $stmt = $pdo->prepare( $query );
             $stmt->execute();

             $row = $stmt->fetch(PDO::FETCH_ASSOC);
             $total_rows = $row['total_rows'];

             $total_pages = ceil($total_rows / $recordsPerPage);

             if($page<$total_pages){
                 // ********** show the next page
                 $next_page = $page + 1;
                 echo "<a href='" . $_SERVER['PHP_SELF'] . "?page={$next_page}'>
                    <div class='next-btn control-nav text-right'>
                        <h5>Next Post</h5>
                    </div>
                </a>";
             }
}
?>                       

3 个答案:

答案 0 :(得分:1)

你能在一个有效的网站上展示吗?然后更容易分辨出错误,但是从代码中看起来你在你的锚点href部分中的url是错误的。

$prev_page = $post_id - 1;
<a href='" . $_SERVER['PHP_SELF'] . "?post_id={$prev_page}'>
               <div class='prev-btn control-nav text-left'>
                   <h5>Previous Post</h5>
               </div>
           </a>"

$next_page = $post_id + 1;
     

并且链接与前一个链接相同

因为我不确定你的服务器php自己正在返回什么,你不应该添加第二个?它中的符号,如果它已经有它,你应该使用&amp;我认为获取参数为?仅在脚本文件名后使用一次。或者您要么错过了网址中的ID。

同样空白/空白页面可能会崩溃该页面上的脚本,如果您关闭了错误,您将无法在网页中看到它并且必须转到您的php错误日志文件来查找它们

编辑:因为块引用没有正确显示。

答案 1 :(得分:1)

从您的问题中不是很清楚,但我认为您的问题是这样,您的代码需要设置post_id参数:

if(isset($_GET['post_id']) && is_numeric($_GET['post_id'])){
    $post_id = $_GET['post_id'];
}

但是在您的下一页和上一页链接中,您没有设置post_id参数:

echo "<a href='" . $_SERVER['PHP_SELF'] . "?page={$next_page}'>
    <div class='next-btn control-nav text-right'>
        <h5>Next Post</h5>
    </div>
</a>";

您的代码本质上依赖于显示的单个帖子,由post_id确定。这是我的建议,改变:

 // select all data
 $query = "SELECT * FROM posts WHERE post_id = $post_id LIMIT {$fromRecordNum}, {$recordsPerPage}";

为:

 // select all data
 $query = "SELECT * FROM posts LIMIT {$fromRecordNum}, {$recordsPerPage}";

当然,您将无法展示特定的帖子,但是再次很难知道您实际上想要实现的目标。

答案 2 :(得分:1)

这是因为首先获得$post_id,然后在您放置$page的链接中,该链接不包含您的ID。尝试更改您的nex&amp; prev链接,如下所示:

<a href='" . $_SERVER['PHP_SELF'] . "?post_id=".$prev_page."'>
<a href='" . $_SERVER['PHP_SELF'] . "?post_id=".$next_page."'>

另外,请不要忘记在此处更改$ page的行:

  

$ page = isset($ _ GET ['page'])? $ _GET ['page']:1;

到这个

  

$ page = isset($ _ GET ['post_id'])? $ _GET ['post_id']:1;

这应该可以解决问题。