博客列表 >分页查询设计原理与实例 : 重点offse偏移量的设置规范 2018年9月10日 22:05

分页查询设计原理与实例 : 重点offse偏移量的设置规范 2018年9月10日 22:05

南通税企通马主任的博客
南通税企通马主任的博客原创
2018年09月11日 23:24:11665浏览

1 , 分页查询的原理与偏移量的计算方法

根据理解 , offset设置偏移量原理是需要查询的页数减一再乘以自己需要每页做显示的数量 ;

即offset有两个参数 ,第一个是偏移量 $page - 1 , 第二个是需要显示的数量 $num ;

当然分页查询还需要其它的相关条件 , 包括总数量 , 页数 , 中间页码显示值 ;

其中中间页面用 for 语句遍历出来即可 for & endfor , 条件是 $i =1; $i <=总页数$pages ; $i++ ;

2 , 编程 : 实现分页查询,要求有上一下,下一页,直接跳到首页和尾页,中间页的生成,以及快速页码跳转功能

实例分类查询页

<?php
namespace model;


class Page
{
    private $offset;

    private $num;

    private $pdo;

    public function __construct($num=3)
    {
        $this ->num = $num;

        $this ->offset = ($this ->getPage()-1) * $this ->num;
    }

    public function connect($type,$host,$dbname,$user,$pass)
    {
        try{
            $this ->pdo = new \PDO("$type:host=$host;dbname=$dbname",$user,$pass);
        }catch(\PDOException $e){
            die($e ->getMessage());
        }
    }

    public function getPage()
    {
        return isset($_GET['p']) ? $_GET['p'] : 1;
    }

    public function getPages($table)
    {
        $stmt = $this ->pdo ->prepare("SELECT COUNT(*) FROM {$table}");
        $stmt ->execute();

        $total = $stmt ->fetchColumn(0);
        return ceil($total / $this ->num);
    }

    public function getData($table)
    {
        $sql = "SELECT * FROM {$table} LIMIT {$this ->offset} , {$this ->num}";
        $stmt = $this ->pdo ->prepare($sql);
        $stmt ->execute();

        return $stmt ->fetchALL(\PDO::FETCH_ASSOC);
    }
}

实例CSS样式页

table,th,td {
    border: 1px solid black;
}
table th {
    background-color: lightskyblue;
}
table {
    border-collapse: collapse;
    width: 70%;
    margin: 30px auto;
    text-align: center;
}

table caption {
    font-size: 1.5rem;
    margin-bottom: 15px;
}

h3 {
    text-align: center;
}
h3 a {
    text-decoration: none;
    margin-left: 10px;
    border: 1px solid black;

    display: inline-block;
    height: 30px;
    min-width: 30px;
    padding: 0 10px;
    background-color: lightgreen;
}
h3 a:hover{
    background-color: red;
    color: white;
}

.active {
    background-color: red;
}

form {
    display: inline;
}

实例分页查询首页

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="style.css">
    <title>分页查询</title>
</head>
<body>
<?php
require 'Page.php';

use model\Page;

$page = new Page();

$page ->connect('mysql','127.0.0.1','php','root','root');

$currentPage = $page ->getPage();

$totalPages = $page ->getPages('staff');

$data = $page ->getData('staff');
?>
<table>
    <caption>员工信息表</caption>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>工资</th>
    </tr>
    <?php foreach ($data as $row): ?>
        <tr>
            <td><?php echo $row['id']; ?></td>
            <td><?php echo $row['name']; ?></td>
            <td><?php echo $row['age']; ?></td>
            <td><?php echo $row['sex']?'男':'女'; ?></td>
            <td><?php echo $row['salary']; ?></td>
        </tr>
    <?php endforeach;?>
</table>

<h3>
    <!--    当前是第一页的时候,上一页和首页链接应该不显示-->
    <?php if($currentPage != 1): ?>
        <a href="task.php?p=1">首页</a>
        <a href="task.php?p=<?php echo $currentPage-1; ?>">上一页</a>
    <?php endif; ?>


    <!--生成中间页码-->
    <?php for($i=1; $i<=$totalPages; $i++): ?>
        <!------高亮显示当前页码----------->
        <a class="<?php if($currentPage==$i){echo 'active';}?>" href="task.php?p=<?php echo $i ?>"><?php echo $i ?></a>
    <?php endfor; ?>

    <!--当前已经是最后一页的时候,下一页和最后一页也应该不显示-->
    <?php if($currentPage != $totalPages) :?>
        <a href="task.php?p=<?php echo $currentPage+1; ?>">下一页</a>

        <a href="task.php?p=<?php echo $totalPages; ?>">尾页</a>
    <?php endif; ?>

    <!--实现页面的快速跳转-->
    <form action="" method="get">
        第
        <select name="p" id="">
            <?php for($i=1; $i<=$totalPages; $i++): ?>
                <!-- 循环输出全部页码,并锁定当前页-->
                <option value="<?php echo $i; ?>" <?php if($currentPage==$i){echo 'selected';} ?>><?php echo $i; ?></option>
            <?php endfor; ?>
        </select>
        页

        <button>跳转</button>
    </form>

</h3>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

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