当前位置:首页 > PHP

php实现的分页

2026-01-14 12:38:54PHP

PHP 实现分页的方法

基本分页逻辑

分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据:

$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$items_per_page = 10;
$offset = ($current_page - 1) * $items_per_page;

// 查询总记录数
$total_items = $db->query("SELECT COUNT(*) FROM table")->fetchColumn();
$total_pages = ceil($total_items / $items_per_page);

// 查询当前页数据
$stmt = $db->prepare("SELECT * FROM table LIMIT :offset, :limit");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':limit', $items_per_page, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll();

分页链接生成

生成分页导航链接时需要考虑边界情况(如第一页和最后一页):

function generate_pagination_links($current_page, $total_pages) {
    $links = [];
    $range = 2; // 显示当前页前后各2页

    // 上一页链接
    if ($current_page > 1) {
        $links[] = '<a href="?page='.($current_page - 1).'">上一页</a>';
    }

    // 页码链接
    for ($i = 1; $i <= $total_pages; $i++) {
        if ($i == 1 || $i == $total_pages || ($i >= $current_page - $range && $i <= $current_page + $range)) {
            $active = $i == $current_page ? ' class="active"' : '';
            $links[] = '<a href="?page='.$i.'"'.$active.'>'.$i.'</a>';
        } elseif ($i == $current_page - $range - 1 || $i == $current_page + $range + 1) {
            $links[] = '<span>...</span>';
        }
    }

    // 下一页链接
    if ($current_page < $total_pages) {
        $links[] = '<a href="?page='.($current_page + 1).'">下一页</a>';
    }

    return implode(' ', $links);
}

使用 Bootstrap 样式

如果需要更美观的分页样式,可以结合 Bootstrap:

function bootstrap_pagination($current_page, $total_pages) {
    $html = '<nav><ul class="pagination">';

    // 上一页
    $disabled = $current_page <= 1 ? ' disabled' : '';
    $html .= '<li class="page-item'.$disabled.'"><a class="page-link" href="?page='.max(1, $current_page - 1).'">&laquo;</a></li>';

    // 页码
    for ($i = 1; $i <= $total_pages; $i++) {
        $active = $i == $current_page ? ' active' : '';
        $html .= '<li class="page-item'.$active.'"><a class="page-link" href="?page='.$i.'">'.$i.'</a></li>';
    }

    // 下一页
    $disabled = $current_page >= $total_pages ? ' disabled' : '';
    $html .= '<li class="page-item'.$disabled.'"><a class="page-link" href="?page='.min($total_pages, $current_page + 1).'">&raquo;</a></li>';

    $html .= '</ul></nav>';
    return $html;
}

AJAX 分页实现

对于现代 Web 应用,可以使用 AJAX 实现无刷新分页:

// JavaScript 部分
$(document).on('click', '.pagination a', function(e) {
    e.preventDefault();
    var page = $(this).attr('href').split('page=')[1];
    loadPage(page);
});

function loadPage(page) {
    $.ajax({
        url: 'ajax_pagination.php',
        type: 'GET',
        data: {page: page},
        success: function(data) {
            $('#results').html(data.results);
            $('#pagination').html(data.pagination);
        }
    });
}
// ajax_pagination.php
$page = $_GET['page'] ?? 1;
// 处理数据查询逻辑...

header('Content-Type: application/json');
echo json_encode([
    'results' => $html_results,
    'pagination' => generate_pagination_links($page, $total_pages)
]);

性能优化建议

对于大数据量分页,避免使用 LIMIT offset, count 方式:

// 优化方法:使用 WHERE 条件替代 LIMIT offset
$last_id = $_GET['last_id'] ?? 0;
$stmt = $db->prepare("SELECT * FROM table WHERE id > :last_id ORDER BY id LIMIT :limit");
$stmt->bindValue(':last_id', $last_id, PDO::PARAM_INT);
$stmt->bindValue(':limit', $items_per_page, PDO::PARAM_INT);

安全注意事项

始终验证和过滤分页参数:

php实现的分页

$current_page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, [
    'options' => [
        'default' => 1,
        'min_range' => 1
    ]
]);

这些方法涵盖了从基础到高级的 PHP 分页实现,可以根据具体需求选择适合的方案。

标签: 分页php
分享给朋友:

相关文章

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUES…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…