Correction status:qualified
Teacher's comments:
网站分页:
<!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> .header{ width: 800px; margin:50px auto; } table,th,td{ border: 1px solid black; } table th { background-color: lightskyblue; height:35px; } table{ width:100%; border-collapse:collapse; text-align:center; } table caption { font-size: 1.5rem; margin-bottom: 15px; } table tr td{ height:35px; } table tr{ cursor:pointer; } table tr:hover{ background:lightslategrey; } h3 a{ text-decoration:none; color:#555; font-size:16px; float:left; padding:5px 10px; } h3 a:hover{ color:olive; } </style> </head> <body> <?php // 连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); // 页数公式 $page = isset($_GET['p']) ? $_GET['p'] : 1; $offset = ($page - 1)*10; // 查询语句 $sql = "SELECT * FROM `staff` LIMIT {$offset}, 10;"; //预处理对象 $stmt = $pdo -> prepare($sql); // 执行 $stmt->execute(); // 获取记录数 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // 获取总数据 $stmt = $pdo->prepare("SELECT COUNT(*) FROM `staff`"); //执行 $stmt->execute(); // 获取数据记录数 $total = $stmt->fetchColumn(0); //向上取整 $pages = ceil($total / 10); ?> <!-- // 获取数据 1、连接数据库:$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); 2、编写页面数据(查询公式):$page = isset($_GET['p']) ? $_GET['p'] : 1; 3、创建预处理对象:$stmt = $pdo -> prepare($sql); 4、执行sql语句:$stmt->execute(); 5、获取数据:$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 6、使用foreach遍历到表格中:foreach($rows as $row) // 实现分页 1、执行查询语句:$stmt = $pdo->prepare("SELECT COUNT(*) FROM `staff`"); 2、执行->获取所有数据->向上取整:$stmt->execute();$total = $stmt->fetchColumn(0);$pages = ceil($total / 10); 3、中间代码和页面快速跳转:for循环遍历:for($i = 1;$i <=$pages;$i++) 4、上一页,下一页使用,三元判断:上一页:(($page-1) ==0 ? 1 : ($page-1))。下一页:(($page+1) > $pages ? $pages : ($page+1)) --> <div class="header"> <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['id']?></td> <td><?php echo $row['name']?></td> <td><?php echo $row['age']?></td> <td><?php echo $row['sex'] ? '男' : '女'; ?></td> <td><?php echo $row['salary']?></td> </tr> <?php endforeach;?> </table> <h3> <!-- 首页 --> <a href="http://php.top/fenye/demo.php?p=1">首页</a> <!-- 上一页--> <a href="http://php.top/fenye/demo.php?p=<?php echo (($page-1) ==0 ? 1 : ($page-1)); ?>">上一页</a> <!-- 中间代码--> <?php for($i = 1;$i <=$pages;$i++): ?> <a href="http://php.top/fenye/demo.php?p=<?php echo $i ?>" <?php echo ($i == $page) ? 'style="border:1px solid #ccc;color:lightskyblue;"' : ''; ?>><?php echo $i ?></a> <?php endfor; ?> <!-- 下一页--> <a href="http://php.top/fenye/demo.php?p=<?php echo (($page+1) > $pages ? $pages : ($page+1)); ?>">下一页</a> <!-- 尾页--> <a href="http://php.top/fenye/demo.php?p=<?php echo $pages ; ?>">尾页</a> <!--页面快速跳转--> <form action="" method="get"> <select name="p" id=""> <?php for($i = 1 ; $i <= $pages; $i++): ?> <!-- if($page == $i){echo 'selected';} 把页码显示被选中的状态 --> <option value="<?php echo $i; ?>"<?php if($page == $i){echo 'selected';} ?>><?php echo $i; ?></option> <?php endfor; ?> </select> <button>跳转</button> </form> </h3> </div> </body> </html>
点击 "运行实例" 按钮查看在线实例
分页查询的原理:
获取get参数:url?p=6
到数据库获取数据的总数据
每页要显示多少条数据
当前第是几页
起始页
末页
获取偏移量公式:(页数-1)*每页显示的数量(offset = (page-1)*num)
偏移量计算:
$sql = "SELECT * FROM `staff` LIMIT 0, 10;"; 这条语句的意思是:从第0数据开始到第十个数据结束,如果搜索下一页,那就要改变 0 的数字:计算公式: (页数-1)*每页显示的数量。