我试图在一篇博文中从一篇文章到下一篇文章进行分页。问题是当我用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>";
}
}
?>
答案 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;
这应该可以解决问题。