MYSQLI分页函数效果图 PHP HTML混写
MYSQLI分页函数分页封装函数:func_page.php
实例
<?php if(!function_exists('func_page.php')) { function func_page($db,$table,$page=1,$num=15){ $offset = ($page-1)*$num; //计算偏移量 $sql = "SELECT * FROM {$table} 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 {$table}"); list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中 $pages = ceil($total / $num); //获取到总页数 $pages //总页数 = 总记录数 ÷ 每页显示数量 ceil向上取整 //返回当前分页数据与总页数 return ['rows'=>$rows, 'pages'=>$pages]; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
MYSQLI分页函数源代码 PHP HTML混写
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>会员信息表</title> <style type="text/css"> table,th,td { border: 1px solid #000; padding: 8px; } table th { background-color: #21a675; color: #fff; } table { width: 80%; border-collapse: collapse; margin: 0 auto; text-align: center; } h2 { color: red; } h4 { width: 80%; text-align: center; margin: 5px auto; } h4 a { text-decoration: none; color: #666; padding:0 5px; display: inline-block; } h4 a:hover, .active { color: blue; } #pa { color: red; } form { display: inline; } </style> </head> <body> <?php //导入分页函数库 require 'func_page.php'; //连接数据库 $db = mysqli_connect('127.0.0.1','root','uyYYFGZxuVactZc7','wd2018'); //手工修改url中的get参数可以实现翻页查询 $page = isset($_GET['p']) ? $_GET['p']:1; $num = 15; //每页显示数据数量 $table = 'users'; //导入数据库的表名 //调用分页函数 $data = func_page($db,$table,$page,$num); $rows = $data['rows'];//当前分页数据 $pages = $data['pages'];//总页数 //如果当前变成为了0,则强制修改为1,否则就是当前页数 $page = ($page == 0) ? 1 : $page; //如果大于总页数,则强制修改为总页数,否则就是当前页数 $page = ($page > $pages) ? $pages : $page; //分页太多省略多余页码判断 $page_max=25;//每页显示多少页码 $buffCount=12;//缓存页 $startPage=1;//起始页 if ($page< $buffCount){ $startPage=1; }else if($page>=$buffCount and $page<$pages-$page_max ){ $startPage=$page-$buffCount+1; }else{ $startPage=$pages-$page_max+1; } $endPage=$startPage+$page_max-1; ?> <table> <caption><h2>会员信息表</h2></caption> <tr> <th>ID</th> <th>帐号</th> <th>密码</th> <th>姓名</th> <th>余额</th> <th>邮箱</th> <th>手机号码</th> <th>上线代理</th> </tr> <?php foreach ($rows as $row): ?> <tr> <td><?php echo $row['id']; ?></td> <td><?php echo $row['user']; ?></td> <!-- 隐藏密码中间三位数字 --> <td><?php echo substr_replace(($row['pass']),'医院医院', 1, 4); ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['money']; ?></td> <td><?php echo $row['email']; ?></td> <td><?php echo $row['phone']; ?></td> <td><?php echo $row['upline']; ?></td> </tr> <?php endforeach;?> </table> <h4> <!-- 当前是第一页时,隐藏首页和上一页 --> <?php if($page != 1): ?> <a id="pa" href="?p=1">首页</a> <a id="pa" href="?p=<?php echo $page-1; ?>"><</a> <?php endif; ?> <!-- 生成中间页码 --> <?php for($i=$startPage;$i<=$endPage; $i++): ?> <a class="<?php if($_GET['p']==$i){echo 'active';}?>" href="?p=<?php echo $i ?>"><?php echo $i ?></a> <?php endfor ?> <!-- 当前是最后一页时,隐藏末页和下一页 --> <?php if($page != $pages): ?> <a id="pa" href="?p=<?php echo $page+1; ?>">></a> <a id="pa" href="?p=<?php echo $pages; ?>">末页</a> <?php endif; ?> <!--实现页面的快速跳转--> <form action="" method="get"> 第 <select name="p" id=""> <?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>goto</button> </form> </h4> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
这次编写在分页很多的情况下 隐藏多余页码是个难点 找了很久百度才再到解决方法
//分页太多省略多余页码判断 $page_max=25;//每页显示多少页码 $buffCount=12;//缓存页 $startPage=1;//起始页 if ($page< $buffCount){ $startPage=1; }else if($page>=$buffCount and $page<$pages-$page_max ){ $startPage=$page-$buffCount+1; }else{ $startPage=$pages-$page_max+1; } $endPage=$startPage+$page_max-1; ?>
中间页码用
for($i=$startPage;$i<=$endPage; $i++)
做判断
<!-- 生成中间页码 --> <?php for($i=$startPage;$i<=$endPage; $i++): ?> <a class="<?php if($_GET['p']==$i){echo 'active';}?>" href="?p=<?php echo $i ?>"><?php echo $i ?></a> <?php endfor ?>
另外还有一种纯PHP的写法 跳转页用输入框方式编写
MYSQLI分页函数效果图 纯PHP写法
MYSQLI分页函数源代码 纯PHP写法
CSS加上
#btn { margin:0 5px; } form { display: inline; } #page { width: 40px; padding:0 5px; }
实例
<?php echo '<h4>'; //上一页 $htmlstr="";//输出内容函数变量 if($page==1){//当前页面=1时, $htmlstr.='';//隐藏\上一页\ }else{ $lastPage=$page-1; //当前页面-1时,显示\上一页\ $htmlstr.="<a href='?p=$lastPage'>上一页</a>"; } // 首页 if($page-$page_max>1){//当前页面-最大页数>1时 如:12-10=2>1 $htmlstr.="<a href='?p=1'>首页</a>";//显示\首页\ $htmlstr.="<span>...</span>";//显示\省略号\ } //当前页的左边 for($i=$page_max;$i>=1;$i--){ if(($page - $i) < 1 ) { // 当前页左边最多 page_max 个数字 continue; } $lastPage=$page-$i; $htmlstr.="<a href='?p=$lastPage'>$lastPage</a>"; } //当前页 $htmlstr.="<span style=\"color:red\">$page</span>"; //当前页右边 for($i=1;$i<=$page_max;$i++){ if(($page + $i) > $pages) { // 当前页右边最多 page_max 个数字 break; } $lastPage=$page+$i; $htmlstr.="<a href='?p=$lastPage'>$lastPage</a>"; } //尾页 if(($page+$page_max)<$pages){//当前页面+最大页数<总页数时 $htmlstr.="<span>...</span>";//显示\省略号\ $htmlstr .= '<a href="?p='.$pages.'">尾页</a>';//显示\尾页\ } //下一页 if($page == $pages) {//当前页面=总页数时 $htmlstr .= '';//隐藏\下一页\ } else { $nextPage=$page+1;//下一页=当前页面+1 $htmlstr .= "<a href='?p={$nextPage}'>下一页</a>"; } //页面跳转 $htmlstr.="<form action = ''>"; $htmlstr.=" 跳到-第 <input type='number' min='1' max='$pages' value=".($page+1)." name='p' id='page'> 页"; $htmlstr.="<input type='submit' name='Submit' id='btn' value='确定'>"; $htmlstr.="</form>"; $htmlstr.="共 <font color='blue'>{$pages}</font> 页</div>"; $htmlstr.="-现在<font color='red'>{$page}</font>页</div>"; $checkText = $_POST['content']; echo $htmlstr; echo '</h4>'; ?>
运行实例 »点击 "运行实例" 按钮查看在线实例
重点
跳到-第 <input type='number' min='1' max='$pages' value=".($page+1)." name='p' id='page'> 页
input type='number' 输入框 只能输入数值 min 最小值 max 最大值 value 默认值