PHP+MySQL实现简单的分页功能

 

今天对之前的用户管理模块实现了一个简单的分页功能,大致样式如下:

接下来谈谈具体实现的步骤:

1、既然涉及到分页,首先肯定是从数据库获取的数据就有限制,这个限制就是用limit,比如下面这个sql语句:

$sql="select * from users order by id desc limit 0,3";其意思为:从用户表(users)中按降序排列取出从位置0开始的3条数据,即我按照每页3条数据划分;

2、因为每一页的数据都是不同的,而这个模块始终是用户管理模块,其地址栏不能有大的变化,面对成千上万的页码,也不可能变化这么多地址,比如我的地址栏:http://localhost/project/interview_practice/20181017/2018101701/adminuser.php,这个基本上是固定的,所以就需要在上面加参数,比如加个参数p,后面数字表示第几页:http://localhost/project/interview_practice/20181017/2018101701/adminuser.php?p=3

3、以上两条是需要知道的基本条件,先从简单的入手,实现首页:

<a href='adminuser.php?p=1' class='btn btn-info'>首页</a>

上面的地址adminuser.php?p=1是从登录界面跳转过来的地址,首页就这样完成了!

4、接下来实现末页,先思考一个问题,末页是多少页,怎么计算出来?这里就需要用到数据总行数了,先获取数据总行数:

//获取总的数量
$sqltot = "select count(*) as columns from users"; 
$smttot = $pdo->query($sqltot);
$rowstot = $smttot->fetchAll(PDO::FETCH_ASSOC);
$tot =  $rowstot[0]['columns'];

$tot就是获取到的总行数,也可以用第二种方法获取到:

$smttot = $pdo->prepare($sqltot);
$smttot->execute();
$tot=$smttot->fetchColumn();

而每页有3条数据,用ceil()函数进行向上取整获取最后一页的页码:

//每页条数
$length = 3;
$lastPage = ceil($tot/$length);//ceil向上取整

这就是末页地址:

<a href='adminuser.php?p=<?php echo $lastPage;?>' class='btn btn-info'>末页</a>

5、接下来实现比较难对付的上一页、下一页,我们的第一想法很可能是用id来实现分页:比如第一页的数据1,2,3;第二页的数据4,5,6;第三页的数据7,8,9……但是当某条数据被删除了之后,该如何找规律呢?因此,用id分页是不可取的,因为id是没有规律的;而之前讲到的limit是又规律可寻的:limit 0,3;limit 3,3;limit 6,3;limit 9,3……因此我们可以这样来设计:

$sql="select * from users order by id desc limit {$offset},{$length}";

$offset表示当前页数和页面条数的关系:

$offset = ($page-1) * $length;

而当前页面$page可以通过$_GET获取:

$page = $_GET['p'];

因此,我们可以开始实现下一页了,它就是当前页面数+1:

$nextpage = $page+1;

对应的链接:

<a href='adminuser.php?p=<?php echo $prepage;?>' class='btn btn-info'>上一页</a>

而上一页就是当前页面数-1:

$prepage = $page-1;

对应的链接:

<a href='adminuser.php?p=<?php echo $nextpage;?>' class='btn btn-info'>下一页</a>

6、至此,基本的分页功能就实现了,不过还会遇到很多问题,比如页面数可以一直增加到无穷大或减少到无穷小,因此需要对当前页、上一页和下一页做限制,当页面数超过末页时,就让它等于末页;页面数小于首页时,就让它等于首页:

//当前页数
$page = $_GET['p'];
if($page>=$lastPage){
    $page=$lastPage;
}
//下一页
$nextpage = $page+1;
if($nextpage>=$lastPage){
    $nextpage=$lastPage;
}

//上一页
$prepage = $page-1;
if($prepage<=1){
    $prepage=1;
}

7、实现跳转的功能

