PHP 分页

phpserver side programmingprogramming更新于 2025/8/29 10:52:17

什么是分页?

PHP 中的分页是指将大量数据划分为更小、更易于管理的部分(称为"页面")的过程。它通常用于 Web 应用程序中,以便在每页显示有限数量的记录或结果,从而方便用户轻松浏览数据。

处理大型数据集时,分页至关重要,因为在单个页面上显示所有记录可能会导致性能问题,并使用户界面变得过于繁琐。通过实现分页,您可以提升用户体验并优化应用程序的性能。

PHP 分页程序

  • 在您的工作位置创建一个新的 PHP 文件,并使用您想要的名称保存。

  • 这里我们使用 localhost 数据库中包含 121 条记录的 studentdata 表。

示例

这是一个使用 PHP 实现分页的示例,每页显示数据库中 10 条学生数据记录。

<!DOCTYPE html>
<html>
<head>
   <style>
     /* Grid styles */
     .grid-container {
       display: grid;
       grid-template-columns: repeat(3, 1fr);
       grid-gap: 10px;
       margin-bottom: 20px;
     }

     .grid-item {
       background-color: #f2f2f2;
       padding: 10px;
       text-align: center;
     }

     /* Table styles */
     table {
       border-collapse: collapse;
       width: 100%;
     }

     th, td {
       padding: 8px;
       text-align: left;
       border-bottom: 1px solid #ddd;
     }

     th {
       background-color: #4CAF50;
       color: white;
     }

     /* Pagination styles */
     .pagination {
       display: inline-block;
     }

     .pagination a {
       color: black;
       float: left;
       padding: 8px 16px;
       text-decoration: none;
       border: 1px solid #ddd;
     }

     .pagination a.active {
       background-color: #4CAF50;
       color: white;
       border: 1px solid #4CAF50;
     }

     .pagination a:hover:not(.active) {
       background-color: #ddd;
     }
   </style>
</head>
<body>
   <?php
   // 数据库连接详细信息
   $servername = "localhost";
   $username = "root";
   $password = "";
   $dbname = "assignments";

   // 创建连接
   $conn = new mysqli($servername, $username, $password, $dbname);

   // 检查连接
   if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
   }

   // 每页记录数
   $recordsPerPage = 10;

   // 当前页码
   if (isset($_GET['page'])) {
     $currentPage = $_GET['page'];
   } else {
     $currentPage = 1;
   }

   // 计算起始记录索引
   $startFrom = ($currentPage - 1) * $recordsPerPage;

   // 分页获取学生数据
   $sql = "SELECT * FROM studentdata LIMIT $startFrom, $recordsPerPage";
   $result = $conn->query($sql);

   if ($result->num_rows > 0) {
     // Display student data
     echo "<div class='grid-container'>";
     echo "<div class='grid-item'><strong>ID</strong><
/div>";
     echo "<div class='grid-item'><strong>Name</strong><
/div>";
     echo "<div class='grid-item'><strong>Age</strong><
/div>";

     while ($row = $result->fetch_assoc()) {
       echo "<div class='grid-item'>" . $row["id"] . "</div>";
       echo "<div class='grid-item'>" . $row["name"] . "</div>";
       echo "<div class='grid-item'>" . $row["age"] . "</div>";
     }

     echo "</div>";
   } else {
     echo "No records found.";
   }

   // Pagination links
   $sql = "SELECT COUNT(*) AS total FROM studentdata";
   $result = $conn->query($sql);
   $row = $result->fetch_assoc();
   $totalRecords = $row["total"];
   $totalPages = ceil($totalRecords / $recordsPerPage);

   echo "<div class='pagination'>";

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

   echo "</div>";

   // 关闭连接
   $conn->close();
   ?>
</body>
</html>

输出

说明

代码的第一部分使用提供的服务器名称、用户名、密码和数据库名称建立数据库连接。然后检查连接是否成功。接下来,设置每页显示的记录数,并根据 URL 参数确定当前页码。它使用当前页面和每页记录数计算起始记录索引。然后,代码执行数据库查询以获取学生数据,并使用 LIMIT 子句仅检索与当前页面相关的记录。它迭代查询结果并以网格布局显示学生数据。

代码的第二部分处理分页。它执行另一个数据库查询以确定"studentdata"表中的记录总数。它通过将总记录数除以每页记录数并向上舍入来计算总页数。然后,代码使用循环生成分页链接。如果总页数大于 1,则为每个页面生成一个链接。当前页面以"active"类高亮显示。最后,关闭数据库连接,HTML代码也随之关闭。总而言之,这段代码检索并显示学生数据,并提供了页面切换的导航链接。

结论

这段PHP代码演示了如何在PHP中实现分页。它利用MySQL数据库获取学生数据子集,并以网格布局显示。代码根据每页记录数计算总页数,并相应地生成分页链接。用户可以通过点击页面链接浏览数据。此实现通过将大型数据集划分为易于管理的部分,提升了性能并避免了UI的过度拥挤,从而改善了用户体验。它展示了实现分页的基本步骤,包括建立数据库连接、使用分页检索数据以及动态生成分页链接。


相关文章