php怎么实现分页效果
这篇文章主要介绍“php怎么实现分页效果”,在日常操作中,相信很多人在php怎么实现分页效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php怎么实现分页效果”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
方法一:通过sql查询进行分页。
在使用这个方法的时候我们需要使用到这些内容,先看我们的代码:
1、pager.class.php文件代码
<?phpclasspager{public$sql;//SQL查询语句public$datanum;//查询所有的数据总记录数public$page_size;//每页显示记录的条数protected$_errstr;protected$_conn;protected$_query_id;publicfunctionquery($query)///这个函数有问题,暂时可以不用{$ret=false;if(!empty($query)){if($this->_conn===false||!is_resource($this->_conn)){warningLog(__METHOD__.':querysqlwithnoconnection',true);returnfalse;}$this->_query_id=@mysql_query($query,$this->_conn);if($this->_query_id===false){$this->_errstr=@mysql_error();$ret=false;}else{$this->_errstr='SUCCESS';$ret=$this->_query_id;}}$msg=($ret===false)?'false':strval($ret);debugLog(__METHOD__.":[$msg]returnedforsqlquery[$query]");return$ret;}function__construct($sql,$page_size){$result=mysql_query($sql);$datanum=mysql_num_rows($result);$this->sql=$sql;$this->datanum=$datanum;$this->page_size=$page_size;}//当前页数publicfunctionpage_id(){if($_SERVER['QUERY_STRING']==""){return1;}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=")==0){return1;}else{returnintval(substr($_SERVER['QUERY_STRING'],8));}}//剩余url值publicfunctionurl(){if($_SERVER['QUERY_STRING']==""){return"";}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=")==0){return"&".$_SERVER['QUERY_STRING'];}else{returnstr_replace("page_id=".$this->page_id(),"",$_SERVER['QUERY_STRING']);}}//总页数publicfunctionpage_num(){if($this->datanum==0){return1;}else{returnceil($this->datanum/$this->page_size);}}//数据库查询的偏移量publicfunctionstart(){return($this->page_id()-1)*$this->page_size;}//数据输出publicfunctionsqlquery(){return$this->sql."limit".$this->start().",".$this->page_size;}//获取当前文件名privatefunctionphp_self(){return$_SERVER['PHP_SELF'];}//上一页privatefunctionpre_page(){if($this->page_id()==1){//页数等于1return"<ahref=".$this->php_self()."?page_id=1".$this->url().">上一页</a>";}elseif($this->page_id()!=1){//页数不等于1return"<ahref=".$this->php_self()."?page_id=".($this->page_id()-1).$this->url().">上一页</a>";}}//显示分页privatefunctiondisplay_page(){$display_page="";if($this->page_num()<=10){//小于10页for($i=1;$i<=$this->page_num();$i++)//循环显示出页面$display_page.="<ahref=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a>";return$display_page;}elseif($this->page_num()>10){//大于10页if($this->page_id()<=6){for($i=1;$i<=10;$i++)//循环显示出页面$display_page.="<ahref=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a>";return$display_page;}elseif(($this->page_id()>6)&&($this->page_num()-$this->page_id()>=4)){for($i=$this->page_id()-5;$i<=$this->page_id()+4;$i++)//循环显示出页面$display_page.="<ahref=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a>";return$display_page;}elseif(($this->page_id()>6)&&($this->page_num()-$this->page_id()<4)){for($i=$this->page_num()-9;$i<=$this->page_num();$i++)//循环显示出页面$display_page.="<ahref=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a>";return$display_page;}}}//下一页privatefunctionnext_page(){if($this->page_id()<$this->page_num()){//页数小于总页数return"<ahref=".$this->php_self()."?page_id=".($this->page_id()+1).$this->url().">下一页</a>";}elseif($this->page_id()==$this->page_num()){//页数等于总页数return"<ahref=".$this->php_self()."?page_id=".$this->page_num().$this->url().">下一页</a>";}}//设置分页信息publicfunctionset_page_info(){$page_info="共".$this->datanum."条";$page_info.="<ahref=".$this->php_self()."?page_id=1".$this->url().">首页</a>";$page_info.=$this->pre_page();$page_info.=$this->display_page();$page_info.=$this->next_page();$page_info.="<ahref=".$this->php_self()."?page_id=".$this->page_num().$this->url().">尾页</a>";$page_info.="第".$this->page_id()."/".$this->page_num()."页";return$page_info;}}?>
2、脚步部分代码
<?php//类的用法//读取分页类include("pager.class.php");//数据库连接初始化//$db=newmysql();$impeach_host='10.81.43.139';$impeach_usr='vmtest15';$impeach_passwd='vmtest15';$impeach_name='ufeature';$impeach_con=mysql_connect($impeach_host,$impeach_usr,$impeach_passwd)ordie("Can'tconnect".mysql_error());mysql_select_db($impeach_name,$impeach_con);//这是一个sql查询语句,并得到查询结果$sql="selectwordfromufeature.spam_accuse_word_listwhereflag='0'";//分页初始化$page=newpager($sql,20);//20是每页显示的数量//$res_1=mysql_query($sql)or//die("Can'tgetresult".mysql_error());$result=mysql_query($page->sqlquery());while($info=mysql_fetch_array($result,MYSQL_ASSOC)){//while($info=mysql_fetch_array($res_1,MYSQL_ASSOC)){echo$info["word"]."<br/>";}//页码索引条echo$page->set_page_info();?>
通过上面这些代码我们就可以大概的完成这个方法的分页效果。
方法二:使用Ajax
1、了解SQL语法中的limit用法,代码如下所示:
SELECT*FROMtable……limit开始位置,操作条数(其中开始位置是从0开始的)
我们来看看下面这个例子:
首先提取前20条记录,代码如下所示:
SELECT*FROMtable……limit0,20
从11条开始取出20条记录,代码如下所示:
SELECT*FROMtable……limit10,20
在SQL语句中的LIMIT n 和LIMIT 0,n 的意思是一样的我们来看看下面这个代码:
如select*fromtableLIMIT5;//返回前5行,和select*fromtableLIMIT0,5一样
通过上面这些代码我们对SQL中的 limit 就有所了解了。
2、分页原理
我们之所以进行分页显示,就是为了将收集的数据进行一部分一部分的显示出来,不会看起来那么杂乱。那么对于怎么进行分段我们可以参考下面这个代码:
前10条记录:select * from table limit 0,10
;第11至20条记录:select * from table limit 10,20
;第21至30条记录:select * from table limit 20,30
。
那么我们的分页公式的话就是这么写:
(当前页数 - 1 )X 每页条数 , 每页条数,代码如下所示:
elect*fromtablelimit($Page-1)*$PageSize,$PageSize
3、$_SERVER["REQUEST_URI"] 函数
我们通过预定义我们服务器变量的一种方法来进行,而且所有的 $_SERVER
开头的都叫做预定于服务器变量。在 REQUEST_URI
中起到的作用是取得当前 URI
,也就除域名外后面的完整的地址路径。我们来看下下面这个案例:
假设当前页为:http://www.test.com/home.php?id=23&cid=22
我们输入下面这串代码:
echo$_SERVER["REQUEST_URI"]
结果就会变成:/home.php?id=23&cid=22
。
4、parse_url()解析URL函数
对于 parse_url() 这属性来说是用来将 URL 解析成有固定键值的数组函数,我们来看下面这个例子:
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");print_r($ua);
结果如下所示:
Array([scheme]=>http;协议[host]=>hostname;主机域名[user]=>username;用户[pass]=>password;密码[path]=>/path;路径[query]=>arg=value;取参数[fragment]=>anchor;)
5、代码实例
我们来看这个实例,我们将一个留言分页,在这个实现中我们的代码需要分为 数据库设计、连接页面和页面显示这三部分。
(1)、数据库设计
我们将需要的数据库设计库名为 bbs
,在设计一个数据表让它的表名为 message
,而且这张表里面包含 title
,lastdate
,user
,content
等字段,分别表示留言标题,留言日前,留言人,留言的内容。
(2)、连接页面
我们来看下我们连接页面的代码,如下所示:
<?php$conn=@mysql_connect("localhost","root","123456")ordie("数据库链接错误");mysql_select_db("bbs",$conn);mysql_query("setnames'GBK'");//使用GBK中文编码;//将空格,换行转换为HTML可解析functionhtmtocode($content){$content=str_replace("\\n","<br>",str_replace("","",$content));//两个str_replace嵌套return$content;}//$content=str_replace("'","‘",$content);//htmlspecialchars();?>
(3)、显示页面
显示页面代码如下所示:
<?phpinclude("conn.php");$pagesize=2;//设置每页显示2个记录$url=$_SERVER["REQUEST_URI"];$url=parse_url($url);$url=$url[path];$numq=mysql_query("SELECT*FROM`message`");$num=mysql_num_rows($numq);if($_GET){$pageval=$_GET;$page=($pageval-1)*$pagesize;$page.=',';}if($num>$pagesize){if($pageval<=1)$pageval=1;echo"共$num条"."<ahref=$url?page=".($pageval-1).">上一页</a><ahref=$url?page=".($pageval+1).">下一页</a>";}$SQL="SELECT*FROM`message`limit$page$pagesize";$query=mysql_query($SQL);while($row=mysql_fetch_array($query)){?><tablewidth=500border="0"cellpadding="5"cellspacing="1"bgcolor="#add3ef"><trbgcolor="#eff3ff"><td>标题:<?phpecho$row[title]?></td><td>时间:<?phpecho$row[lastdate]?></td></tr><trbgcolor="#eff3ff"><td>用户:<?phpecho$row[user]?></td><td></td></tr><tr><td>内容:<?phpechohtmtocode($row[content]);?></td></tr><br></table><?php}?>
上面这个就是我们使用 Ajax 方法实现分页的内容。
方法三:
我们直接来看函数页面的代码部分:
<script>functionviewpage(p){if(window.XMLHttpRequest){varxmlReq=newXMLHttpRequest();}elseif(window.ActiveXObject){varxmlReq=newActiveXObject('Microsoft.XMLHTTP');}varformData="page="+p;xmlReq.onreadystatechange=function(){if(xmlReq.readyState==4){document.getElementByIdx_x('content2').innerHTML=xmlReq.responseText;}}xmlReq.open("post","hotel_list.php",true);xmlReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xmlReq.send(formData);returnfalse;}</script>
脚步代码:
header("Content-Type:text/html;charset=GB2312");$pagesize=10;//echo$_POST['page'];$result=mysql_query("Selectcount(DISTINCThotelname)FROM".TBL_HOTELS);$myrow=mysql_fetch_array($result);$numrows=$myrow[0];$pages=intval($numrows/$pagesize);if($numrows%$pagesize)$pages++;if(isset($_POST['page'])){$page=intval($_POST['page']);}else{//设置为第一页$page=1;}$first=1;$prev=$page-1;$next=$page+1;$last=$pages;//计算记录偏移量$offset=$pagesize*($page-1);//读取指定记录数$result=mysql_query("select`hotelname`,count(*)from".TBL_HOTELS."GROUPBY`hotelname`orderbyiddesclimit$offset,$pagesize");$num=mysql_num_rows($result);while($row=mysql_fetch_array($result,MYSQL_NUM)){$hotelname[]=$row[0];$countpeople[]=$row[1];}for($a=0;$a<$num;$a++){//$result=mysql_query("selectcount(title)from".TBL_Comments."where`title`=\\"".$title[$a]."\\"");//$row=mysql_fetch_row($result);echo"<TABLEstyle=\\"MARGIN-BOTTOM:20px\\"cellSpacing=0cellPadding=0width=100%border=0>\\n";echo"<TBODY>\\n";echo"<TR>\\n";echo"<TDstyle=\\"PADDING-TOP:5px\\"vAlign=topalign=leftwidth=80>\\n";//rating_bar($title[$a],5);echo"</TD>\\n";echo"<TDstyle=\\"PADDING-TOP:5px\\"align=leftwidth=100%><Atitle=$hotelname[$a]style=\\"FONT-SIZE:14px\\"href=#>$hotelname[$a]</A>\\n";echo"</TD></TR>\\n";echo"<TR>\\n";echo"<TD></TD>\\n";echo"<TDstyle=\\"PADDING-LEFT:0px\\">\\n";echo"<IMGsrc=\\"images/comment.gif\\"border=0>推荐人数:($countpeople[$a])|\\n";echo"<SPAN>平均分:<STRONG></STRONG>(".$count."票)|评论数:()</SPAN>\\n";echo"</TD></TR></TBODY></TABLE>\\n";}echo"<TABLEstyle=\\"MARGIN-TOP:30px\\"cellSpacing=0cellPadding=0width=\\"100%\\"";echo"border=0>";echo"<TBODY><TR><TDcolSpan=3height=20>";echo"<DIValign=center>";echo"<Palign=left><FONTcolor=red>第".$page."页/总".$pages."页|总".$numrows."条</FONT>|";if($page>1)echo"<aonclick=\\"viewpage(".$first.")\\"href='#'>首页</a>|";if($page>1)echo"<aonclick=\\"viewpage(".$prev.")\\"href='#'>上页</a>|";if($page<$pages)echo"<aonclick=\\"viewpage(".$next.")\\"href='#'>下页</a>|";if($page<$pages)echo"<aonclick=\\"viewpage(".$last.")\\"href='#'>尾页</a>";echo"转到第<INPUTmaxLength=3size=3value=1name=goto_page>页<INPUThideFocusonclick=\\"viewpage(document.all.goto_page.value)\\"type=buttonvalue=Goname=cmd_goto>";echo"</P></DIV></TD></TR></TBODY></TABLE>";
就这样我们就完成了一个分页的实现效果。
到此,关于“php怎么实现分页效果”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。