说明:
沿用“PHP PDO 数据查询、删除实例”(http://hanyufeng.php.cn/blog/detail/2180)的代码,实现了分页显示。
运行效果:
要点:
分页记录起始位置的计算
分页数的计算
无分页参数或为0时的处理
上一页、下一页为首页、尾页时的处理
示例源码:
<?php $pageTitle = '用户信息列表'; include 'inc/header.php'; //连接数据库 require 'inc/connect.php'; $page = $_GET['page']; $page = ($page == 0 ) ? 1 : $page;//处理无page参数或为0的情况 //参数初始化 $totalNum = 0;//记录总数 $pageNum = 10;//设定每页数量 $pageCount = 0;//分页总数 $offset = $pageNum * ($page-1);//startIndex //查询用户信息表user $sql = "SELECT `id`,`name`,`email` FROM user limit $offset,$pageNum"; //创建查询语句 $rows = []; //创建查询结果容器,初始为空数组,该数组最终会成为一个二维数组,与数组表对应 try { $pdo_stmt = $pdo->query($sql);//查询 if ($pdo_stmt->rowCount() > 0) {//如果数据不为空 $i =0; while ($row = $pdo_stmt->fetch()) { //从结果集的第一条记录开始抓取数据到绑定的变量中 //继续沿用$rows数组保存数据,以便重复使用输出数据到页面的代码 $rows[$i] = ['id'=>$row['id'],'name'=>$row['name'],'email'=>$row['email']]; $i++; } } else { echo '<p style="color:red">当前表中没有数据~~</p>'; } } catch (PDOException $e) { echo '<p>查询失败:'.$e->getMessage().'</p>'; } ?> <!--创建表格用来展示用户数据--> <!--<div class="container">--> <div class="row"> <div class="col-md-12 text-center"> <h3>用户信息表</h3> <table class="table table-bordered"> <tr class="h5 bg-info"> <!-- <td>ID</td><td>姓名</td><td>邮箱</td>--> <td>ID</td><td>姓名</td><td>邮箱</td><td>操作</td> </tr> <!-- 1.下面循环输出用户信息,用foreach()的替代语法,请尽快熟悉这种写法,以后写模板就靠这个玩意了 2. 替代语法的目标就是一个: 干掉php代码中的大括号,因为html与php混写的时候,不断的切换会有很多大括号 3. 过多的大括号,即不利于代码整洁,也容易出错,不利于代码维护 --> <?php foreach ($rows as $row) : ?> <tr> <td><?php echo $row['id'] ?></td> <td><?php echo $row['name'] ?></td> <td><?php echo $row['email'] ?></td> <!-- 添加编辑和删除操作时,用链接式的按钮更合适--> <td> <a class="btn btn-success" href="view.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">详细</a> <a class="btn btn-primary" href="edit.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">编辑</a> <a id="delete" class="btn btn-danger" href="delete.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">删除</a> </td> </tr> <?php endforeach;?> </table> </div> </div> <!--</div>--> <nav aria-label="Page navigation" class="text-center"> <ul class="pagination"> <?php $sql = "SELECT count(*) as total FROM user"; $pdo_stmt = $pdo->query($sql);//查询 //获取总数 $totalNum = $pdo_stmt->fetch()['total']; $pageCount = ceil($totalNum/$pageNum);//进一法取整 if($pageCount >1){ //>1 才开始分页 echo '<li> <a href="?page='.($page==1?1:$page-1).'" aria-label="Previous"> <span aria-hidden="true">«</span> </a></li>'; for($i=1; $i<=$pageCount; $i++){ if($page == $i){ echo '<li class="active"><a href="?page='.$i.'">'.$i.'</a></li>'; } else{ echo '<li><a href="?page='.$i.'">'.$i.'</a></li>'; } } //尾页 // echo '<li><a href="#">'.$pageCount.'</a></li>'; echo '<li> <a href="?page='.($page==$pageCount?$pageCount:$page+1).'" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li>'; } ?> </ul> </nav> <div class="row"> <div class="col-md-12 text-right"> <a class="btn btn-info btn-lg" href="register.php" role="button">新建</a> <p></p> </div> </div> <!--输出页尾--> <?php include 'inc/footer.php' ?>