您的位置:首页 > 编程语言 > PHP开发

PHP-分页具体实现及代码

2017-04-16 14:22 549 查看

数据分页概述

对大量数据进行分页显示是 Web 开发中最常见的情况,但大多刚开始接触 Web 开发的开发人员,对分页技术往往比较迷惘,本节教程以一个分页显示留言板的数据为例就来演示一下 PHP 中基本的数据分页显示原理。

本节教程需要用到的
PHP基础知识 :

PHP 预定义 $_GET 变量来接收 URL 参数信息,具体参见《PHP $_GET》。
if 流程控制,具体参见《PHP if ... else 流程控制》。
MySQL 数据库表基础知识,具体参见《MySQL 基本概念》。
MySQL 数据查询,具体参见《MySQL Select From 查询数据
MySQL 数据查询,具体参见《MySQL LIMIT 限定查询记录数》。

数据准备

假设储存留言的数据表(guestbook)数据如下:
idnicknameemailcontentcreatetime
1adminadmin@5idev.com留言测试1264167501
2useruser@163.com大家好1264168127
3小明xiaoming@163.com做得好,继续努力。。1264168865
4小张xiaozhang@163.com来看看1264169118
5小丽xiaoli@tom.comhaha1283276566
6Tomtom@gmail.comHello1283336218
7Jackjack@hotmail.comokok1283336315
8adminadmin@5idev.com嗯嗯1283336315
9阿里巴巴alibaba@5idev.com来看看1283337158
10路人甲haha@163.com哈哈哈1283338228
建表 SQL 参考如下:

CREATE TABLE `guestbook` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`nickname` char(15) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`content` text NOT NULL,
`createtime` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

分页原理

目的很简单,就是将较多数据记录,分页显示出来,每一页显示设定的数据条数。

分页显示格式如下:

共 10 条留言 [1] 2 3

该格式比较简单,只显示了总的数据和各个分页数。当前页面显示为 [1] 这样的格式,非当前页面的页数则显示为超链接格式。

PHP 分页技术核心在于确定当前的页数,然后利用 MySQL 的 LIMIT 关键字来指定输出对应的记录数。

如当前是第 1 页时,那么就是 LIMIT 0,4(假设一页输出 4 条记录),第 2 页时,就是 LIMIT 4,4,第 3 页时,就是 LIMIT 8,4 … 依此类推,第 n 页时,就是 LIMIT (n-1)*4,4 。

而当前页数 $p 这个参数,通过 URL 来获取。如 http://127.0.0.1/guestbook/index.php?p=2 这个这个 URL 链接,表示当前为第 2 页,PHP 中通过 $_GET['p'] 来取得对应的页数值 2 。而对于首页,则没有 $p 这个参数,那么就设定为默认值 1 即可。

代码部分

数据库链接及参数设定

    //数据库连接
    $con = @mysqli_connect("127.0.0.1","root","root","gbook");
    if(!$con){
        die("数据库连接错误".mysqli_connect_error());
    }
    mysqli_query($con,"set names 'utf8'");
    //显示每页的留言数
    $pagesize = 4;

输出当前页数据

//确定页数p参数
@$p = $_GET['p']?$_GET['p']:1;
//数据指针
$offset = ($p-1)*$pagesize;
//查询本页现实的数据
$query_sql = "select * from guestbook order by id desc limit $offset,$pagesize";
# echo $query_sql;
$result = mysqli_query($con,$query_sql);
//循环输出
while($gblist = mysqli_fetch_array($result)){
echo  '<a href="',$gblist['nickname'],'">',$gblist['nickname'],'</a>';
echo  '发表于:',date("Y-m-d H:i",@$gblist[createtime]),'<br/>';
echo  '内容:',$gblist['content'],'<br/><hr/>';
}


确定当前页参数 $p 中,使用了一个三元运算符:

$p = $_GET['p']?$_GET['p']:1;
可以这么通俗的理解该运算符:$_GET['p'] 存在吗?如果存在,那么 $p = $_GET['p'] ,如果不存在,那么 $p = 1 。

接下来就是读取当前页面显示数据的具体代码,该部分可参考《MySQL Select From 查询数据》。

输出分页格式

//分页代码
//计算留言总数
$count_result = mysqli_query($con,"select count(*) as count from guestbook");
$count_array = mysqli_fetch_array($count_result);

//计算总的页数
$pagenum = ceil($count_array['count']/$pagesize);
echo '共',$count_array['count'],'条留言';

//循环输出个页数及链接
if($pagenum>1){
for($i = 1;$i<=$pagenum;$i++){
if($i == $p){
echo '[',$i,']';

}else{
echo  ' <a href="gbook.php?p=',$i,'">',$i,'</a>';
}
}
}

完整代码

完整代码如下:

<?php
//数据库连接
$con = @mysqli_connect("127.0.0.1","root","root","gbook");
if(!$con){
die("数据库连接错误".mysqli_connect_error());
}
mysqli_query($con,"set names 'utf8'");
//显示每页的留言数
$pagesize = 4;
//确定页数p参数
@$p = $_GET['p']?$_GET['p']:1;
//数据指针
$offset = ($p-1)*$pagesize;
//查询本页现实的数据
$query_sql = "select * from guestbook order by id desc limit $offset,$pagesize";
# echo $query_sql;
$result = mysqli_query($con,$query_sql);
//循环输出
while($gblist = mysqli_fetch_array($result)){
echo '<a href="',$gblist['nickname'],'">',$gblist['nickname'],'</a>';
echo '发表于:',date("Y-m-d H:i",@$gblist[createtime]),'<br/>';
echo '内容:',$gblist['content'],'<br/><hr/>';
}
//分页代码
//计算留言总数
$count_result = mysqli_query($con,"select count(*) as count from guestbook");
$count_array = mysqli_fetch_array($count_result);

//计算总的页数
$pagenum = ceil($count_array['count']/$pagesize);
echo '共',$count_array['count'],'条留言';

//循环输出个页数及链接
if($pagenum>1){
for($i = 1;$i<=$pagenum;$i++){
if($i == $p){
echo '[',$i,']';

}else{
echo ' <a href="gbook.php?p=',$i,'">',$i,'</a>';
}
}
}
?>

实现效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: