问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用php实现分页效果

发布网友 发布时间:2022-04-07 13:05

我来回答

2个回答

懂视网 时间:2022-04-07 17:26

推荐:《PHP视频教程》

php分页功能的3种实现方法

在php项目中,分页是非常常见的,那么php分页功能该如何实现呢?本文将为大家带来的就是php分页功能的3种实现方法,对分页不太熟的同学们有福利了哦!

方法一:将sql查询进行分页进行,需要调用几个函数,具体见下方脚本:

1.pager.class.php

<?php
 
 class pager {
 public $sql; //SQL查询语句
 public $datanum; //查询所有的数据总记录数
 public $page_size; //每页显示记录的条数
 protected $_errstr;
 protected $_conn;
 protected $_query_id;
 
 public function query($query)///这个函数有问题,暂时可以不用
 {
 $ret = false;
 if (!empty($query)) {
 if ($this->_conn === false || !is_resource($this->_conn)) {
 warningLog(__METHOD__ . ': query sql with no connection', true);
 return false;
 }
 $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] returned for sql query [$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;
 }
 
 //当前页数
 public function page_id() {
 if($_SERVER['QUERY_STRING'] == ""){
 return 1;
 }elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
 return 1;
 }else{
 return intval(substr($_SERVER['QUERY_STRING'],8));
 }
 }
 
 //剩余url值
 public function url() {
 if($_SERVER['QUERY_STRING'] == ""){
 return "";
 }elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
 return "&".$_SERVER['QUERY_STRING'];
 }else{
 return str_replace("page_id=".$this->page_id(),"",$_SERVER['QUERY_STRING']);
 }
 }
 
 //总页数
 public function page_num() {
 if($this->datanum == 0){
 return 1;
 }else{
 return ceil($this->datanum/$this->page_size);
 }
 }
//数据库查询的偏移量
 public function start() {
 return ($this->page_id()-1)*$this->page_size;
 }
 
 //数据输出
 public function sqlquery() {
 return $this->sql." limit ".$this->start().",".$this->page_size;
 }
 
 //获取当前文件名
 private function php_self() {
 return $_SERVER['PHP_SELF'];
 }
 
 //上一页
 private function pre_page() {
 if ($this->page_id() == 1) { //页数等于1
 return "<a href=".$this->php_self()."?page_id=1".$this->url().">上一页</a> ";
 }elseif ($this->page_id() != 1) { //页数不等于1
 return "<a href=".$this->php_self()."?page_id=".($this->page_id()-1).$this->url().">上一页</a> ";
 }
 }
 
 //显示分页
 private function display_page() {
 $display_page = "";
 if($this->page_num() <= 10){ //小于10页
 for ($i=1;$i<=$this->page_num();$i++) //循环显示出页面
  $display_page .= "<a href=".$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 .= "<a href=".$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 .= "<a href=".$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 .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
  return $display_page;
 }
 }
 }
 
 //下一页
 private function next_page() {
 if ($this->page_id() < $this->page_num()) { //页数小于总页数
 return "<a href=".$this->php_self()."?page_id=".($this->page_id()+1).$this->url().">下一页</a> ";
 }elseif ($this->page_id() == $this->page_num()) { //页数等于总页数
 return "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">下一页</a> ";
 }
 }
 
 // 设置分页信息
 public function set_page_info() {
 $page_info = "共".$this->datanum."条 ";
 $page_info .= "<a href=".$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 .= "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">尾页</a> ";
 $page_info .= "第".$this->page_id()."/".$this->page_num()."页";
 return $page_info;
 }
 
 }
?>

2.脚本2:

<?php
 //类的用法
 // 读取分页类
 include("pager.class.php");
 // 数据库连接初始化
// $db = new mysql();
 $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) or
 die("Can't connect ".mysql_error());
 mysql_select_db($impeach_name, $impeach_con);
 // 这是一个sql查询语句,并得到查询结果
 $sql = "select word from ufeature.spam_accuse_word_list where flag='0'";
 // 分页初始化
 $page = new pager($sql,20);
 // 20是每页显示的数量
 // $res_1 = mysql_query($sql) or
 // die("Can't get result ".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 * FROM table …… limit 开始位置 , 操作条数 (其中开始位置是从0开始的)

例子

取前20条记录:

SELECT * FROM table …… limit 0 , 20

从第11条开始取20条记录:

SELECT * FROM table …… limit 10 , 20

LIMIT n 和 LIMIT 0,n的意思是一样的。

 如select * from table LIMIT 5; //返回前5行,和 select * from table LIMIT 0,5一样

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 每页条数 , 每页条数

Select * from table limit ($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、代码实例

这个一个留言的分页,分为3个部分,一个是数据库设计,一个是连接页面,一个是显示页面。

(1)设计数据库

设计数据库名为bbs,有一个数据表为message,里面包含title,lastdate,user,content等字段,分别表示留言标题,留言日前,留言人,留言的内容

(2)连接页面

<?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
//将空格,换行转换为HTML可解析
function htmtocode($content) {
 $content = str_replace("\n", "<br>", str_replace(" ", " ", $content)); //两个str_replace嵌套
 return $content;
}
//$content=str_replace("'","‘",$content);
 //htmlspecialchars();
 
?>

(3)显示页面

<?php
 include("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 条".
 " <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
$SQL="SELECT * FROM `message` limit $page $pagesize ";
 $query=mysql_query($SQL);
 
 while($row=mysql_fetch_array($query)){
?>
<table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
 <tr bgcolor="#eff3ff">
 <td>标题:<?php echo $row[title]?></td> <td>时间:<?php echo $row[lastdate]?></td>
 </tr>
 <tr bgcolor="#eff3ff">
 <td> 用户:<?php echo $row[user]?></td><td></td>
 </tr>
 <tr>
 <td>内容:<?php echo htmtocode($row[content]);?></td>
 </tr>
 <br>
</table>
<?php
 }
?>

方法3:

<script> 
function viewpage(p){ 
if(window.XMLHttpRequest){ 
var xmlReq = new XMLHttpRequest(); 
} else if(window.ActiveXObject) { 
var xmlReq = new ActiveXObject('Microsoft.XMLHTTP'); 
} 
var formData = "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); 
return false; 
} 
</script>

脚本2:

header("Content-Type:text/html;charset=GB2312"); 
$pagesize=10; 
//echo $_POST['page']; 
$result = mysql_query("Select count(DISTINCT hotelname) 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." GROUP BY `hotelname` order by id desc limit $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("select count(title) from " . TBL_Comments ." where `title`=\"".$title[$a]."\""); 
//$row = mysql_fetch_row($result); 
echo "<TABLE style=\"MARGIN-BOTTOM: 20px\" cellSpacing=0 cellPadding=0 width=100% border=0>\n"; 
echo "<TBODY>\n"; 
echo "<TR>\n"; 
echo "<TD style=\"PADDING-TOP: 5px\" vAlign=top align=left width=80>\n"; 
//rating_bar($title[$a],5); 
echo "</TD>\n"; 
echo "<TD style=\"PADDING-TOP: 5px\" align=left width=100%><A title=$hotelname[$a] style=\"FONT-SIZE: 14px\" href=#>$hotelname[$a]</A>\n"; 
echo "</TD></TR>\n"; 
echo " <TR>\n"; 
echo "<TD></TD>\n"; 
echo "<TD style=\"PADDING-LEFT: 0px\">\n"; 
echo "<IMG src=\"images/comment.gif\" border=0> 推荐人数:($countpeople[$a]) |\n"; 
echo "<SPAN>平均分:<STRONG></STRONG> (".$count."票) | 评论数:()</SPAN>\n"; 
echo "</TD></TR></TBODY></TABLE>\n"; 
} 
echo "<TABLE style=\"MARGIN-TOP: 30px\" cellSpacing=0 cellPadding=0 width=\"100%\""; 
echo "border=0>"; 
echo "<TBODY><TR><TD colSpan=3 height=20>"; 
echo "<DIV align=center>"; 
echo "<P align=left><FONT color=red>第".$page."页/总".$pages."页 | 总".$numrows."条</FONT> | "; 
if ($page>1) echo "<a onclick=\"viewpage(".$first.")\" href='#'>首页</a> | "; 
if ($page>1) echo "<a onclick=\"viewpage(".$prev.")\" href='#'>上页</a> | "; 
if ($page<$pages) echo "<a onclick=\"viewpage(".$next.")\" href='#'>下页</a> | "; 
if ($page<$pages) echo "<a onclick=\"viewpage(".$last.")\" href='#'>尾页</a>"; 
echo "转到第 <INPUT maxLength=3 size=3 value=1 name=goto_page> 页 <INPUT hideFocus onclick=\"viewpage(document.all.goto_page.value)\" type=button value=Go name=cmd_goto>"; 
echo "</P></DIV></TD></TR></TBODY></TABLE>";

热心网友 时间:2022-04-07 14:34

将原代码(所有用到分页的代码我都加有注释)和设计页面和IE浏览后的页面都传给你,以方便你详查。如果这里不好看,就将此代码复制到Dreamweaver编辑器里,加上你自己的数据库。我不知道你用的是什么编辑器,我用的是Dreamweaver。 这里是原代码页面<?php
include("inc/conn.php"); //包含你的数据库文件
?><body>
<?php
$sql="select * from book"; //sql语句我就不用多讲了吧,其中book是我要连接的表,(可自己定义)后面将不作解释
$result=mysql_query($sql);
$number=mysql_num_rows($result); //获得总共多少条记录
$pagesize=10; //定义每个页面要显示多少条记录
$totalpage=ceil($number/$pagesize); //获得总的页数,ceil($number/$pagesize)总的记录/每页显示的记录
$pageno=$_GET['pageno'];
if($pageno==""){
$pageno=1; //设定,如果当前页为空时就显示为第1页
}
$startno=$pagesize*($pageno-1); //得到每页的起始页。$pagesize*($pageno-1)用每页多少条记录*(当前页-1),这是得到起始页的规则
$sql2="select * from book limit ".$startno.",".$pagesize; //用sql2语句中limit得出每一页的起始页和每一页要显示多少条记录
$result2=mysql_query($sql2);
?>
<table width="600" border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#0000FF">
<tr>
<th align="center" bgcolor="#FFFFFF">书名:</th>
<th align="center" bgcolor="#FFFFFF">作者:</th>
<th align="center" bgcolor="#FFFFFF">价格:</th>
</tr>
<?php
while($rows=mysql_fetch_array($result2)){ //这里是循环,不用讲的吧,如果不懂再来问我
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><?php echo $rows['Bookname']?></td>
<td align="center" bgcolor="#FFFFFF"><?php echo $rows['editor']?></td>
<td align="center" bgcolor="#FFFFFF"><?php echo $rows['price']?></td>
</tr>
<?php } ?>
<tr>
<td align="center" bgcolor="#FFFFFF">共<?php echo $number //显示总共多少条记录 ?>条记录</td> <td align="center" bgcolor="#FFFFFF"><?php
if($pageno==1){
echo "[<a href=?pageno=".($pageno+1).">下一页</a>][<a href=?pageno=".$totalpage.">末页</a>]";
} //如果是第一页时: 没有首页和上页,只有下页和末页(后两者有连接)
if($pageno<$totalpage && $pageno>1){
echo "[<a href=?pageno=1>首页</a>][<a href=?pageno=".($pageno-1).">上一页</a>][<a href=?pageno=".($pageno+1).">下一页</a>][<a href=?pageno=".$totalpage.">末页</a>]";
} //如果是第一页和末页之间的页数:首页,上页,下页,末页都有(四者都有连接)
if($pageno==$totalpage){
echo "[<a href=?pageno=1>首页</a>][<a href=?pageno=".($pageno-1).">上一页</a>]";
} //如果是末页时: 只有首页和上页,没有下页和末页(前两者有连接) (到此为止分布做完了,下面的是跳转,顺便也跟你说说吧,呵呵)
?></td>
<td align="center" bgcolor="#FFFFFF"><form id="form1" name="form1" method="get" action="">
<select name="pageno">
<option selected="selected">第<?php echo $pageno?>页</option>
<?php
for($i=1;$i<=$totalpage;$i++){ //通过for定义变量i<=总页数将总共有多少页循环出来
?>
<option value="<?php echo $i?>">第<?php echo $i //显示当前所看到的页数?>页</option>
<?php } ?>
</select>
<input type="submit" name="Submit" value="go" />
</form>
</td>
</tr>
</table>
</body> 这里是设计页面 这里是IE浏览后看到的页面
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 苹果ID密码忘记了,现在又想起来了然后账户还在恢复中怎么办- 问一问 手机word上的文档怎么以附形式共享 叮当储物退信用金快吗? 代购有营业执照是不是就可以随便买 叮当读书会里有哪些有趣的栏目和课程? 有和叮当快药类似的APP吗?哪位有经验 请问使用微信叮当钱包欠款逾期会有哪些处罚?我的已经逾期了,不知道会怎样? 我最近注册了叮当海外仓,已经下单了挺多东西的,是不是代购朋友们都了解这个小程序了? 叮当读书会是什么? 叮当柚子是哪个公司? 为啥QQ发不了红包 塞钱不成功 在手机qq上为什么发不了红包了 叮当读书会这个小程序到底好不好? QQ发不了红包 就一直写“非法参数”这是为什么? 打雷的时候电脑能玩吗 手机QQ为什么发不了红包 手机QQ红包发不了 为什么打雷时不可以打电脑 社保卡可以去银行预留手机号吗?17岁可以预留吗? 公司需要用自己的身份证办资质是什么回事? 教育实习目的 日语 老婆 怎么说 教育实习的目的任务 幼儿园实习的目的意义 教育实习的目的及意义 教育实习的目的意义 幼儿园实习的目的与意义 老婆的称呼。用日语怎么说??? 聊斋志异之孽欲狐仙的剧情简介 快手极速版更新后怎么没有红包了 一部有鬼,有妖,有点像聊斋累的悲剧爱情电影,帮忙讲一下,具体看补充 有谁知道一部老电影:关于狐仙的 聊斋里有狐仙那个是什么名字啊? 南宁哪有卖老鼠夹的? 南宁哪有老鼠夹买? 南宁哪里有老鼠药和老鼠夹卖? 鼠字的笔顺怎么写 柳州哪里有老鼠夹或老鼠笼子卖啊? “鼠”字的笔顺? 平板电脑能不能用电话卡上网?