Correction status:Uncorrected
Teacher's comments:
使用 mysqli 进行分页数据查询,实现上一页、下一页、中间页码、以前下拉框自选页码查询分页数据,实现分页有以下几点
/**
* 1. LIMIT 0,5 参数的作用: 偏移量与显示数量
* 2. 如何控制每页显示的数量
* 3. 接收GET参数,用p表示当前页数,每页显示5条
* 4. 当前偏移量的计算公式: (页数-1)*每页显示的数量
* offset = (page-1)*num
*/
分页效果:
具体实现如下:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>分页查询</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <?php //导入分页函数库 require '../lib/func_page.php'; //连接数据库 $db = mysqli_connect('127.0.0.1','root','root','php'); //获取请求的页数 $page = isset($_GET['p'])?$_GET['p']:1; //$offset = ($page-1)*5; $num=5; //每页显示的数量 $table = 'staff'; //要查询的表 //$sql = "SELECT * FROM staff LIMIT {$offset},{$num};"; //$res = mysqli_query($db,$sql); //$rows = mysqli_fetch_all($res,MYSQLI_ASSOC); //获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整 //$number = mysqli_query($db,"SELECT COUNT(*) FROM staff"); //list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中 //$pages = ceil($total / $num); //获取到总页数 $pages //执行函数库中的方法,并处理返回的数据 $data = func_page($db,$table,$page,$num); $rows = $data['rows']; $pages=$data['pages']; //上一页 $lpages=(($page-1)==0)? 1 : ($page-1); //下一页 $rpages=(($page+1)>$pages)?$pages:($page+1); ?> <table> <caption>信息表</caption> <tr> <th>ID</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>工资</th> </tr> <!--使用循环得到查询处理过后的数据--> <?php foreach ($rows as $row) :?> <tr> <td><?php echo $row['staff_id']?></td> <td><?php echo $row['name']?></td> <td><?php echo $row['sex']==0?'男':'女'?></td> <td><?php echo $row['age']?></td> <td><?php echo $row['salary']?></td> </tr> <?php endforeach; ?> </table> <div class="pages"> <p> <a href="http://127.0.0.1/4027/index.php?p=1">首页</a> <a href="http://127.0.0.1/4027/index.php?p=<?php echo $lpages ?>">上一页</a> <!--循环列出中间部分的页码--> <?php for ($i=1; $i<=$pages; $i++) :?> <!--将中间显示的页码实现高亮--> <a class="<?php if($page==1) echo ''; else if($page==$i) echo 'heigh'?>" href="http://127.0.0.1/4027/index.php?p=<?php echo $i ?>"><?php echo $i?></a> <?php endfor; ?> <a href="http://127.0.0.1/4027/index.php?p=<?php echo $rpages ?>">下一页</a> <a href="http://127.0.0.1/4027/index.php?p=<?php echo $pages ?>">尾页</a> </p> <form action="" id="change_page"> 第 <select name="p" id="sp" onchange="Change()"> <?php for ($i=1; $i<=$pages; $i++): ?> <option value="<?php echo $i?>" <?php if($_GET['p']==$i)echo 'selected' ?>><?php echo $i?></option> <?php endfor; ?> </select> 页 <button>跳转</button> </form> </div> <script type="text/javascript"> //给下拉列表添加 submit 事件实现选中跳转页面 function Change(){ var change_page =document.getElementById('change_page') change_page.submit() } </script> </body> </html>
Page分页函数封装部分:
<?php /** * Created by PhpStorm. * User: John * Date: 2018/5/2 * Time: 1:00 */ //分页函数封装 if(!function_exists('func_page')){ function func_page($db,$table,$page,$num) { $offset = ($page-1)*5; //显示当前第几页的数据 $sql = "SELECT * FROM staff LIMIT {$offset},{$num};"; //查询数据SQL $res = mysqli_query($db,$sql); //得到查询的数据结果集 $rows = mysqli_fetch_all($res,MYSQLI_ASSOC); //处理结果集,设置显示的结果模式 //获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整 $number = mysqli_query($db,"SELECT COUNT(*) FROM staff"); list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中 $pages = ceil($total / $num); //获取到总页数 $pages //返回分页的数据跟总页数量 return ['rows'=>$rows,'pages'=>$pages]; } }