<span>跳转至&nbsp<input type='text' id='p' class='p' style='width: 30px;height:25px'>页</span>
<button class='btn btn-success' id='b1'>GO</button>

用jQuery实现:

//页面跳转
$('#b1').click(function(){
	val = $('#p').val();
	if(!val){
		alert('请输入页码!');
		}else{
			//alert(val.match(/^\d+$/g));
			if(val.match(/^\d+$/g)){
			location='adminuser.php?p='+val;
			}else{
				//alert('非法字符!');
				}
			}

});

这里需要注意两个地方:一是!val的判断,如果输入值为空,为避免后端出现问题,需要加这个判断,关于!val的用法可以参考这篇文章https://www.jb51.net/article/48481.htm

二是需要对输入的字符串进行判断,输入数字的时候才会跳转!用到了正则匹配。

8、所有功能都实现了,代码如下,都是PHP+HTML混编:

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>用户管理</title>
<link href='bs2/css/bootstrap.min.css' rel="stylesheet" >
<script src="jquery3/jquery-3.0.0.min.js"></script>
<script src="bs2/js/bootstrap.min.js"></script>
</head>
<body>
<div class='container'>
<h1 class='page-header'>用户管理</h1>
<p>
<button class='btn btn-success' onclick="location='index.php'">返回首页</button>
<button class='btn btn-default' onclick="location='logout.php'">退出登录</button>
</p>
<p>
<?php 
require_once('connectdb.php');

//末页
$sqltot = "select count(*) as columns from users"; //获取总的数量
//方法一
$smttot = $pdo->query($sqltot);
$rowstot = $smttot->fetchAll(PDO::FETCH_ASSOC);
$tot =  $rowstot[0]['columns'];
//每页条数
$length = 3;
$lastPage = ceil($tot/$length);//ceil向上取整
//echo $lastPage;

//当前页数
$page = $_GET['p'];
if($page>=$lastPage){
    $page=$lastPage;
}
//下一页
$nextpage = $page+1;
if($nextpage>=$lastPage){
    $nextpage=$lastPage;
}

//上一页
$prepage = $page-1;
if($prepage<=1){
    $prepage=1;
}
$offset = ($page-1) * $length;
//求每页的数据
$sql="select * from users order by id desc limit {$offset},{$length}";
$smt=$pdo->query($sql);
$rows=$smt->fetchAll(PDO::FETCH_ASSOC);
echo "<table class='table table-striped table-hover table-bordered' width='1000px' border='1px' cellspacing='0'>";
echo "<tr>";
echo "<th>用户id</th>";
echo "<th>用户名</td>";
echo "<th>邮箱</th>";
echo "<th>手机号</th>";
echo "<th>操作</th>";
echo "</tr>";
foreach($rows as $row){
    echo "<tr id='{$row['id']}'>";
    echo "<td >$row[id]</td>";
    echo "<td>$row[user]</td>";
    echo "<td>$row[email]</td>";
    echo "<td>$row[number]</td>";
    echo "<td><a href='javascript:' class='btn btn-warning'>修改</a>    <a href='javascript:' class='del' num='{$row['id']}'>删除</a></td>";//href='delete.php?id={$row['id']}'
    echo "</tr>";
}
echo "</table>";
?>
</p>
<p>当前第<?php if($_GET['p']>=$lastPage){$_GET['p']=$lastPage;};echo $_GET['p'];?>页</p>
<p>
<a href='adminuser.php?p=1' class='btn btn-info'>首页</a>
<a href='adminuser.php?p=<?php echo $prepage;?>' class='btn btn-info'>上一页</a>
<a href='adminuser.php?p=<?php echo $nextpage;?>' class='btn btn-info'>下一页</a>
<a href='adminuser.php?p=<?php echo $lastPage;?>' class='btn btn-info'>末页</a>
<button class='btn btn-default'><?php if($_GET['p']>=$lastPage){$_GET['p']=$lastPage;};echo $_GET['p'].'/'.$lastPage;?></button>
<span>跳转至&nbsp<input type='text' id='p' class='p' style='width: 30px;height:25px'>页</span>
<button class='btn btn-success' id='b1'>GO</button>
</p>
</div>
</body>
<script>
//页面跳转
$('#b1').click(function(){
	val = $('#p').val();
	if(!val){
		alert('请输入页码!');
		}else{
			//alert(val.match(/^\d+$/g));
			if(val.match(/^\d+$/g)){
			location='adminuser.php?p='+val;
			}else{
				//alert('非法字符!');
				}
			}

});

