php中带关键字搜索功能的分页函数的设计及实例
2016-07-24 19:51
555 查看
在网站中经常用到分页功能,因此将分页功能封装成一个函数,在调用时可以减少编程工作量。
该分页函数的功能主要是输出分页的链接,下面是分页函数1.php中的page()函数代码:
<!-- conn.php 连接MySql数据库-->
<?php
$conn=mysql_connect("localhost","root","098933mabing"); //连接数据库服务器
mysql_query("set names 'utf-8'"); //设置字符集
mysql_select_db("guestbook",$conn); //选择数据库
?>
【注】该程序预先在MySql服务器中的guestbook数据库中包含一张名为lyb的表。
1. 分页函数的设计:
这里分页函数输入有五个参数:记录总数$RecordTotalNum,每页显示的记录数$PerPageSize,当前显示的页数$Page,当前页的$url,查询关键字$keyword,只要设置好这5个参数(如果没有查询关键字$keyword可不设计),就可以调用分页函数了。该分页函数的功能主要是输出分页的链接,下面是分页函数1.php中的page()函数代码:
<!-- 1.php 分页函数 --> <?php function page($RecordTotalNum,$PerPageSize,$Page,$url,$keyword) { $PageCount=ceil($RecordTotalNum/$PerPageSize); //计算总页数 $page_previous=($Page<=1)?1:($Page-1); //计算上一页的页数 $page_next=($Page>=$PageCount)?$PageCount:($Page+1); //计算下一页的页数 $page_start=($Page-5>0)?($Page-5):0; //只显示本页前5页的页码链接 $page_end=($page_start+10<$PageCount)?($page_start+10):$PageCount; //只显示本页后五页的链接 //若超过10页,只显示本页前后5页的链接 $page_start=$page_end-10; if ($page_start<0) $page_start=0; //若当前不合法,更正 $parse_url=parse_url($url); //判断$url中是否存在【URL字符串】 if (empty($parse_url['query'])) $url=$url.'?'; //若不存在,在$url后添加? else $url=$url.'&'; //若存在,在$url后添加& //var_dump($RecordTotalNum,$PerPageSize,$Page,$url,$keyword,$page_start,$page_end); 用于调试 if (empty($keyword)) { if ($Page==1) $navigator="[首页] [上一页] "; else $navigator=" <a href='?Page=1'>[首页]</a> <a href=".$url."Page=$page_previous>[上一页]</a> "; for ($i=$page_start; $i < $page_end; $i++) { $j=$i+1; if ($j==$Page) $navigator=$navigator."$j "; else $navigator=$navigator."<a href='".$url."Page=$j'>$j</a> "; } if ($Page==$PageCount) $navigator=$navigator." [下一页][末页]"; else $navigator=$navigator." <a href=".$url."Page=$page_next>[下一页]</a> <a href=".$url."Page=$PageCount>[末页]</a>"; $navigator.=" 共".$RecordTotalNum."条记录 $Page/$PageCount 页"; } else { //如果设置了查询关键词,则将查询关键字加到URL链接中 if ($Page==1) $navigator="[首页] [上一页] "; else $navigator=" <a href='?Page=1'>[首页]</a> <a href=".$url."keyword=$keyword&Page=$page_previous>[上一页]</a> "; for ($i=$page_start; $i < $page_end; $i++) { $j=$i+1; if ($j==$Page) $navigator=$navigator."$j "; else $navigator=$navigator."<a href='".$url."keyword=$keyword&Page=$j'>$j</a> "; } if ($Page==$PageCount) $navigator=$navigator." [下一页][末页]"; else $navigator=$navigator." <a href=".$url."keyword=$keyword&Page=$page_next>[下一页]</a> <a href=".$url."keyword=$keyword&Page=$PageCount>[末页]</a>"; $navigator.=" 共".$RecordTotalNum."条记录 $Page/$PageCount 页"; } echo $navigator; //输出分页链接 } ?>
2. 分页函数的实例:
下面代码通过调用分页函数来实现分页,代码如下:<!-- conn.php 连接MySql数据库-->
<?php
$conn=mysql_connect("localhost","root","098933mabing"); //连接数据库服务器
mysql_query("set names 'utf-8'"); //设置字符集
mysql_select_db("guestbook",$conn); //选择数据库
?>
<!-- 2.php 调用分页函数实现分页的实例 --> <?php require("1.php"); //调用分页函数所在文件 require("conn.php"); if (isset($_GET['Page']) && (int) $_GET['Page']>0) //获取页码并检查是否非法 $Page=$_GET['Page']; else $Page=1; //如果获取不到页码则显示第一页 $keyword=$_GET['keyword']; //获得关键字 if ($keyword<>"") $result=mysql_query("select * from lyb where title like '%$keyword%'",$conn); //模糊匹配 else $result=mysql_query("select * from lyb",$conn); $RecordTotalNum=mysql_num_rows($result); //记录总数 if ($RecordTotalNum<=0) { //判断查询结果是否为空 echo "<script> alert('没有搜索到含该关键词的标题!');location.href='7.3.3-2.php'; </script>"; //刷新 exit(); //提前退出脚本程序 } if (isset($_GET['PerPageSize'])) { //每页显示的记录数 $PerPageSize=$_GET['PerPageSize']; $_SESSION["PerPageSize"]=$_GET['PerPageSize']; //该值保存到Session变量中,防止切换页面$PerPageSize又恢复默认值 } if ($_SESSION["PerPageSize"]>0) //如果Session变量不为空(超过$RecordTotalNum会显示最大记录数) $PerPageSize=$_SESSION["PerPageSize"]; else $PerPageSize=2; //第一次进入或输入不合法时默认显示2条 ?> <form method="get" action=""> <div style="border:1px solid gray;background:#eee;padding:4px;"> 根据标题查找留言:请输入关键字 <input type="text" name="keyword" value="<?= $keyword ?>" /> <!-- 当输入关键字后,一直在输入框显示关键字 --> <input type="submit" value=" 查询 " /> </div> </form> <h3 align="center">自定义每页记录数的分页程序</h3> <form method="get" action="" style="margin:15 auto;text-align:center;"> 每页显示 <input type="text" name="PerPageSize" value="<?= $PerPageSize ?>" size="3" />条 <input type="submit" value=" 保存 " /> </form> <!-- 显示记录 --> <table border="1" width="90%"> <tr bgcolor="#e0e0e0"> <th>ID号</th><th>标题</th><th>内容</th><th>作者</th><th>邮箱</th> <th>IP号</th><th>添加时间</th><th>性别</th> </tr> <?php mysql_data_seek($result, ($Page-1)*$PerPageSize); //将指针指向第$Page页的第一条记录 for ($i=0; $i < $PerPageSize ; $i++) { $row=mysql_fetch_assoc 9c76 ($result); if ($row) { //如果记录不为空,用于处理末页的情况【比如末页的个数不为$PerPageSize个】 ?> <tr> <td><?= $row['ID'] ?></td><td><?= $row['title'] ?></td><td><?= $row['content'] ?></td> <td><?= $row['author'] ?></td><td><?= $row['Email'] ?></td><td><?= $row['IP'] ?></td> <td><?= $row['addtime'] ?></td><td><?= $row['sex'] ?></td> </tr> <?php } } mysql_free_result($result); //释放结果集 ?> </table> <?php $url=$_SERVER["PHP_SELF"]; //获得当前页的URL page($RecordTotalNum,$PerPageSize,$Page,$url,$keyword); //调用分页函数 ?>
【注】该程序预先在MySql服务器中的guestbook数据库中包含一张名为lyb的表。
相关文章推荐
- php URL图片资源传参生成对应尺寸图片
- 关闭游览器后, php程序还会执行吗?
- webservice 之一 php SOAP
- php SPL学习笔记
- php 自动加载类方法小结
- 非Windows操作系统导入ThinkPHP.php出错
- 腾讯云服务器配置ftp~【首发】
- php protobuf
- thinkphp集成系列之短信验证码、订单通知
- PHP CURD实现的中$_GET和$_POST用法的小问题
- 快速创建yii2 RESTful api的小记
- PHP操作数据库类
- thinkphp中去掉index.php
- php学习笔记(二)php与mysql连接与用php发送SQL查询
- PHP常用的设计模式
- php面向对象和面向过程
- thinkPHP3.2.3实现自定义类的自动加载
- Zend Studio 调试Zend Debugger和XDebug
- 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world
- tpc三次握手和四次断开