php数据库操作之把用户做个分页

在真实的项目中,我们是将主机、用户名、密码、库都写在装备文件当中。

华夏棋牌假定在代码中写去世了,万一数据库服务器的相关信息发生变换了,要把一切代码修改一次显着不切正当式模范员的头脑。

此外,在每个须要毗连数据库的页面中。我们都须要写上毗连、断定弱点、设置字符集、太过于费事。而且倒霉于重复应用这些代码。

我们可以用上之前讲过的include系列函数杀青目的。示例图以下:

2015-10-13_561c9c5350f16.png

是以,我们可以做一个装备文件config.php。将须要应用到的装备一切设置为常量,代码以下:

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

我们将connection.php页面抽取出来,以后须要毗连数据库的时间只须要网罗connection.php文件便可。代码以下:

<?phpinclude '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';

把下面的准备使命完成,接上去完因素页。分页效果以下:

2015-10-13_561c9c536b206.png

华夏棋牌页要完因素页中网罗以下几个基本元素:


元素诠释备注
华夏棋牌最泉源进入到页面的第一页用get传参才出来时默许为1
上一页以后页减1假定页码为第一页时减1,为应当为第一页
下一页以后页加1假定为最后一
尾页最后一页总条数除以每页显示数取得总页数
以后页以后所在的页码就是以后的页码
总页数一共有若干个页面总条数除以每页显示数

华夏棋牌我们在控制页码的时间,都是经由历程URL地址栏传入页码值来完成的页码控制。在page.php前面接上页码的相关信息,我们便能够算出更多的有用信息。url控制分页的效果以下:

QQ截图20161114161938.png

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

limit offset , num

页码url中get值limit偏移量,数目
第1页10,5
第2页25,5
第3页310,5
第n页n(n-1)*5,5


假定每页显示5条。事实取得的分页中控制limit公式以下:

offset的值为 (n-1)*5
num 为划定的5

我们经由历程代码来完成营业:

一、盘算出分页所需的参数

总数

经由历程查询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'];

以后页

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

最后一页

华夏棋牌每页一定是一个整数。就跟小学的时间数学一样。匀称有5.6小我应当准备几个苹果。谜底一定是6个。

假定页面出来了20.3个页面,一定是应用进一法取整函数ceil。让分页数酿成21。

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

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

上一页、下一页异常情形控制

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

这样的话数据会超出规模,而组成我们分页时有数据显示。

显着这类异常情形须要推敲到。是以,假定在分页时在第一页减一时,我们就让他为第一页。
在最后一页加一时,我们就让他为最后一页,即完成了异常控制。

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

我们最后将所有营业勾通起来完成事实效果,代码以下:

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 $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>'; //我们最后将所有营业勾通起来完成事实效果,代码以下: 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

  • 推荐课程
  • 议论
  • 问答
  • 条记
  • 课件下载

phpcn_u84239

connection.php对的,config.php在connection里网罗了,直接就毗连到数据库了

1年前    添加回复 0华夏棋牌

回复

luoshui

are you kidding me ? 显着是config.php 你哪来的connection.php 小编能不克不及认真点。这还让人怎样学。那么多弱点啊

1年前    添加回复 0

嘁

上点心吧

· 2018-08-31 10:02
回复

一直点上一页极限为0,一直点下一页极限为4,一直点 华夏棋牌更会报错华夏棋牌

[最新 心境 的回复]  echo '华夏棋牌   上一页    下一页   尾页   以后是第 ' . $page . '页  共' . $total . '页 ';华夏棋牌

时间:10个月前

叨教,这个分页的原理是怎样的

[最新 Peter_Zhu 的回复] 是哪个课程~~

时间:1年前

config.php是系统文件还是自己写的?华夏棋牌

[最新 青春梦敲门砖 的回复] 装备文件要自己写啊,我写的浅易都是数据库的装备文件

时间:1年前

点击下一页以后申报404

[最新 phpcn_u2434 的回复] 你跳转到下一页想显示甚么就写甚么,假定你不想跳转到page.php页面而是就在本页显示,就把page.php去掉落落,直接?page=这个参数就好了。不才面写个变量 $next = $_GET['page']+1 然后下一页就是?page=$next 这样你点下一页就是page的值+1了赛 然后数据库的limit就是以后页码(也就是page的值)-1 然后*你要显示若干数据 好比这个运算的效果放到一个变量a外面 $a = ($_GET['page'] - 1)*10 mysql就这样写 select * from 表名 limit $a,10 取出来的效果就放页面上就完了华夏棋牌

时间:1年前

课件暂不供应下载,使命职员正在整理中,前期请多关注该课程~