博客列表 >分页与分页功能封装+2018年5月2日01时45分

分页与分页功能封装+2018年5月2日01时45分

KongLi的博客
KongLi的博客原创
2018年05月02日 01:42:27856浏览

使用 mysqli 进行分页数据查询,实现上一页、下一页、中间页码、以前下拉框自选页码查询分页数据,实现分页有以下几点

/**

 * 1. LIMIT 0,5 参数的作用: 偏移量与显示数量

 * 2. 如何控制每页显示的数量

 * 3. 接收GET参数,用p表示当前页数,每页显示5条

 * 4. 当前偏移量的计算公式: (页数-1)*每页显示的数量

 *    offset = (page-1)*num

 */


分页效果:

QQ截图20180502012853.png


具体实现如下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
 content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>分页查询</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php

//导入分页函数库
require '../lib/func_page.php';

//连接数据库
$db = mysqli_connect('127.0.0.1','root','root','php');

//获取请求的页数
$page = isset($_GET['p'])?$_GET['p']:1;
//$offset = ($page-1)*5;
$num=5; //每页显示的数量
$table = 'staff'; //要查询的表

//$sql = "SELECT * FROM staff LIMIT {$offset},{$num};";
//$res = mysqli_query($db,$sql);
//$rows = mysqli_fetch_all($res,MYSQLI_ASSOC);

//获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整
//$number = mysqli_query($db,"SELECT COUNT(*) FROM staff");
//list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中
//$pages = ceil($total / $num);  //获取到总页数 $pages
//执行函数库中的方法,并处理返回的数据
$data = func_page($db,$table,$page,$num);
$rows = $data['rows'];
$pages=$data['pages'];

//上一页
$lpages=(($page-1)==0)? 1 : ($page-1);

//下一页
$rpages=(($page+1)>$pages)?$pages:($page+1);
?>
 <table>
        <caption>信息表</caption>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>工资</th>
        </tr>
        <!--使用循环得到查询处理过后的数据-->
 <?php foreach ($rows as $row) :?>
 <tr>
            <td><?php  echo $row['staff_id']?></td>
            <td><?php  echo $row['name']?></td>
            <td><?php  echo $row['sex']==0?'男':'女'?></td>
            <td><?php  echo $row['age']?></td>
            <td><?php  echo $row['salary']?></td>
        </tr>
        <?php endforeach; ?>
 </table>
    <div class="pages">
        <p>
            <a href="http://127.0.0.1/4027/index.php?p=1">首页</a>
            <a href="http://127.0.0.1/4027/index.php?p=<?php echo $lpages ?>">上一页</a>
            <!--循环列出中间部分的页码-->
 <?php for ($i=1; $i<=$pages; $i++) :?>
 <!--将中间显示的页码实现高亮-->
 <a class="<?php if($page==1) echo ''; else if($page==$i) echo 'heigh'?>" href="http://127.0.0.1/4027/index.php?p=<?php echo $i ?>"><?php echo $i?></a>
            <?php endfor; ?>
 <a href="http://127.0.0.1/4027/index.php?p=<?php echo $rpages ?>">下一页</a>
            <a href="http://127.0.0.1/4027/index.php?p=<?php echo $pages ?>">尾页</a>
        </p>
        <form action="" id="change_page">
            第
 <select name="p" id="sp" onchange="Change()">
                <?php for ($i=1; $i<=$pages; $i++): ?>
 <option value="<?php echo $i?>" <?php if($_GET['p']==$i)echo 'selected' ?>><?php echo $i?></option>
                <?php endfor; ?>
 </select>
            页
 <button>跳转</button>
        </form>
    </div>
<script type="text/javascript">
    //给下拉列表添加 submit 事件实现选中跳转页面
 function Change(){
        var change_page =document.getElementById('change_page')
        change_page.submit()
    }
</script>
</body>
</html>


Page分页函数封装部分:

<?php
/**
 * Created by PhpStorm.
 * User: John
 * Date: 2018/5/2
 * Time: 1:00
 */

//分页函数封装
if(!function_exists('func_page')){

    function func_page($db,$table,$page,$num)
    {
        $offset = ($page-1)*5; //显示当前第几页的数据
        $sql = "SELECT * FROM staff LIMIT {$offset},{$num};"; //查询数据SQL
        $res = mysqli_query($db,$sql); //得到查询的数据结果集
        $rows = mysqli_fetch_all($res,MYSQLI_ASSOC); //处理结果集,设置显示的结果模式

        //获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整
        $number = mysqli_query($db,"SELECT COUNT(*) FROM staff");
        list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中
        $pages = ceil($total / $num);  //获取到总页数 $pages

        //返回分页的数据跟总页数量
        return ['rows'=>$rows,'pages'=>$pages];
    }
}


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议