PHP 分页类及测试代码完整收藏版

PHP测试代码设计与实战项目 在现代PHP开发中,测试已成为保障软件质量的核心手段。随着Laravel、Symfony等框架推动企业级应用发展,系统复杂度不断提升,依赖手动验证的开发模式已难以为继。自动化测试不仅能在编码阶段快速暴露逻辑缺陷,更通过可重复执行的测试套件为重构提供安全屏障。单元测试聚焦函数级行为验证,集成测试确保组件协作正常,而端到端测试则模拟真实用户流程,层层递进构建质量防线。缺乏测试的项目往往陷入“修一个bug,出三个新问题”的恶性循环,技术债务不断累积。 阅读详情

 

 

 

这是我在phpchina上搜集到的一个php分页类,我down下后在本机测试了好用,演示效果不错,故收藏在此,和大家分享。

1、运行install.html:(安装数据库及测试数据)

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<title>数据导入系统</title>
<style type="text/css">
<!--
body {
 background-color: #000000;
}
body,td,th {
 color: #FFFFFF;
 font-size: 9pt;
}
.style1 {
 font-size: 24px;
 font-weight: bold;
}
.unnamed1 {
 color: #FFFFFF;
 background-color: #000000;
 border-bottom-width: 1px;
 border-top-style: none;
 border-right-style: none;
 border-bottom-style: dashed;
 border-left-style: none;
 border-bottom-color: #FFFFFF;
}
-->
</style></head>

<body>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<table width="500" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#999999">
  <tr>
    <td height="400" align="left" valign="top" bgcolor="#333333"><div align="center">
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p class="style1">  数据安装系统</p>
      <form name="form1" method="post" action="install.php">
        <table width="80%"  border="0" cellspacing="1" cellpadding="5">
          <tr>
            <td><div align="center">服务器:
                  <input name="server" type="text" class="unnamed1" value="localhost">
            </div></td>
          </tr>
          <tr>
            <td><div align="center">用户名:
                  <input name="name" type="text" class="unnamed1" value="root">
            </div></td>
          </tr>
          <tr>
            <td><div align="center">密 码:
                  <input name="password" type="text" class="unnamed1">
            </div></td>
          </tr>
          <tr>
            <td>              <div align="center">
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              <input name="Submit" type="submit" class="unnamed1" value="下 一 步">           
            </div></td>
          </tr>
        </table>
      </form>
    </div></td>
  </tr>
</table>
</body>
</html>

2、install.php 文件:

<?php
$db=mysql_connect($_POST['server'],$_POST['name'],$_POST['password']) or die("有问题");;
set_time_limit(0);
if(mysql_query("CREATE DATABASE xx_libb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"))
{
 mysql_select_db("xx_libb",$db) or die("有问题");
    echo "<font color='green'>数据库 <b>xx_libb</b> 建立成功</font><br>";
}
echo "<font color='green'>数据库 <b>xx_lib</b> 建立成功</font><br>";
if(mysql_query("CREATE TABLE `xx_book` (
  `iBookId` int(11) NOT NULL auto_increment,
  `vBookName` varchar(100) character set utf8 collate utf8_bin NOT NULL,
  `vAuthor` varchar(50) character set utf8 collate utf8_bin NOT NULL,
  `vPublish` varchar(255) character set utf8 collate utf8_bin NOT NULL,
  `vPubYear` varchar(10) character set utf8 collate utf8_bin NOT NULL,
  `iLogonNum` varchar(50) NOT NULL default '0',
  `iVolume` int(11) NOT NULL default '0',
  `dbPrice` double default NULL,
  `vPlace` varchar(255) character set utf8 collate utf8_bin NOT NULL,
  PRIMARY KEY  (`iBookId`)
)"))
echo "<font color='green'>数据库表 <b>xx_book</b> 建立成功</font><br>";
echo "<font color='green'>数据插入中....</font><br>";
echo "<font color='green'>请稍等....</font><br>";

mysql_query("INSERT INTO xx_book values(null,'最新推销员培训与管理全书','《现代营销最前沿》课题组','中国戏剧出版社','2002','Object id #4','3','26.8','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'最新营销业务代表实战训练手册','《现代营销最前沿》课题组','中国戏剧出版社','2002','Object id #4','2','24.8','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'连锁店 代理店 特约店的经营管理','魏宏丽','中国经济出版社','2002','Object id #4','3','22.8','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'成功有学问','尹申','中国戏剧出版社','2002','Object id #4','3','20','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'私营企业成功手册','启智工作室','中国物价出版社','2002','Object id #4','3','22','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'第2次复活','老巴','金城出版社','2002','Object id #4','3','16.8','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'如何用活流动资金','梅东余','石油工业出版社','2002','Object id #4','3','20','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'财富的承诺','了然','金城出版社','2002','Object id #4','3','20','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'推销人员手册','张永','中国人事出版社','2002','Object id #4','3','22','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'金融病毒','郝瑞庭、赖辉亮','世界知识出版社','1999','Object id #4','3','20','14-A-Ⅲ-2')");
mysql_query("INSERT INTO xx_book values(null,'《福布斯》12条创富钻石法则','王伟、侯书森','中国商业出版社','2002','Object id #4','3','22','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'中国私营公司总经理手册','牟晓萍','中国工人出版社','2002','Object id #4','3','26.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'一个团体领导者应必修的17堂课','王建茹','中国盲文出版社','2002','Object id #4','3','21.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'民营企业进出口贸易实务操作技术','于彦华','内蒙古人民出版社','2002','Object id #4','3','24.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'民营企业抢占市场营销技巧','陈晓燕','内蒙古人民出版社','2002','Object id #4','3','24.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'民营企业国际贸易谈判技巧','王志文','内蒙古人民出版社','2002','Object id #4','3','22','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'文化制胜如何建设企业文化','贾强','沈阳出版社','2002','Object id #4','3','22','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'管理是金有效管理实务','贾强、刘新军','沈阳出版社','2002','Object id #4','3','29.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'点石成金企业培训实务','刘新军','沈阳出版社','2002','Object id #4','3','25.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'体验营销','周岩、远江','当代世界出版社','2002','Object id #4','3','30','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'管道的故事','贝克.哈吉斯','中国对外翻译出版公司','2002','Object id #4','2','11.8','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'联想营销策略','邓智海','内蒙古人民出版社','2002','Object id #4','3','22','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'联想管理模式','邓智海','内蒙古人民出版社','2002','Object id #4','3','22','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'联想人力资源管理','邓智海','内蒙古人民出版社','2002','Object id #4','3','22','14-A-Ⅲ-3')");
mysql_query("INSERT INTO xx_book values(null,'市场疾呼:文化个性','李晓肃','中华工商联合出版社','2000','Object id #4','3','14','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'企业家,请听我说','潘志坚等','中华工商联合出版社','2000','Object id #4','3','14','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'纵横商海的36个突破','罗慧','兵器工业出版社','2001','Object id #4','3','23.8','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'王永庆经营秘诀','祁长松','改革出版社','1997','Object id #4','3','14.8','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'中国打破隐形墙','王凤军','中华工商联合出版社','2000','Object id #4','3','14','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'没钱,怕啥!','澄明','企业管理出版社','2000','Object id #4','2','18.8','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'世界上最伟大的一堂课','奥格.曼狄诺','延边人民出版社','2002','Object id #4','2','16.8','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'PMP项目管理精华读本','舒森、方竹根','安徽人民出版社','2002','Object id #4','2','25','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'走出消费低谷','莫竹琴','中华工商联合出版社','2000','Object id #4','3','14','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'李兆基博士传记','梁凤仪','中国文联出版公司','1997','Object id #4','3','20','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'杰克.韦尔奇创新经营实战全书','H.奥特','黑龙江人民出版社','2002','Object id #4','3','28','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'拿破仑.希尔快速成功致富心法','拿破仑.希尔','黑龙江人民出版社','2002','Object id #4','3','22','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'智慧用人经营之神的用人秘诀','东野一郎','黑龙江人民出版社','2002','Object id #4','3','26','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'在北大清华学MBA','李良忠','中国档案出版社','2002','Object id #4','3','23.6','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'MBA组织行为学精华读本','李宏、杜学忠','安徽人民出版社','2002','Object id #4','3','25','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'MBA管理经济学精华读本','李敏','安徽人民出版社','2002','Object id #4','3','25','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'MBA企业战略管理精华读本','于文明、侯书森','安徽人民出版社','2002','Object id #4','3','25','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'MBA生产运营管理精华读本','黄宪律、刘福广','安徽人民出版社','2002','Object id #4','3','25','14-A-Ⅲ-4')");
mysql_query("INSERT INTO xx_book values(null,'顶尖营销经理','陈月兰','中国工人出版社','2002','Object id #4','3','25.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'顶尖说话口才','陈冠任','中国工人出版社','2002','Object id #4','3','27.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'WTO顶尖秘书','陈冠任','当代中国出版社','2002','Object id #4','3','27.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'WTO顶尖律师','陈冠任','当代中国出版社','2002','Object id #4','3','27.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'WTO顶尖会计','杨英健','当代中国出版社','2002','Object id #4','3','29.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'顶尖策划','雷鸣雏','中国物价出版社','2002','Object id #4','3','30','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'顶尖管理思想','赵丁','地震出版社','2002','Object id #4','3','27','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'顶尖管理智慧','赵丁','地震出版社','2002','Object id #4','3','27','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'顶尖管理能力','赵丁','地震出版社','2002','Object id #4','3','27','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'顶尖管理方法','赵丁','地震出版社','2002','Object id #4','3','27','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'开一家自己的个性店','邓子梁','企业管理出版社','2002','Object id #4','3','28.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'影响中国经济的十大风云人物','邱卫东、侯书森','中国商业出版社','2002','Object id #4','3','22','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'松下成功之道全集','周晓晗','内蒙古文化出版社','2001','Object id #4','3','26.8','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'经典营销法则106','鲁开垠等','经济日报出版社','2002','Object id #4','3','20','14-A-Ⅲ-5')");
mysql_query("INSERT INTO xx_book values(null,'兼并浪潮与中国对策','段克兢','世界知识出版社','1999','Object id #4','3','12.5','14-A-Ⅲ-6')");
mysql_query("INSERT INTO xx_book values(null,'金融浪潮与中国对策','袁茵、陈祖华','世界知识出版社','1999','Object id #4','3','12.5','14-A-Ⅲ-6')");
mysql_query("INSERT INTO xx_book values(null,'知识经济与中国对策','李守耕等','世界知识出版社','1999','Object id #4','3','12.6','14-A-Ⅲ-6')");
mysql_query("INSERT INTO xx_book values(null,'中国经济学家代表作精选','中国发展出版社','中国发展出版社','1998','Object id #4','3','18','14-A-Ⅲ-6')");
mysql_query("INSERT INTO xx_book values(null,'中国职业经理人','赵学山','当代世界出版社','2002','Object id #4','3','22.8','14-A-Ⅲ-6')");
mysql_query("INSERT INTO xx_book values(null,'克服逆境','路西','中国盲文出版社','2002','Object id #4','3','20','14-A-Ⅲ-6')");
mysql_query("INSERT INTO xx_book values(null,'为人民服务 让人民满意','中宣部等','中国人事出版社','1999','Object id #4','3','19.5','14-B-Ⅱ-1')");

if(mysql_query("INSERT INTO xx_book values(null,'燕歌行续(下)','周郎','太白文艺出版社','1999','Object id #4','3','16.3','23-B-Ⅲ-6')"))
echo "数据插入成功";
?>

 

3、运行完install.html后提示数据库安装成功,然后运行example.php,代码如下:

需自行修改登录数据库的密码

<style type="text/css">
/*链接面号的样式*/
.pagelink {
 margin:0px 0px 0px 0px;
 padding:0px 3px 0px 3px;
 border:1px solid #159BD0;
}
/*下拉菜单或文本输入框样式*/
#JumpSelect{
  background:#159bd0;
  border:1px solid #ffff66;
  color:#ffff66;
}
</style>
<?php
 /**
  * @Author:   hqlong
  * @CreatTime:  2006-04-06
   * @UpdateTime-1: 2006-07-26
     * @UpdateTime-2: 2006-11-07

  * @UpdateTime-2: 2006-1-21
  * @LastUpdateTime: 2007-3-
16
  */
  require_once("page.class.php");
 $conn = mysql_connect("localhost","root","831025");
 mysql_select_db("xx_libb");
 $sql = "select iBookId,vBookName from xx_book limit 0,10";
 /**
  *  首先实例化这个类($sql:sql查询语句,如果规定了limit,则每页显示数以limit后的数目
  *  为准,如果末给定,刚采用默认显示条数,$CycNum:循环显示的页号数,缺省显示$CycNum*2
  *  条,此参数可以缺少,该参数的所有功能得要在$IsDisNum设为true时才有效。
  * 原型$page = new ($sql,$CycNum);
  */
 $page =  new Page($sql,5);
 /*********
  * 方法原型
  *调用分页函数,并返回经格式化后的sql语句,$Sortid:排序ID,整个显示都是依$Sortid来
   *进行排序的,$IsEncode:是否对页号加密,该参数可以省略,缺省时不加密该,该参数值为
   *bool型,取值范围true,false。$IsNeedStat:是否显示统状况,可省略,缺省时不显示,
   *取值范围true、false,$SortMethod为排序方式,取值范围up or down,up为升序, down
   *为降序,如果不提供,只默认为down
  $sql = $page->StartPage($Sortid,$IsEncode = false,$IsNeedStat = false,$SortMethod = "down");
 ****************/
 $sql =  $page->StartPage("iBookId",false,false,'down');
 $result = mysql_query($sql);
 while($arr = mysql_fetch_array($result)){
  echo $arr[1]."<br>";
 }
 //按扭名称
 //$ButtonArray = array("","<<",">>","");
 $ButtonArray = array("<","<<",">>",">");
 /*显示分页状况,此功能和IsNeedStat设置为ture里的功能一样,如果对系统系统统计状态的位置不
 * 能满足你的要求,那么我们就可能直接调用系统内部状态统计函数*/
  //echo "<br>".$page->PageStat()."<p>";
 /*原型$page->EndPage($ButtonArray,$JumpType = "none",$IsDisNum = false)
  $JumpType可选参数 select,text,none.IsDisNum是否显示$CycNum*2条页数
 */
 echo $page->EndPage($ButtonArray,"select",true);
 //echo $page->DisPageNum();
 
