Blogger Information
Blog 35
fans 0
comment 0
visits 37210
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
分页原理和实现(0910)
Ray的博客
Original
837 people have browsed it

1)问答:分页查询的原理与偏移量的计算方法

答:所谓分页就是将数据库的数据按照页面的固定显示数量,分多次显示。偏移量就固定的显示数量乘以当前页数。

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

实例

<!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>
    <style>
        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;
        }
    </style>
</head>
<body>
<?php
    //连接数据库获取到全部的记录
    $pdo = new PDO('mysql:host=localhost;dbname=php','root','root');
    //$sql = "SELECT * FROM staff LIMIT 5, 5;";
    //手工修改url中的get参数可以实现翻页查询
    $page = isset($_GET['p']) ? $_GET['p'] : 1;
    $offset = ($page-1)*4;

    $sql = "SELECT * FROM `staff` LIMIT {$offset}, 4;";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    //查看返回结果
    //    echo '<pre>'.print_r($rows,true).'</pre>';


    /**
     * 获取总页数分2步:
     * 1.获取总记录数
     * 2.再除以每次的显示数量,结果向上取整
     */
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM `staff`");
    $stmt->execute();
    $total = $stmt->fetchColumn(0);
    $pages = ceil($total / 4);  //获取到总页数 $pages
?>

<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['age']; ?></td>
            <td><?php echo $row['sex']?'男':'女'; ?></td>
            <td><?php echo $row['salary']; ?></td>
        </tr>
    <?php endforeach;?>
</table>

<h3>
<!--    当前是第一页的时候,上一页和首页链接应该不显示-->
    <?php if($page != 1): ?>
    <a href="http://php.io/demo0910-1.php?p=1">首页</a>
    <a href="http://php.io/demo0910-1.php?p=
<?php
    //    echo $page-1;//发现到第一页就挂掉了,怎么办?必须对$page=0进行控制
    echo (($page-1)==0)? 1 : ($page-1);
    ?>">上一页</a>
    <?php endif; ?>




<!--生成中间页码-->
    <!--将当前页码的背景色锁定:当前页码等于GET中的参数p-->
    <?php for($i=1; $i<=$pages; $i++): ?>
        <a

          href="http://php.io/demo0910-1.php?p=<?php echo $i ?>"

          <?php
            echo ($i == $page) ? 'style="background-color: red;"' : '';
          ?>

        >

        <?php echo $i ?>

        </a>
    <?php endfor; ?>





<!--当前已经是最后一页的时候,下一页和最后一页也应该不显示-->
  <?php if($page != $pages) :?>
    <a href="http://php.io/demo3.php?p=
<?php
    //发现越界了,怎么办?最大页不能超过总页数才可以.
    echo (($page+1)>$pages)?$pages:($page+1);
    ?>">下一页</a>

    <a href="http://php.io/demo0910-1.php?p=<?php echo $pages; ?>">尾页</a>
 <?php endif; ?>

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

运行实例 »

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

运行效果图:

01.png

02.png

03.png

总结:分页的这堂课彻底解决了公司的网站里面分页的问题,原来看程序是半知半解,现在就一清二楚了。


Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post