<?php
// 连接数据库
$link = mysqli_connect("127.0.0.1", "root", "root", "1909A");
// 分页的第一步:确定每页显示的条数
$pageSize = 3; // 分页的第二步:计算总记录数
$res = mysqli_query($link, "select count(*) as num from student");
$count = mysqli_fetch_assoc($res);
$number = $count['num']; // 分页的第三步:获取当前页
$page = $_GET['p'] ? $_GET['p'] : 1; // 分页的第四步:计算偏移量= (当前页-1)*每页显示的条数
$pageLimit = ($page - 1) * $pageSize; // 书写查询语句
$sql = "select * from student limit $pageLimit,$pageSize";
// 执行SQL语句
$res = mysqli_query($link, $sql);
// 将查询后返回的对象转换为数组
// mysqli_fetch_all(要转换的对象,类型:1 代表关联数组,2代表索引数组)
$data = mysqli_fetch_all($res, 1);
// 计算页数:ceil(总记录数/每页显示的条数)
$pageNum = ceil($number / $pageSize);
// 计算上一页的页码=当前页-1,但是不能小于1
$upPage = $page - 1 < 1 ? 1 : $page - 1;
// 计算下一页的页码=当前页+1,但是小于总页数
$nextPage = $page + 1 > $pageNum ? $pageNum : $page + 1;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bootstrap 实例 - 边框表格</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<a href="add_form.php"><button type="button" class="btn btn-success">添加</button></a>
<table class="table table-bordered">
<caption>1909A班学生信息列表</caption>
<thead>
<tr>
<th>学生编号</th>
<th>学生姓名</th>
<th>年龄</th>
<th>性别</th>
<th>手机号</th>
<th>班级</th>
<th>头像</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php
foreach ($data as $key => $val) {
?>
<tr>
<td><?php echo $val['stu_id'] ?></td>
<td><?php echo $val['stu_name'] ?></td>
<td><?php echo $val['stu_email'] ?></td>
<td><?php echo $val['stu_sex'] ?></td>
<td><?php echo $val['stu_tel'] ?></td>
<td><?php echo $val['class_name'] ?></td>
<td><?php echo $val['stu_photo'] ?></td>
<td>
<button type="button" class="btn btn-danger">删除</button>
<button type="button" class="btn btn-success">修改</button>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
<ul class="pagination">
<!-- 上一页-->
<li><a href="list.php?p=<?php echo $upPage?>">&laquo;</a></li>
<!-- 数字分页-->
<?php
for ($i = 1; $i <= $pageNum; $i++) {
?>
<li><a href="list.php?p=<?php echo $i ?>"><?php echo $i ?></a></li>
<?php
}
?>
<!-- 下一页-->
<li><a href="list.php?p=<?php echo $nextPage?>">&raquo;</a></li>
</ul>
</body>
</html>
a标签如何传参?

a标签传参就是get穿参,格式:<a href='地址?参数名=参数值&&参数名=参数值....'>

总结分页的步骤:

第一步:要确定每页显示几条记录

第二步:知道要分页的数据总共有几条,涉及到count()查询

第三步:获取当前页,a标签会传递过来,使用$_GET接收,要注意,第一次显示列表的时候没有页码,要使用?:设置默认值

第四步:计算偏移量,公式:偏移量=(当前页-1)*每页显示的条数

第五步:执行SQL查询,limit的第一个参数就是第四步计算的结果,第二个参数就是设置的要查询的记录数

第六步:如果是数字分页,则需要计算总页数,公式:总页数=ceil(总记录数/每页显示的条数)

第七步:如果是汉字分页,需要计算上一页、下一页的值,公式:上一页=当前页-1,但是要注意:不得小于1,下一页=当前页+1,但是要注意:不能超过总页数

第八步:循环展示数据,循环展示页码

 

php 原生分页的更多相关文章

  1. mysql原生分页

    select * from table limit (pageNo-1)*pageSize, pageSize; 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数 ...

  2. PDO原生分页

    ** PDO分页** 1.PDO连接数据库 $dbh=new PDO('mysql:host=127.0.0.1;dbname=03a','root','root');//使用pdo 2.接收页码 $ ...

  3. thinkphp 原生分页

    paginate() 是有三个参数: 第一个参数是 $listRows [int],也就是当前的页数 第二个参数是 $simple [boolean], 是否简洁模式或者总记录数 第三个参数是 $co ...

  4. django【原生分页】

    1.urls.py url(r'^page2/',views.page2), 2.views.py from django.core.paginator import Paginator,PageNo ...

  5. PHP原生分页的编写

    <?php $link=mysql_connect("localhost","root","admin",'news')or die( ...

  6. HQL 参数绑定、唯一结果、分页、投影总结(下)

    分页: 在用hibernate封装的分页方法前,我们先回顾一下,Oracle里面原生分页做法 --分页查询 --(pageNo-1)*pagesize=起始行 pageNo*pagesize=结束行 ...

  7. django高级应用(分页功能)

    django高级应用(分页功能) 1.原生分页应用 前端html代码 <!DOCTYPE html> <html lang="en"> <head&g ...

  8. flask 之(三) --- 筛选|分页|过滤

    筛选 查询数据筛选语法:类名.query.筛选符 .all( ):获取结果集:.count( ):获取查询到的对象数量 类名.query.filter(类名.属性.运算符('xxx')).all() ...

  9. 【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式

    1:设置mysql原生分页 # 监控系统首页显示分页 def MyPagination(limitid,offsetid): limitid =str(limitid) offsetid =str(o ...

随机推荐

  1. 基于Autolayout的动画

    在修改了约束之后,只要执行下面代码,就能做动画效果 [UIView animateWithDuration:1.0 animations:^{ [添加了约束的view的父控件 layoutIfNeed ...

  2. nodejs 文件上传服务端实现

    前段时间在做个人项目的时候,用到了nodejs服务端上传文件,现在回头把这个小结一下,作为记录. 本人上传文件时是基于express的multiparty,当然也可以使用connect-multipa ...

  3. 淘大大出了composer镜像 -- 给力

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

  4. 连接docker里面的mysql失败解决

    场景:在虚拟机的docker容器中安装latest版本的mysql之后,在宿主机中使用navicat连接虚拟机中的mysql出现下图报错: 解决方法: 1.首先docker ps命令查看正在运行的容器 ...

  5. feiQ发送信息

    import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import j ...

  6. Dubbo原理解析(非常透彻)

    一.概述 dubbo是一款经典的rpc框架,用来远程调用服务的. dubbo的作用: 面向接口的远程方法调用 智能容错和负载均衡 服务自动注册和发现. 自定义序列化协议 Dubbo 架构中的核心角色有 ...

  7. Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看

    一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...

  8. 使用grpcui测试gRPC服务

    grpcui类似Swagger UI,可以用来测试gRPC服务,使用起来特别简单. 其原理是通过自动发现gRPC服务协议(当然前提是gRPC服务暴露了Protobuf协议),然后启动一个带界面的Web ...

  9. 前端提交数据到node的N种方式

    写在前面 本篇介绍了前端提交数据给node的几种处理方式,从最基本的get和post请求,到图片上传,再到分块上传,由浅入深. GET请求 经典的get提交数据,参数通过URL传递给node,node ...

  10. tar压缩打包实用命令总结

    一.tar常用命令参数 用法:tar [参数] [文件] -v 显示指令执行过程 -c 创建压缩文件 -x 解压文件 -z 通过gzip指令处理文件 -f 指定文件 -C 解压文件到指定目录 -t - ...