//异步删除用户信息
trobjs=document.getElementsByClassName('del');
for(i=0;i<trobjs.length;i++){
	trobjs[i].onclick=function(){
		id=this.getAttribute('num');
		//alert(id);
		xhr=new XMLHttpRequest();
		xhr.open('get','delete.php?id='+id,true);
		xhr.send();
		xhr.onreadystatechange=function(){
			if(xhr.readyState==4){
				r=xhr.responseText;
				//alert(r);
				if(r==1){
					tr=document.getElementById(id);
					tr.style.display='none';
					}
			}
		}
	}
}
</script>
</html>

 

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
【资源说明】 毕业设计基于PHP+MySQL+Apache+Bootstrap的医院管理系统源码+项目说明.zip 本项目是一款基于PHP+MySQL+Apache+Bootstrap的医院管理系统,旨在为医院提供一个高效、安全、便捷的管理平台,包括医院信息管理、患者管理、医生管理、科室管理、药品管理、病历管理等多个模块。通过该系统,医院可以实现对患者、医生、药品等信息的统一管理和查询,提高工作效率和服务质量。 主要功能 - 医院信息管理:包括医院基本信息、科室信息、医生信息等的管理和查询。 - 患者管理:包括患者信息、病历信息等的管理和查询。 - 医生管理:包括医生信息、排班信息等的管理和查询。 - 科室管理:包括科室信息、科室排班信息等的管理和查询。 - 药品管理:包括药品信息、库存信息等的管理和查询。 - 病历管理:包括患者病历、检查报告、诊断记录等的管理和查询。 技术栈 - 前端:Bootstrap、jQuery、Ajax - 后端:PHPMySQL - 服务器:Apache 系统架构 系统采用MVC架构,前端使用Bootstrap框架进行开发,后端使用PHP语言和MySQL数据库进行开发和存储。服务器采用Apache进行部署和管理。系统通过Ajax技术实现前后端的数据交互和页面动态更新。 数据库设计 本系统采用关系型数据库MySQL进行存储,共设计了10张表,分别为: - hospital:医院信息表,包括医院编号、医院名称、医院地址等字段。 - department:科室信息表,包括科室编号、科室名称、科室简介等字段。 - doctor:医生信息表,包括医生编号、医生姓名、医生性别等字段。 - schedule:排班信息表,包括排班编号、医生编号、科室编号等字段。 - patient:患者信息表,包括患者编号、患者姓名、患者性别等字段。 - medical_record:病历信息表,包括病历编号、患者编号、医生编号等字段。 - diagnosis:诊断记录表,包括诊断编号、病历编号、诊断结果等字段。 - prescription:处方表,包括处方编号、病历编号、药品编号、数量等字段。 - medicine:药品信息表,包括药品编号、药品名称、药品单价等字段。 - stock:药品库存表,包括药品编号、库存数量等字段。 安装部署 - 环境要求:PHP5.6+、MySQL5.7+、Apache2.4+ - csdn下载代码并解压,重命名(不要汉字) - 导入数据库:将项目中的`hospital.sql`文件导入到MySQL数据库中 - 修改配置文件:将`config.php`中的数据库连接信息修改为实际的数据库连接信息 - 部署项目:将项目文件放置到Apache的网站目录中,访问`http://localhost/your_project`即可 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值