Correction status:qualified
Teacher's comments:
1.分页查询的原理
查询语句中 LIMIT 0,5; LIMIT的第一个参数是偏移量,第二个参数是每个页面显示的数据量。而偏移量是有一个计算公式的,如下:
偏移量 = (当前页码-1)*每个页面显示的数量
当前页码则是等于地址栏中的提交变量p;通过提交不同的页码,来获取不同的查询数据,然后循环输出在表格里。
2.分页查询的实现
<!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> <style> table{ text-align: center; width: 40%; border-collapse: collapse; margin: 20px auto; } table,td,th,tr{ border: 1px solid deepskyblue; } table tr:first-child{ background: skyblue; } table caption{ font-size: 1.5em; margin-bottom: 15px; } td,th{padding:5px 10px;} h3{text-align: center;} a{ text-decoration-line: none; display: inline-block; border: 1px solid gray; color: deepskyblue; border-radius: 5px; box-shadow: 1.5px 1.5px 1.5px lightskyblue; margin-left: 5px; padding:0 5px; font-weight: normal; } a:hover, button:hover{ background: skyblue; color: white; } form{display: inline-block;} form select,button{ color: deepskyblue; box-shadow: 1.5px 1.5px 1.5px lightskyblue; margin-left: 5px; padding:2px 5px; } </style> <body> <?php /** * 分页查询原理 * 地址栏 $p * 偏移量 显示数量 $num limit0,5 $_GET[$p] */ $pdo = new PDO('mysql:host=localhost;dbname=php','root','root'); $pdo->query('set names utf8'); $page = isset($_GET['p']) ? $_GET['p'] : 1;//从地址栏获取当前页码 $num = 5;//每页显示数量 $offset = ($page-1)*$num; //偏移量 $sql = "SELECT * FROM `staff` LIMIT {$offset}, {$num};"; $stmt = $pdo->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt = $pdo->prepare("SELECT * FROM `staff`; "); $stmt->execute(); $pages = ceil(count($stmt->fetchAll(PDO::FETCH_ASSOC))/$num); ?> <table> <caption>员工信息表</caption> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>工资</th> </tr> <?php foreach($result as $row):?> <tr> <td><?php echo $row['staff_id'];?></td> <td><?php echo $row['name'];?></td> <td><?php echo $row['age'];?></td> <td><?php echo $row['salary'];?></td> </tr> <?php endforeach;?> </table> <h3> <a href="demo.php?p=<?php echo $page>1 ? $page-1 : 1;?>">上一页</a> <a href="demo.php?p=<?php echo $page=1?>">首页</a> <a href="demo.php?p=<?php echo $page=1?>">1</a> <a href="demo.php?p=<?php echo $page=2?>">2</a> <a href="demo.php?p=<?php echo $page=3?>">3</a> <a href="demo.php?p=<?php echo $page=4?>">4</a> <a href="demo.php?p=<?php echo $page=$pages ?>">尾页</a> <a href="demo.php?p=<?php echo $page<$pages ? $page+1 : $pages;?>">下一页</a> <form action="demo.php" method="get"> <select name="p" id="page"> <?php for($i=1; $i<=$pages; $i++):?> <option value="<?php echo $i;?>" <?php echo $_GET['p'] == $i? 'selected': '';?> >第<?php echo $i;?>页</option> <?php endfor;?> </select> <button>跳转</button> </form> </h3> </body> </html>
点击 "运行实例" 按钮查看在线实例
总结: 要理解清楚查询语句limit的两个参数,同时还要知道偏移的计算方法。