使用分页为博客帖子制作“返回”/“上一页”链接的好方法

时间:2013-01-06 16:47:17

标签: php

这篇文章已经结束,但我认为我可以通过一些简单的分页来分享解决这个问题的方法。

我将在这里展示的内容我将完整发布,以便其他人可以更容易地使用它,如果他们和我一样被困在同一部分。

我在这里使用的是来自数据库的id来获取我的帖子,你可以使用标题和诸如此类,我也将它排序以显示第一个帖子。如果你想显示最后一个,只需将ASC改为底部的DESC。

<?PHP
//Connect to the database
//Add your file here

//Get a record count of our database for pagination
$record_count = $db->query("SELECT * FROM posts");
//Number of posts displayed
$per_page = 2;
//Number of pages
$pages = ceil($record_count->num_rows/$per_page);
//Get page number
if(isset($_GET['p']) && is_numeric($_GET['p'])) {
$page = $_GET['p'];
}else{
$page = 1;
}
if($page<=0)
$start = 0;
else
//Make the controls to switch pages
$start = $page * $per_page - $per_page;
$prev = $page - 1;
$next = $page + 1;
//Display the blog posts on the page
$query = $db->prepare("SELECT post_id, title, LEFT(message, 100) AS message, posted FROM posts ORDER BY post_id ASC LIMIT $start, $per_page");
$query->execute();
$query->bind_result($post_id, $title, $message, $posted);
?>

然后你喜欢的任何HTML代码,divs,p和什么不是,最后我只是回应它们,这里缺少一些代码,但这只是我自己的代码来显示我自己的博客文章及其变量。要获得底部的下一个和上一个链接,请使用:

 <?PHP
            if($prev > 0) {
                echo "<a href='index.php?p=$prev'>Prev</a>";
            }
            if($page < $pages) {
                echo "<a href='index.php?p=$next'>Next</a>";
            }
        ?>

1 个答案:

答案 0 :(得分:2)

假设您的id字段是您的主要数字键,而不是使用id++id--来获取下一个/上一个项目,只需使用当前ID作为参考。这将阻止您访问不存在的id

当前项目的SQL -

SELECT * FROM blogposts WHERE id = '$id'

下一步项目的SQL -

SELECT * FROM blogposts WHERE id > '$id' ORDER BY id ASC LIMIT 1

上一个项目的SQL -

SELECT * FROM blogposts WHERE id < '$id' ORDER BY id ASC LIMIT 1

如果您在最后/第一项,并且您请求prev / next项,则这些查询将返回空结果,因为没有id小于1的项目或超过最大的id

请注意,我正在使用LIMIT关键字来确保我只获得一个项目作为回报;具有更大或更小id值的项目。查询已按id字段排序,因此我们将从表中获取连续项。