?>

4、page.class.php 文件:分页类的实现

<?php
/**
 * @descrition
 * 此类为PHP+MYSQL的分页显示类,此类是通过自己先前写的分页函数修改而来,本类继承了当前
 * 分页显示的绝大部分功能,并且对这么功能可以筛选,选择自己所需的功能,本类提供的功能有:
 * 基本翻页按扭(可对按扭自行设计)、分页统计功能(对当前页的数据进行统计,使用户更加一目
 * 了然)、跳转功能(这里我们提供了两种跳转方式,可以通过设置相关参数进而来选择自己所需要
 * 的跳转方式,这两种跳转方式为:下拉式菜单跳转文本输入框跳转,可以通过设置id为JumpSele
 * ct的元素的样式来改变跳转框的界面)、对跳转的页号,提供了加密功能,这也是可以根据相关的
 * 参数设置来定制的.
 * @Author:   hqlong
 * @CreatTime:  2006-04-06
 * @UpdateTime-1: 2006-07-26
 * @UpdateTime-1: 2006-11-07
 * @LastUpdateTime: 2007-1-21
 * @recentModify: 2007-6-6
 * @CopyRight: hqlong
 * @Introduce: 
 * 1. 首先实例化这个类($sql:sql查询语句,如果规定了limit,则每页显示数以limit后的数目
 *   为准,如果末给定,刚采用默认显示条数,$CycNum:循环显示的页号数,缺省显示$CycNum*2
 *    条,此参数可以缺少,该参数的所有功能得要在$IsDisNum设为true时才有效。
 *    $page = new ($sql,$CycNum);
 * 2. 调用分页函数,并返回经格式化后的sql语句,$Sortid:排序ID,整个显示都是依$Sortid来
 *   进行排序的,$IsEncode:是否对页号加密,该参数可以省略,缺省时不加密该,该参数值为
 *    bool型,取值范围true,false。$IsNeedStat:是否显示统状况,可省略,缺省时不显示,
 *    取值范围true、false,$SortMethod为排序方式,取值范围up or down,up为升序, down
 *    为降序,如果不提供,只默认为down
 *    $sql = $page->StartPage($Sortid,$IsEncode = false,$IsNeedStat = false,
 *   $SortMethod = "down");
 * 3. 接下来就是执行$sql,和平时查询数据的操作一样
 *    $result = mysql_query($sql)
 *    while($arr = mysql_fetch_array($result)){
 *      echo $arr[0];//这里打印输入
 ×  }
 * 4. 显示翻页按扭,和自己定制的一种功能 $ButtomArray:翻页按扭定置数组,定置普通按扭的
 *    形式如 $ButtomArray = array("首页","上页","下页","末页"),这里是一个数组,而且
 *    数组元素个素为四,如果不按此规定设置,一切设置将视为无效,显示将按程序默认方式显示
 *    $JumpType:定制跳转框,取值范围为select、text、none,其中select为下拉菜单显示框
 *    ,text文本输入框,none不定制任何跳转框,此处注意,当设置成text时,不能对页号进行加
 *    密,此参数可省略,缺省状况下不显示任何跳转框,$IsDisNum:是否显示循环页号数,取值范
 *    围为true,false,此参数可以省略,缺省状况下为false,即,不显示循环页号.
 *    $page->EndPage($ButtonArray,$JumpType = "none",$IsDisNum = false)
 * 5. 如果对程序提供的统计显示位置感到不满意,可以通过调用$page->PageStat()来得到统计
 *    状态,此返值字符串,即可以把这些统计文字放在你想放的任何地方
 * @Example:
 *  $sql = "select iBookId,vBookName from xx_book limit 0,10";
 * $page =  new Page($sql);
 * //StartPage($Sortid,$IsEncode = false,$IsNeedStat = false,$SortMethod = "down")
 * $sql =  $page->StartPage("iBookId",false,true,"down");
 * $result = mysql_query($sql);
 * while($arr = mysql_fetch_array($result)){
 *  echo $arr[1]."<br>";
 * }
 * $ButtonArray = array("首页","上页","下页","末页");
 *  //可单独显示
 * //echo "<br>".$page->PageStat()."<p>";
 * echo $page->EndPage($ButtonArray,'text',true);
 *
 */
