php玩转源码分页

目录

一: 封装配置信息

二: 显示分页实现

三: 实现步骤

四: 整体实现代码


一: 封装配置信息

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

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

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

include 'connection.php';

二: 显示分页实现

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

元素 说明 备注
首页 最开始进入到页面的第一页 用get传参才进去时默认为1
上一页 当前页减1 如果页码为第一页时减1,为应该为第一页
下一页 当前页加1 如果为最后一
尾页 最后一页 总条数除以每页显示数得到总页数
当前页 当前所在的页码 就是当前的页码
总页数 一共有多少个页面 总条数除以每页显示数

 

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

php玩转源码分页_第1张图片

在代码实现中,是通过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 '';
        echo '';
        echo '';
        echo '';
        echo '';
        echo '';
    }
    echo '';
    echo '
' . $row['username'] . '' . date('Y-m-d H:i:s', $row['createtime']) . '' . long2ip($row['createip']) . '编辑用户删除用户
首页 上一页 下一页 尾页 当前是第 ' . $page . '页 共' . $total . '页
'; } else { echo '没有数据'; } mysqli_close($conn);

 

你可能感兴趣的:(PHP)