实验12:分页操作 Pagination

MySQL 飞快学 762浏览

PHP分页是非常通用的操作,从数据库中取得的数据过多时,就需要分页。

编写文件 062.php,文件应能显示出下面的页面。

示例页面:http://example.phpsoeasy.com/sakila/country-list.php

PHP-Pagination-01

分页有三个核心操作:获得查询的总数量、根据当前页面获得查询的数据、生成链接,其中难度最大的是生成链接

Step 1: 获得查询的总数量

$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn) die("Connection failed: " . mysqli_connect_error());
$itemsPerPage = 10;

$sql = "SELECT COUNT(*) as `total` FROM `country`";
$rs = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($rs);
$total = $row[0];

$totalPages = ceil($total / $itemsPerPage);

Step 2: 根据当前页面获得查询的数据

$page = (isset($_GET['page']))?$_GET['page']:1;
$start = ($page-1) * $itemsPerPage;
$sql = "select * from country LIMIT $start , $itemsPerPage";
$result= mysqli_query($conn, $sql);

Step 3: 生成链接

常用的分页方式如下图所示:

PHP-Pagination-02

这里使用了最简单的方式,这种方式没能突出显示当前所在的页面。

    <?php foreach(range(1, $totalPages) as $page): ?>
       <a href=?page=<?= $page ?>><?= $page ?></a>
    <?php endforeach; ?>
    <?php foreach(range(1, $totalPages) as $tp): ?>
       <a href=?page=<?= $tp ?>><?= $tp ?></a>
    <?php endforeach; ?>

可以使用模板 if 语句来显示是否是当前页面。

        <?php if (条件) : ?>

        <?php else : ?>
 
        <?php endif ?>

这段代码生成如下的HTML页面

   <a href=?page=1>1</a>
   <a href=?page=2>2</a>
   <a href=?page=3>3</a>
   <a href=?page=4>4</a>
   <a href=?page=5>5</a>
   <a href=?page=6>6</a>
   <a href=?page=7>7</a>
   <a href=?page=8>8</a>
   <a href=?page=9>9</a>
   <a href=?page=10>10</a>
   <a href=?page=11>11</a>

编写文件 063.php,文件应能显示出 customer 表中的姓名和邮件,每页显示50个客户,分页显示。

示例 http://example.phpsoeasy.com/sakila/customer-list.php