php中带关键字搜索功能的分页函数的设计及实例

4 篇文章 0 订阅

在网站中经常用到分页功能,因此将分页功能封装成一个函数,在调用时可以减少编程工作量。

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($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的表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值