php内容分页源码,php玩转源码分页

目录

一: 封装配置信息

二: 显示分页实现

三: 实现步骤

四: 整体实现代码

一: 封装配置信息

1.我们可以做一个配置文件config.php。将需要使用到的配置全部设置为常量,代码如下

2.我们将connection.php页面抽取出来,以后需要连接数据库的时候只需要包含connection.php文件即可。代码如下:\

我们在以后每个文件使用中直接包含 connection.php文件就可以实现数据库连接了:

include 'connection.php';

二: 显示分页实现

页要实现分页中包含以下几个基本元素:

元素

说明

备注

首页

最开始进入到页面的第一页

用get传参才进去时默认为1

上一页

当前页减1

如果页码为第一页时减1,为应该为第一页

下一页

当前页加1

如果为最后一

尾页

最后一页

总条数除以每页显示数得到总页数

当前页

当前所在的页码

就是当前的页码

总页数

一共有多少个页面

总条数除以每页显示数

我们在控制页码的时候,都是通过URL地址栏传入页码值来实现的页码控制。在page.php后面接上页码的相关信息,我们就能够算出更多的有效信息。url控制分页的效果如下:

1931434fd3ab7bf41f87458f829eca40.png

在代码实现中,是通过limit后的偏移量(offset)和数量(num),这两个值真正实现的分页。

limit offset , num

页码

url中get值

limit偏移量,数量

第1页

1

0,5

第2页

2

5,5

第3页

3

10,5

第n页

n

(n-1)*5,5

假设每页显示5条。最终得到的分页中控制limit公式如下:

offset的值为 (n-1)*5

num 为规定的5

三: 实现步骤

1.计算出分页所需的参数

1).总数

通过查询user表的count(id),得到总数$count。

$count_sql = 'select count(id) as c from user';

$result = mysqli_query($conn, $count_sql);

$data = mysqli_fetch_assoc($result);

//得到总的用户数

$count = $data['c'];

2).当前页

刚进入page.php页时,url为http://www.php.com/page.php,后面是不存在 ?page=1 页面标识号的。

因此我们需要手动创建一个页面标识号传给当前页码变量$page。

我们害怕用户传的页面中存在小数等,所以我们做一次强制的类型转换:(int) $_GET['page']。

第一种写法:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

第二种写法

if (isset($_GET['page'])) {

$page = (int) $_GET['page'];

} else {

$page = 1;

}

3).最后一页

每一页一定是一个整数。就跟小学的时候数学一样。平均有5.6个人应该准备几个苹果。答案一定是6个。

如果页面出来了20.3个页面,一定是使用进一法取整函数ceil。让分页数变为21。

我们用总数除以每页显示的数据条数,就得到了总页数了。

//每页显示数

$num = 5;

$total = ceil($count / $num);

4).上一页、下一页异常情况控制

如果用户的在第一页点击了上一页,在最后一页点击了下一页怎么办呢?

这样的话数据会超出范围,而造成我们分页时无数据显示。

显然这种异常情况需要考虑到。因此,如果在分页时在第一页减一时,我们就让他为第一页。

在最后一页加一时,我们就让他为最后一页,即完成了异常控制。

if ($page <= 1) {

$page = 1;

}

if ($page >= $total) {

$page = $total;

}

2: SQL语句

我们之前说过分页的核心是通过SQL语句中的offset和num来控制每页显示数。

$num = 5;

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

我们将$num和$offset应用于SQL语句中:

$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";

控制好URI中的分页值

echo '

首页

上一页

下一页

尾页

当前是第 ' . $page . '页 共' . $total . '页';

四: 整体实现代码

include 'connection.php';

$count_sql = 'select count(id) as c from user';

$result = mysqli_query($conn, $count_sql);

$data = mysqli_fetch_assoc($result);

//得到总的用户数

$count = $data['c'];

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

/*

if (isset($_GET['page'])) {

$page = (int) $_GET['page'];

} else {

$page = 1;

}

*/

//每页显示数

$num = 5;

//得到总页数

$total = ceil($count / $num);

if ($page <= 1) {

$page = 1;

}

if ($page >= $total) {

$page = $total;

}

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

$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";

$result = mysqli_query($conn, $sql);

if ($result && mysqli_num_rows($result)) {

//存在数据则循环将数据显示出来

echo '';

while ($row = mysqli_fetch_assoc($result)) {

echo '

';

echo '' . $row['username'] . '';

echo '' . date('Y-m-d H:i:s', $row['createtime']) . '';

echo '' . long2ip($row['createip']) . '';

echo '';

}

echo '

首页 上一页 下一页 尾页 当前是第 ' . $page . '页 共' . $total . '页';

echo '';

} else {

echo '没有数据';

}

mysqli_close($conn);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值