class Page{
 /**
  * @description
  * 每页记录数,如果未给定,则默认显示数为 10 条
  * @var int
    */
 private $PageSize = 10;
 /**
  *
  * @description
  * 总页数
  * @var int
    */
 private $TotalPage;
 /**
  * @description
  * 总记录数
  * @var int
    */
 private $RecordNum;
 /**
  * @description
  * 记录总数
  * @var int
    */
 private $NowPage;
 /**
  * @description
  * 执行的sql语句
  * @var int
    */
 private $QueryString;
 /**
  * @description
  * 地址栏中的页数是否加密
  * 默认不加密
  * @var string
    */
 private $IsEncode = false;
 /**
  *
  * @description 是否需要显示当前显示状态
  * @var unknown_type
    */
 private $IsNeedStat;
 /**
  * ******************************************************
  * @description 循环显示页号数
  * 默认显示数 10 条
  * @var int
  */
 private $CycNum = 5; 
 /**
  *
  * @description 析构函数,该分页类创建对象时,自动调用
  * 对sql语句进行判断,获取文章每页显示数
  * @param string $sql
    */
 public function __construct($sql,$CycNum = 5){
  if(
!@mysql_ping()){
   echo "Please check your database link";
   exit;   
  }
  if(is_numeric($CycNum)){
   $this->CycNum = $CycNum;
  }else{
   $this->CycNum = $this->CycNum;
  }
  if(trim($sql) != ""){
   /*if(preg_match("/limit/",$sql)){
    list($sql,$limit) = explode("limit",$sql);
   }else{
    list($sql,$limit) = explode("LIMIT",$sql);
   }
   $this->QueryString = $sql;
   list($cnt1,$cnt2) = explode(",",$limit);
   if(!empty($cnt2)){
    $this->PageSize = $cnt2;
   }elseif(!empty($cnt1)){
    $this->PageSize = $cnt1;
   }else{
    $this->PageSize = $this->PageSize;
   }*/
   /**修改于2006年11月23日,解决出现Notice: Undefined offset: 2***/
   if(preg_match("/limit/",$sql)){
    list($sql,$limit) = explode("limit",$sql);
   }else if(preg_match("/LIMIT/",$sql)){
    list($sql,$limit) = explode("LIMIT",$sql);
   }
   //$this->QueryString = $sql;
   if(isset($limit)){
    list($cnt1,$cnt2) = explode(",",$limit);
    if(!empty($cnt2)){
     $this->PageSize = $cnt2;
    }elseif(!empty($cnt1)){
     $this->PageSize = $cnt1;
    }else{
     $this->PageSize = $this->PageSize;
    }
   }
   $this->QueryString = $sql;
   unset($cnt1);
   unset($cnt2);
  }
 }
 /**
  *
  * @description 获取相应规定数目的记录
  * 并计算出总记录数,总页数等比较重要的参数
  * @param int $Sortid
  * 排序ID
  * @param bool $IsEncode
  * 页号是否加密,true为加密,false为不加密
  * @return string
  */
 public function StartPage($Sortid,$IsEncode = false,$IsNeedStat = false,$SortMethod = "down"){
  $Result = mysql_query($this->QueryString);
  $this->RecordNum = @mysql_num_rows($Result);
  $this->TotalPage = ceil($this->RecordNum/$this->PageSize);
  /*******************************************************
   * 初始化类属性IsNeedStat
   *******************************************************/
  if($IsNeedStat === true or $IsNeedStat === false){
   $this->IsNeedStat = $IsNeedStat;
  }else{
   echo "<b>Warning</b>:<i>方法StartPage中的参数IsNeedStat只能是bool</i>";
  }
  /*******************************************************
   * 初始化类属性IsEncode
   *******************************************************/
  if($IsEncode === true or $IsEncode === false){
   $this->IsEncode = $IsEncode;
  }else{
   echo "<b>Warning</b>:<i>方法StartPage中的参数IsEncode只能是bool</i>";
  }
  
  /*******************************************************
   *接收从url中传过来的当前页数,如果非数字,刚获取其整数值
   *******************************************************/
  if(isset($_REQUEST['NowPage'])){
   $this->NowPage = intval($_REQUEST['NowPage']);
  }
  
  /*******************************************************
   *根据$IsEncode的值来判断页号是否解密,如果$IsEncode的值非bool,
   *则给出警告信息,但并不影响程序执行,且默认不加密.
   *******************************************************/
  if($this->IsEncode === true){
    $this->NowPage = intval($this->StrDecode($_REQUEST['NowPage']));
  }
  //排列顺序 up 升序 down 降序
  if(isset($SortMethod) && $SortMethod == "up"){
   $SortMethod = "ASC";
  }elseif(isset($SortMethod) && $SortMethod == "down"){
   $SortMethod = "DESC";
  }else{
   echo "<b>Warning</b>:<i>方法StartPage中的参数SortMethod只能是down或者up</i>";
  }
  if(!isset($this->NowPage)){
   $this->NowPage = 1;
  }elseif($this->NowPage <= 0){
   $this->NowPage = 1;
  }elseif($this->NowPage > $this->TotalPage){
   $this->NowPage = $this->TotalPage;
  }else{
   $this->NowPage = $this->NowPage;
  }
  $OffSet = $this->PageSize * ($this->NowPage -1);
  $sql = $this->QueryString." ORDER BY ".$Sortid." ".$SortMethod." LIMIT ".$OffSet.",".$this->PageSize;
  return $sql;
 }
 /**
  *
  * @description
  * 翻页按扭的显示,如:首页 上页 下页 末页,可以定制自定义翻页按扭样式
  * 此函数也是 外面调用此类的入口.将返回经处理后的sql语
  * @param array $ButtonArray
  * 翻页按扭形式,用户可随意定制:如:
  * $ButtonArray = array("首页","上页","下页","末页");
  * @param string $JumpType
  * 附加选项,通过能参数,可定制跳转框,select 下拉跳转框,text 文
  * 本输入跳转框,none 不定制任何跳转框
  * @param bool $IsDisNum
  * 是否显示循环分页,true 显示 false 不显示;如:
  * 1 2 3 4 5 6 7 8 9 10
  * @return string
  */
 public function EndPage($ButtonArray,$JumpType = "none",$IsDisNum = false){
  $FirstPage = 1;
  $PrePage    = $this->NowPage - 1;
  $NextPage    = $this->NowPage + 1;
  $LastPage    = $this->TotalPage;
  /**
   * 根据参数$ButtomArray来得到用户定制的按扭,如果参数给出类型
   * 不正确,则采用系统默认按扭
   */
  if(!is_array($ButtonArray) or count($ButtonArray) != 4){
   $ButtonArray = array("First","Precede","Next","Last");
  }
  if($this->IsNeedStat === true){
   $ReturnStr   = "<p>".$this->PageStat()."</p>";
  }else{
   $ReturnStr   = ""; 
  }  
  $ReturnStr  .= $this->ToPage($FirstPage,$ButtonArray[0],"First");
  $ReturnStr  .= " ";
  $ReturnStr  .= $this->ToPage($PrePage,$ButtonArray[1],"Pre");
  if($IsDisNum === true){
   $ReturnStr  .= " ".$this->DisPageNum()." ";
  }elseif($IsDisNum === false){
   $ReturnStr .= " ";
  }else{
   /**
    * 对参数的合法性,进行审核
    */
   echo ('<b>Warning</b>:<i>方法EndPage()中参数$IsDisNum的类型是bool,只能是 true或者false</i><br>');
   $ReturnStr .= " ";
  }
  $ReturnStr  .= $this->ToPage($NextPage,$ButtonArray[2],"Next");
  $ReturnStr  .= " ";
  $ReturnStr  .= $this->ToPage($LastPage,$ButtonArray[3],"Last");
  $ReturnStr  .= " ";
  if($JumpType === 'select'){
   $ReturnStr .= $this->JumpSelect('select');
  }elseif($JumpType === 'text'){
   $ReturnStr .= $this->JumpSelect('text');
  }elseif($JumpType === 'none'){
   //待写入
  }else{
   echo ('<b>Warning:</b><i>方法EndPage()中参数$JumpType 的值只能是 select text none </i><br>');
  }
  return $ReturnStr;
 }
 /**
  *
  * @description
  * 创建翻页按扭,并根据$Flag 的值来设置按扭是否可用,即:按
  * 扭是否带有链接,此此函数外界不可访问,属于该类私有方法
  * @param int $Page 将要跳转的页数
  * @param string $Msg 跳转按扭名称
  * @param string $Flag 按扭显示类型的判断
  * @return string
  */
 private function ToPage($Page,$Msg,$Flag = ''){
  /*
   * 对$this->IsEncode为真,则对页数进行解密
   */
  if($this->IsEncode === true){
   $Page = $this->StrEncode($Page);
  }  
  $Url = $this->GetUrl($Page);
  $UrlStr = "<a class='pagelink' href='".$Url."'>".$Msg."</a>";
  /*
   *如果当前页是小于或者等于第1页,那么首页和上页不显示链接
   * 如果当前页大于或者等于最后一页,那么末页和下页不显示链接
   * 对于其它情况,四个跳转按扭都显示*******
   */
  if(($this->NowPage <= 1 and ($Flag == "First" or $Flag == "Pre"))
  or ($this->NowPage >= $this->TotalPage and($Flag == "Next" or $Flag == "Last"))){
   $UrlStr = "<span class='pagelink'>".$Msg."</span>";
  }else{
   //待写入
  }
  return $UrlStr;
 }
 /**
  *
  * @description
  * 获取当前的URL地址,并对将要跳转的地址做出修改,此方法也属于私有
  * 方法,外界不可访问,只能被类内部调用
  * @param int  $Page 将要跳转的页数
  * @return string
  */
 private function GetUrl($Page){
  //2007年6月6日进行修改,解决$_SERVER['REQUEST_URI']在IIS服务器中不存在这
  //样的环境变量,需要用用$_SERVER[SCRIPT_NAME]."?".$_SERVER[QUERY_STRING]
  //来组合替代
  if(!isset($_SERVER['REQUEST_URI'])) $request_url = $_SERVER[SCRIPT_NAME]."?".$_SERVER[QUERY_STRING];
  else $request_url = $_SERVER['REQUEST_URI'];
  /*下面代码于2006年12月1日进行了修改,其中$_SERVER['REMOTE_ADDR']被修改成下面的
   *$_SERVER['SERVER_ADDR'];$_SERVER['REMOTE_ADDR']为远程客户端地址,而$_SERVE
   *R['SERVER_ADDR']为服务器端地址SERVER_ADDR*/
  if($_SERVER['SERVER_PORT'] == 80){
   $Url = "
http://".$_SERVER['SERVER_NAME'].$request_url;
  }else{
   $Url = "
http://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].$request_url;
  }
 // $Url = preg_replace("//?NowPage=[0-9]*&?/i","",$Url);
 // $Url = preg_replace("/&NowPage = [0-9]*&?/i","",$Url);
  /*** *********************************************
   * 对url做出修改,将url中的?NowPage = "任何字符" 或者
   * $NowPage = "任何字符" 替换成 空,供下面对url的增加
   *************************************************/
  $Url = preg_replace("//?NowPage=.*&?/i","",$Url);
  $Url = preg_replace("/&NowPage=.*&?/i","",$Url);
  /***************************************************
   *如果$Page = 0,则只取得当前URL,不再加向url全传值
   ***************************************************/
  if($Page === 0){
   return $Url;
  }
  /*判断先前是否已存在url传值,如果存在,
   *则加&NowPage=,否则加?/NowPage =
   */
  if(preg_match("//?/",$Url)){
   $Url = $Url."&NowPage=".$Page;
  }else{
   $Url = $Url."?NowPage=".$Page;
  }
  return $Url;
 }
 /**
  *
  * @description
  * 对分页状况的一个统计,此方法可以定制,
  * 即:可要,也可不要,如需要显示当前状况
  * 在外部需显示的地方调用此方法即可.
  * @return string
  */
 public function PageStat(){
  $StatString  = "共有 ".$this->RecordNum." 条记录  ";
  $StatString .= "当前第 ".$this->NowPage." 页/共有 ".$this->TotalPage." 页 ";
  $StatString .= "每页显示 ".$this->PageSize." 条";
  return $StatString;
 }
 /**
  *
  * @description
  * 创建两种跳转框,一种下拉跳转菜单,一种文本输入菜单
  * 下拉菜单跳转框,当鼠标选中需跳转的页后,程序自动
  * 进行跳转到所指定的页数,文本输入菜单则是用户在文本
  * 框内输入要跳转的页数,鼠标外部单击,刚自己跳转
  * @param string $JumpType
  * 跳转菜单类型 select 下拉跳转框 text 文章输入跳转框,
  * none 不定制任何跳转框
  */
 private function JumpSelect($JumpType){
  $Url = $this->GetUrl(0);//获取当前url
  /**
   *判断先前是否被已经URL传值******
   */
  if(preg_match("//?/",$Url)){
   $Url = $Url."&NowPage";
  }else{
   $Url = $Url."?NowPage";
  }
  $JumpString  = "转到";
  if($JumpType === 'select'){
   $JumpString .= "<select id='JumpSelect' name='NowPage' size='1'";
   $JumpString .= "onChange=/"window.location = '".$Url."='+this.value/">";
   for($i = 1; $i <= $this->TotalPage;$i++){
    /**选中当前页*/
    if($this->NowPage == $i){
     $Extra = "selected";
    }else{
    $Extra = "";
    }
    if($this->IsEncode === true){
     $JumpString .= "<option value='".$this->StrEncode($i)."' ".$Extra.">".$i."</option>";
    }else{
     $JumpString .= "<option value='".$i."' ".$Extra.">".$i."</option>";
    }
   }
   $JumpString .= "</select> 页";
  }elseif($JumpType === 'text'){
   $Title = "鼠标外部单击,文章转向";
   $JumpString .= "<input id='JumpSelect' type='text' size='2' value='".$this->NowPage."'onBlur=/"";
   $JumpString .= "javascript:if(isNaN(parseInt(this.value)) || parseInt(this.value)";
   $JumpString .= " > ".$this->TotalPage."){alert('您输入的数字只能在 1 ~ ".$this->TotalPage;
   $JumpString .= "之间,请重新输入'); return false;}location.href='".$Url."='+parseInt(this.value)/" title='".$Title."'>";
   $JumpString .= " 页";
  }else{
   
  }
  return $JumpString;
 }
 /**
  *
  * @description 对页数进行循环显示,如 1 2 3 4 5
  * @return unknown
  */
 private function DisPageNum(){
  //循环显示规定数目的页号
  if(!isset($PageNumString)){
   $PageNumString = "";
  }
  for($i = $this->NowPage - $this->CycNum;$i < $this->NowPage + $this->CycNum;$i++){
   if($i <= 0){
    $i = 0;
    continue;
   }elseif($i > $this->TotalPage){
    break;
   }elseif($i == $this->NowPage){
    $PageNum = "<font color=green>[".$i."]</font>";
    $PageNumString .= $this->ToPage($i,$PageNum)." ";
   }else{
    $PageNumString .= $this->ToPage($i,$i)." ";
   }
  }
  return $PageNumString;
 }
 /**
  *
  * 对字符串进行加密
  * @param string $str
  * @return string
  */
 private function StrEncode($str){
  $encodeArr = str_split($str);
  $encode = '';
  for($i = 0; $i < count($encodeArr); $i++){
   $encodeStr = ord($encodeArr[$i]) + $i;
   $encode .= ($encodeStr)."|<<&>>|";
  }
  return urlencode(base64_encode(($encode)));
 }
 /**
  *
  * @description 对字符加密的字符串进行解密
  * @param string $str
  * @return string
  */
 private function StrDecode($str){
  $decode = base64_decode(urldecode($str));
  $decodeArr = explode("|<<&>>|",$decode);
  $decodeStr = '';
   for($i = 0;$i < count($decodeArr);$i++){
   if($decodeArr[$i] == '') continue;
    $decode = $decodeArr[$i];
    $decode = $decode;
    $decodeStr .= chr($decode - $i);
   }
   return $decodeStr;
 }
 /**
  *
  * @description
  * 本分页类的析构函数
  */
 public function __destruct(){
  //echo "destruct";
 }
}
?>

 


