当前位置:首页 > PHP

php实现分页功能

2026-02-27 11:12:20PHP

PHP实现分页功能

基础分页实现

使用MySQL的LIMIT子句结合PHP变量实现分页。假设每页显示10条数据:

$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start = ($page - 1) * $perPage;

$sql = "SELECT * FROM table_name LIMIT $start, $perPage";
$result = $conn->query($sql);

计算总页数

获取总记录数并计算总页数:

$totalQuery = "SELECT COUNT(*) as total FROM table_name";
$totalResult = $conn->query($totalQuery);
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $perPage);

生成分页链接

创建分页导航链接:

for ($i = 1; $i <= $totalPages; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}

改进的分页类

封装一个可复用的分页类:

class Pagination {
    private $perPage;
    private $page;
    private $totalRows;

    public function __construct($perPage = 10) {
        $this->perPage = $perPage;
        $this->page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    }

    public function getOffset() {
        return ($this->page - 1) * $this->perPage;
    }

    public function setTotalRows($total) {
        $this->totalRows = $total;
    }

    public function getTotalPages() {
        return ceil($this->totalRows / $this->perPage);
    }

    public function getLinks() {
        $links = '';
        $totalPages = $this->getTotalPages();

        for ($i = 1; $i <= $totalPages; $i++) {
            $links .= "<a href='?page=$i'>$i</a> ";
        }

        return $links;
    }
}

使用分页类

$pagination = new Pagination(10);
$sql = "SELECT * FROM table_name LIMIT {$pagination->getOffset()}, {$pagination->perPage}";
$result = $conn->query($sql);

$totalQuery = "SELECT COUNT(*) as total FROM table_name";
$totalResult = $conn->query($totalQuery);
$pagination->setTotalRows($totalResult->fetch_assoc()['total']);

echo $pagination->getLinks();

Bootstrap分页样式

使用Bootstrap美化分页导航:

public function getBootstrapLinks() {
    $html = '<nav><ul class="pagination">';
    $totalPages = $this->getTotalPages();

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

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

AJAX分页实现

使用jQuery实现无刷新分页:

$(document).on('click', '.page-link', function(e) {
    e.preventDefault();
    var page = $(this).attr('href').split('=')[1];

    $.ajax({
        url: 'load_data.php',
        type: 'GET',
        data: {page: page},
        success: function(data) {
            $('#content').html(data);
        }
    });
});

分页最佳实践

确保对用户输入进行验证,防止SQL注入:

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

考虑使用预处理语句提高安全性:

php实现分页功能

$stmt = $conn->prepare("SELECT * FROM table_name LIMIT ?, ?");
$stmt->bind_param("ii", $start, $perPage);
$stmt->execute();

对于大型数据集,考虑使用缓存或优化查询性能。

标签: 分页功能
分享给朋友:

相关文章

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…

前端vue登录功能实现

前端vue登录功能实现

登录功能实现步骤 在Vue中实现登录功能通常需要结合后端API,以下是关键步骤和代码示例: 创建登录表单组件 <template> <div> <for…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

原生实现vue功能

原生实现vue功能

原生 JavaScript 实现 Vue 核心功能 使用原生 JavaScript 模拟 Vue 的核心功能(如数据绑定、虚拟 DOM、响应式更新等),可以通过以下方式实现: 数据响应式系统 通过…

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…