php 分页处理

1、利用bootstrap的css框架的前提下,封装个Php的分页框架

命名为test.php,具体代码如下

 1 <?php
 2 class Pagination
 3 {
 4     private $cfg;
 5     private $content = '';                        //分页导行条内容部份
 6 
 7     public function __construct($config = null){
 8         $this->cfg = array_replace([
 9             'count' => 0,                                                       //总的数据数量
10             'pageSize' => 10,                                                   //每次数据的数量
11             'currentPage' => $_GET['page'] ?? 1,                                //当前所在的页码
12             'scope' => 3,                                                       //显示前面几条后面几条
13             'dir' => sprintf('./%s', basename($_SERVER['PHP_SELF']))    //请求的地址
14         ], $config ? $config : []);
15     }
16 
17     /**获取总的页数
18      * @return float
19      */
20     private function getPageCount() {
21         return ceil($this->cfg['count'] / $this->cfg['pageSize']);
22     }
23 
24     /**获取分页链接的地址
25      * @param int $num
26      * @return string
27      */
28     private function getRealDir(int $num) {
29         return $this->cfg['dir']."?page={$num}";
30     }
31 
32     /**获取分页的最大值和最小值
33      * @param int $MaxPage 最大的页数
34      * @return array
35      */
36     private function getLimitScope(int $MaxPage) {
37         $arr = [];
38         $current = $this->cfg['currentPage'];
39         $step = $this->cfg['scope'];
40         $arr[0] = $current - $step <= 1? 1: $current - $step;
41         $arr[1] = $current + $step >= $MaxPage? $MaxPage: $current + $step;
42         return $arr;
43     }
44 
45     /**生成分页的主体部份
46      * @return string
47      */
48     private function getContent() {
49         $count = $this->getPageCount();
50         $this->cfg['currentPage'] > $count? $this->cfg['currentPage'] = 1: null;   //当如果当前页大于最大页要进行规避错误
51         $wrap = '<ul class="pagination"><li><a href="%s">&laquo;</a></li>%s<li><a href="%s">&raquo;</a></li></ul>';
52         list($begin_num, $end_num) = $this->getLimitScope($count);
53         for($i=$begin_num; $i<=$end_num; $i++) {
54             $this->content .= sprintf('<li class="%s"><a href="%s">%d</a></li>', $this->cfg['currentPage'] == $i? 'active': '',$this->getRealDir($i), $i);
55         }
56         $start = $this->getRealDir($this->cfg['currentPage'] <= 1? 1: $this->cfg['currentPage']-1);
57         $end = $this->getRealDir($this->cfg['currentPage']>= $count? $count: $this->cfg['currentPage'] + 1);
58         return sprintf($wrap, $start, $this->content, $end);
59     }
60 
61     /**分页组件的初始化
62      * @return string
63      */
64     public function init() {
65         return $this->getContent();
66     }
67 }
68 
69 ?>

2、利用之前封装的操作数据库的单例方法(假如命名为index.php)

 1 <?php
 2 header('content-type:text/html;charset=utf-8');
 3 ini_set('display_errors', true);
 4 $config = [
 5     'host' => 'localhost',
 6     'user' => 'root',
 7     'password' => '*****',
 8     'dbname' => 'learn',
 9     'port' => 3306,
10     'charset' => 'utf8'
11 ];
12 
13 final class DB {
14     private static $mysqli;
15     private function __clone() {}
16     private function __construct() {
17         global $config;
18         $mysqli = new Mysqli($config['host'], $config['user'], $config['password'], $config['dbname'], $config['port']);
19         if($mysqli->connect_errno) {
20             die('数据库连接错误'.$mysqli->connect_error);
21         }
22         $mysqli->set_charset($config['charset']);
23         self::$mysqli = $mysqli;
24     }
25 
26     public static function getInstance() {
27         if(!self::$mysqli instanceof self) {
28             new self();
29         }
30         return self::$mysqli;
31     }
32 }
33 ?>

3、具体的页面操作方法如下(假如定义为page.php)

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6     <link href="./resource/bootstrap.css" rel="stylesheet">
 7 </head>
 8 <body>
 9 <div class="container">
