博客列表 >0910-分页查询

0910-分页查询

3期-Shawn的博客
3期-Shawn的博客原创
2018年09月11日 17:57:34623浏览

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

分析分页的原理:

首先获取数据的总记录数,通过总记录和每页显示的数量得出总页数。

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

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

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

 * 4. 需要的参数:

 * (1).totalPage 总页数

 * (2).totalNumber 一共有多少条数据

 * (3).pageSize 每页显示多少条数据

 * (4)currentPage 当前第几页

 * (5)*.rangeStart 起始页

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

 *    offset = (page-1)*num


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

0910zuoye1.png0910zuoye2.png0910zuoye3.png0910zuoye4.png

实例

<!DOCTYPE html>
<html>
<head>
	<title>用户信息表</title>
	<meta charset="utf-8">
	<style>
		table,th,td{border: 1px solid black;}
		table {
             border-collapse: collapse;
             width: 60%;
             margin: 30px auto;
             text-align: center;
              }
        table caption {font-size: 1.5rem;margin-bottom: 15px;}
        table th {background-color: lightskyblue;}
        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;}
        form {display: inline;}
	</style>
</head>
<body>

<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=edu','root','root');

//手工修改url中的get参数可以实现翻页查询
$page = isset($_GET['p']) ? $_GET['p'] : 1;
$offset = ($page-1)*5;
$sql = "SELECT * FROM `user` LIMIT {$offset}, 5;";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$stmt = $pdo->prepare("SELECT COUNT(*) FROM `user`");
$stmt->execute();
$total = $stmt->fetchColumn(0);
$pages = ceil($total / 5);  //获取到总页数 $pages
?>
<table>
	<caption>员工信息表</caption>
	<tr>
		<th>ID</th>
		<th>姓名</th>
		<th>邮箱</th>
	</tr>
	<?php  foreach ($rows as $row): ?>
	<tr>
		<td><?php  echo $row['id']; ?></td>
		<td><?php  echo $row['name']; ?></td>
		<td><?php  echo $row['email']; ?></td>
	</tr>
<?php  endforeach; ?>
</table>
<h3>
	<a href="http://www.ceshi.com/ceshi1.php?p=1">首页</a>
	<a href="http://www.ceshi.com/ceshi1.php?p=<?php echo (($page-1)==0)? 1 : ($page-1); ?>">上一页</a>
	<!-- <a href="http://www.ceshi.com/ceshi1.php?p=1">1</a>
	<a href="http://www.ceshi.com/ceshi1.php?p=2">2</a>
	<a href="http://www.ceshi.com/ceshi1.php?p=3">3</a> -->
 
<!--生成中间页码-->
    <!--将当前页码的背景色锁定:当前页码等于GET中的参数p-->
    <?php for($i=1; $i<=$pages; $i++): ?>
        <a

          href="http://ceshi.com/ceshi1.php?p=<?php echo $i ?>"

          <?php
            echo ($i == $page) ? 'style="background-color: red;"' : '';//设置被选中的当前页突出显示
          ?>

        >

        <?php echo $i ?>

        </a>
    <?php endfor; ?>
	<a href="http://www.ceshi.com/ceshi1.php?p=<?php echo (($page+1)>$pages)?$pages:($page+1); ?>">下一页</a>
	<a href="http://www.ceshi.com/ceshi1.php?p=<?php echo $pages; ?>">尾页</a>

	<!--实现页面的快速跳转-->
    <form action="" method="get">
        第 <select name="p" id="">

            <?php for($i=1; $i<=$pages; $i++): ?>
                <!-- 循环输出全部页码,并锁定当前页-->
                <option value="<?php echo $i; ?>"
                <?php
                if($page==$i){echo 'selected';}
                //实现跳转后当前页面和选中页码一样。不要这段代码依然可以正常工作,不过跳转后会显示默认选项
                ?>
                >


                 <?php echo $i; ?>

                </option>



            <?php endfor; ?>


        </select>页

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


</h3>


</body>
</html>

运行实例 »

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



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