PHP简单漂亮的分页类(所有代码都有) PHP简单漂亮的分页类 连接数据库,php代码,样式CSS,HTML等代码都有,只要修改下数据名称,表名就可以测试 立即下载

相关推荐

php完整分页代码

  代码如下:   //分页统计 $perNumber=5; //每页显示的记录数 $page=@$_GET['page']; //获得当前的页面值 $count=mysql_query("select count(*) from article"); //获得记录总数 $rs=mysql_fetch_array($count); $totalNumber=$rs[0]; $total...

沉默的羔羊 1186

简单实用的PHP分页代码

其中$l为总数据条数

MeiLiCongLin的博客 1056

简单的PHP分页显示代码,请大卡多多指教

">下一个

my2013win的博客 399

php mysql新闻页面_php实现新闻页面

file: page.class.php完美分页类 Page*/classPage {private $total; //数据表中总记录数private $listRows; //每页显示行数private $limit; //SQL语句使用l...

weixin_39910963的博客 718

php用类来分页,php自用分页类

很早以前写的了,现整理共享出来。:)相关代码在下面,先发下效果图:下拉列表分页PMA和NORMAL两种模式差别效果图:分页类Page.class.php/*** 本类主要用于实现简单分页* Page.class.php*/class Page{private $page_num; //每页显示的信息条数private $page_all_no; //信息的总条数private $page_len;...

weixin_33967069的博客 323

php radius缓存,php 缓存使用监控测试代码

php 缓存使用监控测试代码。将以下代码存在PHP WEB网站下面,然后通过IE浏览器进行访问。#cat ocpcache.php/** Fetch configuration and status information from OpCache*/$config = opcache_get_configuration();$status = opcache_get_status();/** T...

weixin_42511053的博客 221

php类内能访问内外的类,PHP 分页类,可以集成到框架内

跳至pagenum = ceil($count/$pagesize);$this->pagesize = $pagesize;$this->page =(isset($_GET['p'])&&$_GET['p']>0) ? intval($_GET['p']) : 1;}/*** 获得 url 后面GET传递的参数*/public function getUrl(...

weixin_35967330的博客 79

Hamcrest-php最佳编码实践:编写可读性强、维护性好的测试代码

Hamcrest-phpPHP官方实现的Hamcrest匹配器库,它提供了一种声明式的方式来编写可读性强、维护性好的测试代码。作为PHP测试框架的重要补充,Hamcrest-php帮助开发者编写更具表达力的断言,让测试代码更接近自然语言。📝 ## 为什么选择Hamcrest-php进行测试开发? Hamcrest-php的核心优势在于其**语义化表达**和**组合性设计**。传统的断言往往

gitblog_00270的博客 396

php 测试代码执行时间

一旦配置完成,每次请求都会自动生成一份格式的性能分析报告。借助像KCacheGrind这样图形化的查看器,可以直观地看到每个函数被调用了多少次及其耗时情况,进而有针对性地进行优化工作。通过上述方法,无论是简单的调用还是结合Xdebug进行深度剖析,都可以有效地帮助我们衡量PHP代码的执行效率。定期检查关键路径上的性能表现,并采取适当措施加以改进,是保持网站流畅运行的关键之一。希望这篇指南能为正在寻找提高PHP应用程序性能之道的朋友提供一些启示!

w1adgjmptw1016的博客 751

php实现分页

//IndexController.class.php <?php header("content-type:text/html;charset=utf-8"); //定义最终的分页类 final class Pager { //私有的成员属性 private $records; //总记录数 private $pages; //总页数 private $pagesize...

u011234448的博客 688

php7连接mysql测试代码

php7连接mysql测试代码 <?php $mysqli = new mysqli("localhost", "root", "password"); if(!$mysqli) { echo"database error"; }else{ echo"php env successful"; } ...

weixin_30276935的博客 810

intval php 实现,php intval的测试代码发现问题

php intval的测试代码发现问题发布于 2014-09-26 23:20:01 | 63 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为p...

weixin_34816303的博客 132

php 测试代码

1.测试代码使用内存<?php echo memory_get_usage(); $var = str_repeat("test", 10000); echo memory_get_usage(); unset($var); echo memory_get_usage(); ?> 2.测试代码所耗时间<?php $t1 = microtime(true); sleep(3); $t2

andysongjinqiang的博客 604

Page分页类(一)

我第一次做的分页类,写了3种样式,就直接定死了,用了一个接口+工厂模式,写的 别的不说,先上代码! 1 <?php 2 3 /** 4 * 分页类的实现 5 * 分页样式的选择 6 * @author lvmin 7 * 8 */ 9 10 header('Content-Type:text/html;...

weixin_30278237的博客 238

php测试代码,PHP脚本测试_php

我们经常会遇到这种情况:将一些没有经过任何测试的遗留代码进行重新编写测试,甚至这些代码还是用面向对象写的。要对这样的代码进行测试,我的建议是把代码分解成块,这样就容易测试了。然而,这些遗留代码并不是那么好重构的,比如:测试前,你不能在把代码重新编写,这是为了避免影响原有程序,当然也不好进行单元测试。在php程序中,通常有一部分代码是写在几个index.php和script.php文件中的,这些.p...

weixin_29258865的博客 439

php+身体小测试代码,php身体小测试代码

define('需要跳转时人数的宏',10);define('在线时间长'.5*60);//单位为秒function 计算在线人数(){$inlinelist=在线人员列表;//结构为‘人’=》人名或者对象,’上线时间‘=》时间$num=0;$nowtime = time();foreach($inlinelist as $oneuser){if(($nowtime-$oneuser['上线时间'...

weixin_36487107的博客 191

分页php 数据库,用PHP操作MySql数据库(分页)

以下为引用的内容:?php/** mysql数据库 分页类* @package pagelist* @author yytcpt(无影)* @version 2008-03-27* @copyrigth http://www.d5s.cn/*//** 分页样式.page{float: left;font: 11px Arial, Helvetica, sans-serif; padding:6px...

weixin_36302134的博客 147
上一篇: PHP 接收checkbox复选框信息的方法
下一篇: Javascript实用技巧集锦
enjoyxp
博客等级 码龄19年 11粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值