10     <?php
11         require_once('test.php');
12         require_once('index.php');
13         $mysqli = DB::getInstance();
14         $total_sql = "SELECT COUNT(*) AS `total` from `goods`";
15         $total = ($mysqli-> query($total_sql))->fetch_assoc();
16 
17         $pageSize = 6;
18         $arr = [];
19         $res_str = sprintf('select * from `goods` limit %d offset %d', $pageSize, (($_GET['page'] ?? 1)-1)*$pageSize);
20         $res = $mysqli->query($res_str);
21         while($row = $res->fetch_assoc()) {
22             array_push($arr, $row);
23         }
24         $res->free();
25         $mysqli->close();
26 
27         $p = new Pagination([
28             'count' => $total['total'],
29             'pageSize' => $pageSize
30         ]);
31         echo $p->init();
32     ?>
33     <table class="table table-bordered table-hover table-striped">
34         <?php foreach($arr as $key=>$val):?>
35             <tr>
36                 <td><?= $val['goods_id']?></td>
37                 <td><?= $val['goods_sn']?></td>
38                 <td><?= $val['goods_name']?></td>
39                 <td><?= $val['goods_number']?></td>
40                 <td><?= $val['market_price']?></td>
41                 <td><?= $val['shop_price']?></td>
42                 <td><?= date('Y-m-d H:i:s',$val['add_time'])?></td>
43             </tr>
44         <?php endforeach;?>
45     </table>
46 </div>
47 </body>
48 </html>

以上即可实现分页的效果!

转载于:https://www.cnblogs.com/rickyctbu/p/10924724.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ActiveMQ –经纪人网络解释

目的 这个由7部分组成的博客系列将分享有关如何创建ActiveMQ代理网络以实现高可用性和可伸缩性的信息。 为什么要建立经纪人网络&#xff1f; ActiveMQ消息代理是企业中消息传递基础结构的核心组件。 它需要高度可用并且可以动态伸缩&#xff0c;以促进具有不同容量需求的动态…

13 创建高级联结

13.1 使用表别名 在之前的例子中&#xff0c;我们用的都是用的列别名&#xff0c;SQL还允许给表名起别名。 13.2 使用不同类型的联结 我们在上一章使用的只是称为内部联结或等值联结&#xff08; equijoin&#xff09; 的简单联结&#xff0c;现在来看3种其他联结&#xff0c;…

JS中undefined和null的区别,以及出现原因

区别&#xff1a;null是一个表示无的对象&#xff0c;转换为数值为0&#xff1b; undefined表示一个无的原始值&#xff0c;转化为数值为NAN&#xff08;与任何数字相加也为NAN&#xff09; undefined出现原因&#xff1a;(口诀&#xff1a;一变量二函数一对象) 1.变量被声明了…

判断一个数是不是质数

number int(input("请输入数字&#xff1a;"))count 2while count < number -1: if number % count 0: #质数是除了1和它本身能除尽。将这个数从2开始除&#xff0c;除到number-1&#xff0c;如果有除尽的就不是质数&#xff0c;如果没有就是质数。…

Java 8:功能接口示例

为了支持Java 8中的lambda表达式&#xff0c;他们引入了Functional Interfaces。 具有单一抽象方法的接口可以称为功能接口。 Runnable&#xff0c;Comparator&#xff0c;Cloneable是功能接口的一些示例。 我们可以使用Lambda表达式实现这些功能接口。 例如&#xff1a; Th…

