php实现分页的原理及步骤-php教程

资源魔 40 0

1、封拆卸相信息

一、咱们能够做一个设置装备摆设文件config.php。将需求应用到的设置装备摆设全副设置为常量,代码以下:

<?php
//数据库效劳器
define('DB_HOST', 'localhost');
//数据库用户名
define('DB_USER', 'root');
//数据库明码
define('DB_PWD', 'secret');
//库名
define('DB_NAME', 'book');
//字符集
define('DB_CHARSET', 'utf8');

二、2.咱们将connection.php页面抽掏出来,当前需求衔接数据库的时分只要要蕴含connection.php文件便可。

代码以下:

<?php
include 'config.php';$conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);
if (mysqli_errno($conn))
 {  mysqli_error($conn);
    exit;
  }
mysqli_set_charset($conn, DB_CHARSET);
?>

咱们正在当前每一个文件应用中间接蕴含 connection.php文件就能够完成数据库衔接了:

include 'connection.php';

2、显示分页完成

页要完成分页中蕴含如下几个根本元素:

分页.jpg

咱们正在管制页码的时分,都是经过URL地点栏传入页码值来完成的页码管制。正在page.php前面接上页码的相干信息,咱们就可以算出更多的无效信息。url管制分页的成果以下:

分页.png

正在代码完成中,是经过limit后的偏偏移量(offset)以及数目(num),这两个值真正完成的分页。

limit offset , num

分页01.jpg

假定每一页显示5条。终极失去的分页中管制limit公式以下:

offset的值为 (n-1)*5
num 为规则的5

3、完成步骤;

一、较量争论出分页所需参数

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'];

1-二、以后页

刚进入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;
}

1-三、最初一页

每一一页肯定是一个整数。就跟小学的时分数学同样。均匀有5.6集体应该预备几个苹果。谜底肯定是6个。

假如页面进去了20.3个页面,肯定是应用进一法取整函数ceil。让分页数变成21。

咱们用总数除了以每一页显示的数据条数,就失去了总页数了。

//每一页显示数
$num = 5;
$total = ceil($count / $num);

1-四、上下页异样状况管制

假如用户的正在第一页点击了上一页,正在最初一页点击了下一页怎样办呢?

这样的话数据会凌驾范畴,而造成咱们分页时有数据显示。

显然这类异样状况需求思考到。因而,假如正在分页时正在第一页减一时,咱们就让他为第一页。
正在最初一页加一时,咱们就让他为最初一页,即实现了异样管制。

if ($page <= 1) {
    $page = 1;
}
if ($page >= $total) {
    $page = $total;
}

二、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 '<tr>
    <td colspan="5">
    <a href="page.php?page=1">首页</a>
    <a href="page.php?page=' . ($page - 1) . '">上一页</a>
    <a href="page.php?page=' . ($page + 1) . '">下一页</a>
    <a href="page.php?page=' . $total . '">尾页</a>
    以后是第 ' . $page . '页  共' . $total . '页
    </td>
    </tr>';

4、全体代码完成

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 '<table width="800" border="1">';
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<tr>';
        echo '<td>' . $row['username'] . '</td>';
        echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
        echo '<td>' . long2ip($row['createip']) . '</td>';
        echo '<td><a href="edit.php?id=' . $row['id'] . '">编纂用户</a></td>';
        echo '<td><a href="delete.php?id=' . $row['id'] . '">删除了用户</a></td>';
        echo '</tr>';
    }
    echo '<tr><td colspan="5"><a href="page.php?page=1">首页</a>  <a href="page.php?page=' . ($page - 1) . '">上一页</a>   <a href="page.php?page=' . ($page + 1) . '">下一页</a>  <a href="page.php?page=' . $total . '">尾页</a>  以后是第 ' . $page . '页  共' . $total . '页 </td></tr>';
    echo '</table>';
} else {
    echo '不数据';
}
mysqli_close($conn);

以上内容便完成了简略的分页性能,相理解更多相干内容请拜访PHP中文网:PHP视频教程

以上就是php完成分页的原理及步骤的具体内容,更多请存眷资源魔其它相干文章!

标签: php 分页 步骤 php开发教程 php开发资料 php开发自学 原理

抱歉,评论功能暂时关闭!