当前位置:首页 > 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);

安全注意事项

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

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

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

php实现的分页

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

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php队列的实现

php队列的实现

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

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…