问答文章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

【文件名】: c_mysql_page.inc // 【作 用】: MySQL分页函数类 // 【作 者】: 天灰 // // 【最后修改日期】: 2001/07/16[cxx] // 【变量定义规则】:‘C_’=字符型,‘I_’=整型,‘N_’=数字型,‘L_’=布尔型,‘A_’=数组型 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // ※c_mysql_page() 构造函数,设置分页初始参数 // ※page_standard() 分页显示函数(标准型) // ※GetRecordStartEnd() 获得取记录的开始结束位置 // ※getmaxpage() 获得记录集的最大页数 // ※checkpage() 检查当前页数是否在0和最大页数之间 //------------------------------------------------------------------------------------------ class c_mysql_page { //------------------------------------------------------------------------------------------ // 变量定义 //------------------------------------------------------------------------------------------ var $I_pagesize = 10; //每页记录数 var $C_width = '80%'; //表格宽度 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函数名:c_mysql_page ($I_pagesize, $c_width) // 作 用:构造函数,设置分页初始参数 // 参 数:$I_pagesize, $c_width // 返回值:变量 // 备 注:构造函数随着类的建立而自动执行 //------------------------------------------------------------------------------------------ function c_mysql_page ($I_pagesize=10, $C_width='80%') { if (isset($I_pagesize)){$this -> I_pagesize = $I_pagesize;} if (isset($C_width)){$this -> C_width = $C_width;} } //------------------------------------------------------------------------------------------ // 函数名:page_standard($I_sumrecord,$C_page,$C_url="self",$C_otherpara="") // 作 用:分页显示函数(标准型) // 参 数:$I_sumrecord 记录总数 // $C_url URL // $C_page URL后的参数 // $C_otherpara URL后的参数2 // $bgcolor 表格的背景颜色 // 返回值: // 备 注:无 //------------------------------------------------------------------------------------------ function page_standard($I_sumrecord,$C_page,$C_url="self",$C_otherpara="",$bgcolor="") { //检查参数 if ((!$I_sumrecord) || (!$C_page)){AlertExit("参数不全!");} global $PHP_SELF,$$C_page; //全局变量$C_page //检测$I_pagesize是否合法 if($this -> I_pagesize < 1){AlertExit("请设定每页的记录数!");} if($I_sumrecord < 1){return false;} //检测总记录数 if($C_url == "self"){$C_url = $PHP_SELF;} //设置URL $I_page = $$C_page; //重新赋当前页值 $I_maxpage = $this -> getmaxpage($I_sumrecord); //取出总页数 $I_page = $this -> checkPage($I_maxpage,$I_page); //检查当前页号 //显示表 echo ""; echo ""; echo "共" . $I_sumrecord. "条主题 当前第" . $I_page . "/". $I_maxpage. "页"; if ($I_maxpage > 1) { echo ""; if($I_page > 1 && $I_page < $I_maxpage) { echo "首页"; $pre=$I_page-1; echo "上页"; $next=$I_page+1; echo "下页"; echo "末页"; } elseif($I_page == 1) { $next = $I_page+1; echo "下页"; echo "末页"; } elseif($I_page == $I_maxpage) { echo "首页"; $pre=$I_page-1; echo "上页"; } //显示select echo "转到"; echo "";//OnChange=".WindowLocation($C_url,$C_otherpara,$C_page)." for($i=1;$i I_pagesize; $I_pagesize = $this -> I_pagesize; } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函数名:getmaxpage($intRecordNum) // 作 用:获得记录集的最大页数 // 参 数:$I_sumrecord 记录总数 // 返回值:最大页数$I_maxpage(整型) // 备 注:无 //------------------------------------------------------------------------------------------ function getmaxpage($I_sumrecord) { if (!$I_sumrecord){AlertExit("参数不全!>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 9岁孩子得胃炎怎么治疗 微信公众平台的上的名称如何添加符号? 微信公众平台的上的名称如何添加符号? 重命名文件的时候,不能输入中文求大神帮助 微信公众平台的上的名称如何添加符号? 在家里怎么样制作解压物品? 为什么图片重命名不能切换中文输入法,老是小写的字母,但是在Word中却可以…… 82年3月19日4点多属狗杜姓起名用哪些字 82年属狗女取名立娟好吗? 岩石天然抗压强度大还是烘干状态下抗压大 文件重命名时我明明把输入法调出来了却打不了中文,请问是怎么回事? 花岗岩饱和抗压强度标准度一般是多少 基岩天然单轴抗压强度是什么意思 什么是饱和单轴抗压强度标准值? 什么叫单轴抗压强度 饱和单轴抗压极限强度是什么? 本人82年属狗女性,想起个吉利点的公司名字 岩石饱和抗压强度与干抗压强度那个大? 张卫健当年拍《西游记》为何拍一半换成了陈浩民? 中途更换了主演,你却没有发现的影视剧都有哪几部? 中国邮政储蓄银行卡密码输入三次错误被锁,24小时后能够自动解锁吗 中国邮政储蓄银行个人网上银行 账户锁定了 怎样解锁 烧茄子应该放糖吗? 中国邮政储蓄银行卡密码输入三次错误被锁,24小时后能够自动解锁吗? 做风味茄子要不要加糖呢,比列是多少? 邮政储蓄银行卡被锁了,本人不能去银行怎么办? 糖烧茄子的做法步骤图,糖烧茄子怎么做好吃 邮政银行卡在atm被锁,能不能自动解锁 风味茄子怎么做呢,需要加糖吗 你好,我的邮政储蓄银行卡密码锁了,我应该怎么去解锁 邮政储蓄银行卡密码被锁请问是不是只要在邮政银行办理解锁 红烧茄子的糖,盐,酸什么比例 做出来好吃? 公司向我要身份证怎么办 公司向我要身份证怎么办 公司需要用自己的身份证办资质是什么回事? 公司需要用自己的身份证办资质是什么回事? 社保卡可以去银行预留手机号吗?17岁可以预留吗? 为什么打雷时不可以打电脑 手机QQ红包发不了 手机QQ为什么发不了红包