Heim  >  Artikel  >  Backend-Entwicklung  >  浅谈PHP第五弹---分页之九阳神功_PHP教程

浅谈PHP第五弹---分页之九阳神功_PHP教程

WBOY
WBOYOriginal
2016-07-13 17:50:33861Durchsuche

上文中http://www.BkJia.com/kf/201204/128413.html我给大家讲了递归函数的运行机制及使用,不知道大家是否明白,若不明白可以在下面跟帖提问,我会随时帮助大家解答。

这两天有很多同学在提问问题的时候在分页上面除了问题,那么今天我来给大家详细说下分页技术的应用:

我们经常会在一些web应用中看到漂亮的分页,

点击下一页就会显示后一页的内容,这样是不是页面美观不少呢。

好,看完本文的讲解相信同学们也能写出漂亮的分页来

现在我有一张数据表,表名为mytable,有以下数据:



id  name  pass  age  sex
1  狗蛋 wrw7921sqa5eb72c92a549dd5avfr112  20  1
2  高富帅 vdf79218965eb72c92a549dd5a334534  20  0
3  捷哥 gbj792saa65eb72c92a549dd5avfd321  22  1
4  兄弟连 45379218965eb72ccdd549dd5a330342  24  1
5  lampbrothers cdc79218965eb72c92a549dd5vsfdwsx  24  1
6  lamp ret79218965eb72c92a549dd5a33bgyt  25  0
7  php 123qwe18965eb72c92a549dd5a330875  26  1
8  mysql 76e79218965eb72c92a549ddvfdd0dsa  28  0
9  apache 54ebnm18965eb72c92a549dd5a330cxz  30  1


首先,先来做一个分页链接
echo "上一页
";
echo "下一页
";
echo "共计条";
?>

我们思考一下,点击上一页,当前页码减一,并且会显示上一页的数据

假设,当前页码我们用一个变量$page来控制,那么上一页是不是就应该是$page-1

下一页的页码是$page+1

所以我们上面的链接应该改为:
echo "上一页
";
echo "下一页
";
?>


这样大家就应该很明白了,怎么去传上一页和下一页的页码

但是在实际的开发中,一个web软件不可能让用户来传页码,用户访问页面只会访问到index.php

所以我们会对这种情况做相关处理:
$page = !empty($_GET['page'])?$_GET['page']:1
?>

此时我们的$page如果没有给定,即$_GET['page']为空,我们直接给$page赋值为1

下一步,我们来把数据分开显示,也就是说第一页只显示第一页的数据,第二页只显示第二页的数据........第N页只显示第N页的数据

这样的话,我们需要对sql语句进行操作,要想分页显示数据,我们就用到了sql语句的limit子句

好,那我们想,如果每页数据只显示5条记录,sql语句应该什么样子的?

那么我们的

第一页:
显示的第一条到第五条的数据是不是就应该是“limit 0,5”;

第二页:
显示的第六条到第十条的数据就应该是“limit 5,5”;

第三页:
显示的第十一条到第十五条的数据就应该是“limit 10,5”;

..............

我们看一个规律,

仔细观察,我们的第n页是不是就应该是

limit (n-1)*每页显示的条数,每页显示的条数

也就是说,我们需要的数据有当前页码以及每页显示条数

好,刚刚我们说了,当前页码我们可以通过$_GET['page']来获取,那么每页显示条数我们可以用一个变量来定义,熟练的同学可以定义一个常量,把它放到配置文件中去,

这里我们使用变量来定义,设定页大小为5

$page = $_GET['page'];

$pagesize = 5;

那组装的sql语句的limit子句就应该是“ limit ($page-1)*$pagesize,$pagesize”

此时,我们已经能够对数据进行分页处理了,

但是如果想获取总共多少页,我们还需要从数据库中去统计总计多少条记录

$sql = "select count(*) from mytable";

$result = mysql_query($sql);

我们可以把执行的结果使用mysql_result()函数取出。

$count = mysql_result($result,0);

好,那当前我们的记录总数就为$count,

现在我们的总数据条数为9条,每页显示5条,大家想想,我们的总页数是不是应该是2页,也就是ceil(9/5)=2

那总页数计算公式为ceil($count/$pagesize),


好,我们需要的所有数据都已经得到,最终组装成sql语句,并显示出来,应该为:
//设置每页显示多少条记录
$pagesize = 5;
//获取当前页码
$page = !empty($_GET['page'])?$_GET['page']:1;
//总共记录条数
$sql = "select count(*) from mytable";
$result = mysql_query($sql);
$count = mysql_result($result,0);
//总共有多少页
$page_count = ceil($count/$pagesize);
//判断当前给定页码是否越界
if($page $page=1;
}elseif($page>$page_count){
$page=$page_count;
}
//开始组装sql语句
$sql = "select id,name,age,sex from mytable limit ".($page-1)*$pagesize.','.$pagesize;
//发送sql语句
$result = mysql_query($sql);
//输出表格
echo "

";
echo "";
echo "";
echo "";
//定义性别数组
$sex = array('男','女');
//遍历输出结果集
while($row = mysql_fetch_assoc($result)){
echo "";
echo "";
echo "";
echo "";
[backcolor=#ffffff][color=#008ef1]echo "";[/color][/backcolor]
}
echo "
用户名 年龄 性别
".$row['name']."".$row['age']."".$sex[$row['sex']]."
";
//加分页显示连接
$up = (($page-1) $down = (($page+1)>$page_count)?$page_count:($page+1);
echo "上一页 ";
echo "下一页 ";
echo "共计".$page_count."页 ";
echo "当前第".$page."页 ";
echo "共计".$count."条记录";
?>
好,这样我们就把分页功能加上了,怎么样,是不是很简单。

我来总结下分页的具体步骤:

第一步:设置页大小(每页显示多少条)

第二步:获取当前页码

第三步:获取总记录条数

第四步:获取总页数

第五步:判断当前给定页码是否越界

第六步:组装sql语句

第七步:发送sql语句给mysql服务器

第八步:遍历结果集输出

第九步:加分页链接

只要记住以上捷哥分页九阳神功的武林秘籍,相信同学们一定能够悠然驰骋PHP的武林杀场

 

作者 zdrjlamp

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478277.htmlTechArticle上文中http://www.2cto.com/kf/201204/128413.html我给大家讲了递归函数的运行机制及使用,不知道大家是否明白,若不明白可以在下面跟帖提问,我...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn