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

分页链接生成

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

php实现的分页

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 实现无刷新分页:

php实现的分页

// 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
分享给朋友:

相关文章

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPag…

vue分页实现

vue分页实现

实现Vue分页的几种方法 使用Element UI的分页组件 安装Element UI库后,可以直接使用其分页组件。以下是一个基本示例: <template> <div>…

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

vue elementui实现分页

vue elementui实现分页

使用 Element UI 实现 Vue 分页功能 Element UI 提供了 el-pagination 组件,可以方便地实现分页功能。以下是具体实现步骤: 安装 Element UI 确保项目…

vue搜索过后实现分页

vue搜索过后实现分页

实现 Vue 搜索后分页的方法 数据绑定与搜索逻辑 在 Vue 组件中定义数据属性,包括原始数据列表、搜索关键词、分页相关参数: data() { return { originalL…