正则表达式验证问题(用户名、密码、email、身份证

实现的代码如下&#xff1a; 1 <html>2 <head>3 <meta charset"UTF-8">4 </head>5 <body>6 <p>用户名正则表达式 &#xff0c;4到16位&#xff08;字母&#xff0c;数字&#xff0c;下滑线&#xff0c;减号&#xff09;</p&g…

MySQL协议分析(1)

MySQL协议分析 此阶段的协议分析是在未压缩未加密情况下的协议分析 思路&#xff1a; 结合Oracle官网和自己用wireshark抓的网络数据包进行协议分析 官网说明 mysql包共分为4段&#xff0c;格式如下&#xff1a; 第一段&#xff1a;payload&#xff08;通常是执行的SQL语句&…

linux raw socket 例子,raw socket编程例子

raw socket编程例子内容安排:1.原始套接字介绍1.1 原始套接字工作原理与规则1.2 简单应用2 FTP密码窃取器实现(简单的rootkit)2.1 设计思路2.2 实现2.3 不足与改进之处开始,嗯,喝口茶水先...........1.原始套接字(raw socket)1.1 原始套接字工作原理与规则原始套接字是一个特殊…

谨慎使用Hibernate中的本机SQL

我真的很喜欢Hibernate&#xff0c;但我也不知道同时具备强大功能和欺骗性的工具。 我可以写一本书&#xff0c;讲述仅与Hibernate相关的生产和货物崇拜编程中的意外情况。 与用户相比&#xff0c;与工具相比&#xff0c;这更多的是问题&#xff0c;但请不要让它过于保修。 所…

js 编辑数组

删除数组第一个元素使用var length arr.shift(); 删除arr的第一个元素后, 返回值是删除后的数组长度 删除数组最后一个元素使用var length arr.pop(); 删除arr的最后一个元素后, 返回值是删除后数组的长度 在数组开头添加元素使用var length arr.unshif…

tensorboard运行

终端中进入存放even文件的文件夹的上一步&#xff0c;然后&#xff0c;输入tensorboard --logdir存放even文件的文件夹 转载于:https://www.cnblogs.com/wzwi/p/10931397.html

DevExpress WPF v18.2新版亮点(五)

买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套&#xff01; 限量15套&#xff01;先到先得&#xff0c;送完即止&#xff01;立即抢购>> 行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布&#xff0c;本站将以连载的形式…

JavaFX技巧3:使用回调接口

作为UI框架开发人员&#xff0c;提供自定义控件外观和行为的方法是我工作的一部分。 在许多情况下&#xff0c;这是通过允许框架用户在控件上注册工厂来完成的。 过去&#xff0c;我会为此创建一个工厂接口&#xff0c;并在框架内提供一个或多个默认实现。 这些事情在JavaFX中…

爱课程c语言函数2的作业答案,C语言程序设计

Q&#xff1a;本门课程面向的授课群体是什么&#xff1f;没有任何基础能学习本课程吗&#xff1f;A&#xff1a;本门课程的基本内容是面向零基础的学生。进阶内容是面向有一定编程基础或者大学计算机基础的学生&#xff0c;但是进阶内容不做为课程考试内容。Q&#xff1a;本课程…

旧文章搬运完毕

花了一天时间&#xff0c;把原来百度空间里200多篇文章里的70篇重要文章&#xff08;除去扯淡的&#xff09;搬了出来。 希望这些资料对初学者能够有点用&#xff0c;以后有时间还是继续多写一些有用的内容出来。转载于:https://www.cnblogs.com/achillis/p/10183787.html

voinc vue实现级联选择

需求&#xff1a; vonic中实现级联选择 <!DOCTYPE html> <html> <head><title>下拉框</title><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><link rel…

爬虫521错误(又是一次和可爱的前端vs的故事)

起因: 今天突然想重构一下代理池,并且想扩充一下代理,所以就想着爬点代理IP,然后就有了下面的故事 一上来先进行了一顿操作: def get_xxdaili(url):headers {User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safar…

c语言编译器怎样退出全屏,BOOX 应用软件怎样退出全屏模式?

​相信很多用BOOX阅读器的小伙伴都知道BOOX的系统是安卓系统&#xff0c;相对于Kindle的原生Linux系统&#xff0c;BOOX的安卓系统的开放性会更强&#xff0c;可以自由下载一些第三方应用软件。天弟知道很多小伙伴们喜欢在一些第三方应用软件上面看书的习惯&#xff0c;比如像多…

Java 8 Friday:不再需要ORM

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Pwn相关工具安装

$apt-get update $apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential $pip install --upgrade pip $sudo pip install pwntools sudo apt-get install nasm,gcc,gdb,binutils,hexedit #32位libc库 sudo apt-get install lib…