php实现翻页看书
PHP实现翻页功能
实现翻页功能需要结合数据库查询和分页逻辑。以下是一个完整的PHP翻页实现方案:

数据库查询与分页逻辑
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 每页显示记录数
$perPage = 10;
// 获取当前页码
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 计算总记录数
$total = $db->query('SELECT COUNT(*) FROM books')->fetchColumn();
// 计算总页数
$pages = ceil($total / $perPage);
// 确保页码在有效范围内
$page = max($page, 1);
$page = min($page, $pages);
// 计算偏移量
$offset = ($page - 1) * $perPage;
// 查询当前页数据
$stmt = $db->prepare('SELECT * FROM books LIMIT :offset, :perPage');
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$books = $stmt->fetchAll(PDO::FETCH_ASSOC);
分页显示HTML
// 显示数据
foreach ($books as $book) {
echo '<div class="book">';
echo '<h3>' . htmlspecialchars($book['title']) . '</h3>';
echo '<p>' . htmlspecialchars($book['content']) . '</p>';
echo '</div>';
}
// 分页导航
echo '<div class="pagination">';
if ($page > 1) {
echo '<a href="?page=' . ($page - 1) . '">上一页</a>';
}
for ($i = 1; $i <= $pages; $i++) {
if ($i == $page) {
echo '<span class="current">' . $i . '</span>';
} else {
echo '<a href="?page=' . $i . '">' . $i . '</a>';
}
}
if ($page < $pages) {
echo '<a href="?page=' . ($page + 1) . '">下一页</a>';
}
echo '</div>';
样式优化
.pagination {
margin: 20px 0;
text-align: center;
}
.pagination a, .pagination span {
display: inline-block;
padding: 5px 10px;
margin: 0 5px;
border: 1px solid #ddd;
text-decoration: none;
color: #333;
}
.pagination a:hover {
background: #f5f5f5;
}
.pagination .current {
background: #337ab7;
color: white;
border-color: #337ab7;
}
AJAX无刷新翻页
$(document).ready(function() {
$('.pagination a').click(function(e) {
e.preventDefault();
var page = $(this).attr('href').split('page=')[1];
loadPage(page);
});
});
function loadPage(page) {
$.ajax({
url: 'get_books.php',
type: 'GET',
data: {page: page},
success: function(data) {
$('#book-container').html(data.books);
$('.pagination').html(data.pagination);
}
});
}
性能优化建议
使用缓存技术如Redis存储分页数据,减少数据库查询压力。对于大型数据集,考虑使用游标分页而非LIMIT OFFSET方法,后者在大偏移量时性能较差。
实现无限滚动替代传统分页,提升用户体验。监听滚动事件,当用户滚动到页面底部时自动加载下一页内容。
$(window).scroll(function() {
if ($(window).scrollTop() + $(window).height() >= $(document).height() - 100) {
var nextPage = parseInt($('.pagination .current').text()) + 1;
loadPage(nextPage);
}
});







