默默小谈PHP&MYSQL分页原理及实现

默默小谈PHP&MYSQL分页原理及实现

在看本文之前,请确保你已掌握了PHP的一些知识以及MYSQL的查询操作基础哦。

作为一个Web程序,经常要和不计其数的数据打交道,比如会员的数据,文章数据,假如只有几十个会员那很好办,在一页显示就可以了,可是假如你的网站是几千甚至几十万会员的话,如果都在一页打开的话无论对浏览器还是观看者都是一种折磨。

相信每个学习PHP的新手都会对分页这个东西感觉很头疼,不过有了默默的这一水帖,你肯定会拍拍脑袋说,嘿,原来分页竟然如此简单?的确,现在请深呼吸一口新鲜的空气,仔细的听默默给你一点一点的分解。

假设我们要处理1000条数据,要在每页中显示10条,这样的话就会分100页来显示,咱们先看一看在mysql里提取10条信息是如何操作的。

Select * from table limit 0,10

上面是一句很简单的mysql查询语句,它的作用是从一个名叫table的表里提取10条数据,并且把所有字段的值都获得。

关键的地方就在这段“limit 0,10”,它其中的0是以0为起始点,后面的10则是显示10条数据,那么我们要以10为起始点,显示到第20条数据该怎么写呢?

可能很多大大会心直口快的说“limit 10,20”嘛!啊哦,这样可就错误了哦,正确的写法是“limit 10,10”它后面的参数并非是结束点而是要提取的数目,记住哦。

懂得了如何提取10条数据,那么提取1000条也就是做100次这种查询呀,就是说要做如下的查询:

Limit 0,10                 //第一页
Limit 10,10                //第二页
Limit 20,10                //第三页
Limit 30,10                //第四页
……
看出有什么规律了吗?没错,第一个参数每翻一页就增加10,可是第二个参数是不变的。
也就是说咱们设法根据页数来改变第一个参数的值,就可以进行分页显示数据了,怎么样,原理是不是很简单?

可是要怎么设法根据页数来改变第一个参数的值呢?首先,咱们要有一个页数的值,用url的GET方式获取。
比如index.php?page=18
相信大部分的大大对这个东西不陌生吧,这种url地址可是随处可见,其中的page参数的作用就是传入要显示的页数。

咱们通过一段代码来看一看究竟是如何实现的吧:
复制PHP内容到剪贴板
PHP代码:

<?php

/*

Author:默默
Date  :2006-12-03

*/

$page=isset($_GET['page'])?intval($_GET['page']):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
$num=10;                                      //每页显示10条数据

$db=mysql_connect("host","name","pass");           //创建数据库连接
$select=mysql_select_db("db",$db);                 //选择要操作的数据库

/*
首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,具体的公式就是
总数据数除以每页显示的条数,有余进一。
也就是说10/3=3.3333=4 有余数就要进一。
*/

$total=mysql_num_rows(mysql_query("select id from table")); //查询数据的总数,id是数据库中的一个自动赋值的字段
$pagenum=ceil($total/$num);                                    //获得总页数

//假如传入的页数参数大于总页数,则显示错误信息
If($page>$pagenum || $page == 0){
       Echo "Error : Can Not Found The page .";
       Exit;
}

$offset=($page-1)*$num;                                        //获取limit的第一个参数的值,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。

$info=mysql_query("select name from table limit $offset,$num");   //获取相应页数所需要显示的数据,name是数据里的一个字段
While($it=mysql_fetch_array($info)){
       Echo $it['name']."<br />";
}                                                              //显示数据
   
For($i=1;$i<=$pagenum;$i++){
       
       $show=($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>";
       Echo $show." ";
}

/*显示分页信息,假如是当页则显示粗体的数字,其余的页数则为超连接,假如当前为第三页则显示如下
1 2 3 4 5 6
*/
?>

假如你仔细的读过上面的代码,把数据库连接和查询的表替换成你的,那么就能看见它的执行效果哦。

是不是很简单,只要动动脑筋,可以让它显示的更为个性化哦,给大家出一个小题,如何实现“首页 上一页 下一页 尾页”这种格式的分页呢?

OK,水帖灌完,收工。^_^

作者: 默默   发布时间: 2006-12-03

好帖子啊,我来顶默默的提问,代码,如下:
复制PHP内容到剪贴板
PHP代码:

<?php
/*
Author:默默
Date  :2006-12-03
*/

$page=isset($_GET['page'])?intval($_GET['page']):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
$num=10;                                      //每页显示10条数据

$db=mysql_connect("localhost","root","7529639");           //创建数据库连接
mysql_select_db("cr_download");                 //选择要操作的数据库

/*
首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,具体的公式就是
总数据库除以每页显示的条数,有余进一。
也就是说10/3=3.3333=4 有余数就要进一。
*/

$result=mysql_query("select * from cr_userinfo");
$total=mysql_num_rows($result); //查询所有的数据

$url='test.php';//获取本页URL

//页码计算
$pagenum=ceil($total/$num);                                    //获得总页数,也是最后一页
$page=min($pagenum,$page);//获得首页
$prepg=$page-1;//上一页
$nextpg=($page==$pagenum ? 0 : $page+1);//下一页
$offset=($page-1)*$num;                                        //获取limit的第一个参数的值,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。

//开始分页导航条代码:
$pagenav="显示第 <B>".($total?($offset+1):0)."</B>-<B>".min($offset+10,$total)."</B> 条记录,共 $total 条记录 ";


//如果只有一页则跳出函数:
if($pagenum<=1) return false;

$pagenav.=" <a href='$url?page=1'>首页</a> ";
if($prepg) $pagenav.=" <a href='$url?page=$prepg'>前页</a> "; else $pagenav.=" 前页 ";
if($nextpg) $pagenav.=" <a href='$url?page=$nextpg'>后页</a> "; else $pagenav.=" 后页 ";
$pagenav.=" <a href='$url?page=$pagenum'>尾页</a> ";

//下拉跳转列表,循环列出所有页码:
$pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url?page=\"+this.value'>\n";
for($i=1;$i<=$pagenum;$i++){
if($i==$page) $pagenav.="<option value='$i' selected>$i</option>\n";
else $pagenav.="<option value='$i'>$i</option>\n";
}
$pagenav.="</select> 页,共 $pagenum 页";

//假如传入的页数参数大于总页数,则显示错误信息
If($page>$pagenum){
       Echo "Error : Can Not Found The page ".$page;
       Exit;
}

$info=mysql_query("select * from cr_userinfo limit $offset,$num");   //获取相应页数所需要显示的数据
While($it=mysql_fetch_array($info)){
       Echo $it['username'];
       echo "<br>";
}                                                              //显示数据
  echo"<br>";
  echo $pagenav;//输出分页导航
 ?>

顺便再深入下,在实际应用中,几乎涉及列表的就要用到分页,大家可以试试做一个分页通用函数,这样只要需要分页的地方就调用这个函数,呵呵~~

作者: leehui1983   发布时间: 2006-12-03

默默就是默默
认真向默默学习!

作者: Nickboy   发布时间: 2006-12-03

楼上的觉得我怎样?:lol :lol :lol

作者: leehui1983   发布时间: 2006-12-03

不错,支持一下

作者: dzjzmj   发布时间: 2006-12-03

哈哈,辉老大!

作者: PHPChina   发布时间: 2006-12-03

楼上的笑什么啊?:L

作者: leehui1983   发布时间: 2006-12-03

支持一下,很好!

作者: 3x032   发布时间: 2006-12-03

谢谢!!!

作者: zwws   发布时间: 2006-12-03

两个都不错,谢谢

作者: 王洋姜   发布时间: 2006-12-03

or die("打字出错了")

用url的ger方式获取。


:lol默默你可以为我们新手写一本书啦!销路一定没有问题的:lol

[ 本帖最后由 86800787 于 2006-12-4 01:24 编辑 ]

作者: 86800787   发布时间: 2006-12-04

谢谢楼上大大的指正,已经修改好啦,呵呵

作者: 默默   发布时间: 2006-12-04

那mssql分页呢

作者: 浪迹天涯   发布时间: 2006-12-04

复制内容到剪贴板
代码:
$page=isset($_GET['page'])?intval($_GET['page']):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
这句话看起来有点难理解哦,那个  “page=18”  是怎么定义来的还是怎么回事,谢谢

作者: shenstef   发布时间: 2006-12-04

这是检查page是否赋值,是就取得page值,如果是18则取得18,不是则取1,也就是判断是否多于一页

作者: leehui1983   发布时间: 2006-12-04

$page=isset($_GET['page'])?intval($_GET['page']):1;      
相当于

if(isset($_GET['page'])){
          $page=intval($_GET['page']);
  }else{
          $page=1;
  }

表达式  ? :  是三元运算符,假如问号之前的条件成立,则执行问号之后的表达式,否则执行冒号之后的表达式.

作者: 默默   发布时间: 2006-12-04

引用:
原帖由 默默 于 2006-12-4 10:08 发表
$page=isset($_GET)?intval($_GET):1;      
相当于

if(isset($_GET)){
          $page=intval($_GET);
  }else{
          $page=1;
  }

表达式  ? :  是三元运算符,假如问号之前的条件成立,则执 ...
默默  谢谢您,这样看就清晰了,呵呵

但是一般排列数据都是倒序(记录id最大的最前面),您这样能实现么,没环境不好去测试,谢谢

[ 本帖最后由 shenstef 于 2006-12-4 10:20 编辑 ]

作者: shenstef   发布时间: 2006-12-04

三元运算符,应该掌握的基本东东:L

作者: leehui1983   发布时间: 2006-12-04

引用:
原帖由 leehui1983 于 2006-12-4 10:18 发表
三元运算符,应该掌握的基本东东:L
哈哈  惭愧,我真的没用功学

作者: shenstef   发布时间: 2006-12-04

引用:
原帖由 shenstef 于 2006-12-4 10:17 发表

默默  谢谢您,这样看就清晰了,呵呵

但是一般排列数据都是倒序(记录id最大的最前面),您这样能实现么,没环境不好去测试,谢谢
因为咱们主要是实现分页,假如是倒序的话只要在查询语句里的limit前面加入
order by date desc
就可以啦.^_^.

作者: 默默   发布时间: 2006-12-04

:lol 学习了,非常感谢楼上各位的指点,谢谢

作者: shenstef   发布时间: 2006-12-04

作者: cator   发布时间: 2006-12-04

收藏了,回去在研究,别删了啊

作者: shuck   发布时间: 2006-12-04

呵呵

作者: 默默   发布时间: 2006-12-05

不错 比较基础 入门级

作者: 水镜   发布时间: 2006-12-05

经典的分析!绝对支持

作者: yustar   发布时间: 2006-12-05

高手分析就是不一样,谢谢了.学习!

作者: loveyou_85   发布时间: 2006-12-05

没有把数据库命令集成进去,只通过URI来生成SQL语句,去操控数据库
不知道这种想法是否合理,请指点
复制PHP内容到剪贴板
PHP代码:
/**********************************************
1、调用方式page(总主题数,调用的URL,当前页)
2、返回分页条(pagebar)
3、注意分页所用的CSS
4、生成日期:2006-11-20 七月十五
其中 _大写字母 是自定义常量。
**********************************************/
function page($alltopic,$url,$p)
{
if($alltopic<=0) return;       //无主题直返回
$allpage=ceil($alltopic/_TOPICINPAGE); //求得总页数
if($p<=0 || $p>$allpage) $p=1;   //当前页不在范围,初始化当前页
 //构建分页栏信息部分
 $pagehead="<span class='pagehead'> ".$alltopic." : ".$p."/".$allpage." </span>";
 //构建首页尾页
 $pagestart="<span class='pageside'> <a href='".$url."&p=1'>|&lt</a> </span>";
 $pageend="<span class='pageside'> <a href='".$url."&p=".$allpage."'>&gt|</a> </span>";
 if($p==1)$pagestart="";
 if($p==$allpage)$pageend="";
 //构建分页页码栏
 if($allpage>_PAGELINELEN)
 {
  if($p>=1 && $p<=_PREPAGE)
  {
   $ps=1;
   $pe=_PAGELINELEN;
  }
  elseif($p>_PREPAGE && $p<=$allpage-_PAGELINELEN+_PREPAGE)
  {
   $ps=$p-_PREPAGE;
   $pe=$p+_PAGELINELEN-_PREPAGE-1;
  }
  else // $allpage>=$p>$allpage-_PAGELINELEN+_PREPAGE
  {
   $ps=$allpage-_PAGELINELEN+1;
   $pe=$allpage;
  }
  $pagego="<span class='pagego'><a style='padding: 0px'><input type='text' size=1 id='p' name='p' class='gop' onKeyDown=\"if(event.keyCode==13) {window.location='".$url."&p='+this.value; return false;}\"></a></span>";
 }
 else
 {
  $ps=1;
  $pe=$allpage;
 }
 for($i=$ps;$i<=$pe;$i++)
 {
  if($p==$i)
  {
   $pagebody=$pagebody."<span class='pageline'> <span class='pagenow'>".$i."</span> </span>";
  }
  else
  {
   $pagebody=$pagebody."<span class='pageline'> <a href='".$url."&p=".$i."'>".$i."</a> </span>";
  }
 }
 return "<div id='pagebar'>".$pagehead.$pagestart.$pagebody.$pageend.$pagego."</div>";
}

作者: 七月十五   发布时间: 2006-12-05

不错

作者: leehui1983   发布时间: 2006-12-06

引用:
原帖由 86800787 于 2006-12-4 01:20 发表
or die("打字出错了")

用url的ger方式获取。


:lol默默你可以为我们新手写一本书啦!销路一定没有问题的:lol
用 URL的GER方式获取!!:o :o :o

作者: CFC4N   发布时间: 2006-12-07

HOHO

作者: 默默   发布时间: 2006-12-07

默默,真好:)

作者: carra   发布时间: 2006-12-07

想象当年就是看dreamweaver的分页学会的。

作者: RunWithU   发布时间: 2006-12-07

我也顶下 ,,写的不错

作者: baker95935   发布时间: 2006-12-19

好帖,,讲解详细。可以用作教程了。

作者: runner   发布时间: 2006-12-19

好贴就是要顶

最近下了几个教程,打印了,边看边学边改.

作者: regedit18   发布时间: 2006-12-19

复杂问题简单话是要一定的水平的,好!支持默默

作者: caicaiphper   发布时间: 2006-12-29

不错,支持默默..

作者: visam   发布时间: 2006-12-29

;P  支持基础

作者: 小小熊   发布时间: 2006-12-29

这贴里水份也很多,不差我一个,留个名

作者: unspace   发布时间: 2006-12-29

:L 我基础太差了,没看懂.

我还是从头学起吧

作者: hxlady   发布时间: 2006-12-29

收了,好好学习

作者: studyphp   发布时间: 2006-12-29

支持下!!:)

作者: yepiaobo   发布时间: 2006-12-29

支持支持、、

作者: joknang   发布时间: 2006-12-29

向默默学习

作者: luanren   发布时间: 2006-12-30

按照默默说的,随便做的,感觉不好,大家改改

<?php
$page=isset($_GET['page'])?intval($_GET['page']):1;
$num=2;   
$db=mysql_connect("localhost","root","");
$select=mysql_select_db("db",$db);
$total=mysql_num_rows(mysql_query("select * from user_mst"));  
$pagenum=ceil($total/$num);                     //总页数                             
$offset=($page-1)*$num;                  
$pre = $page-1;                                       //前一页
$next = $page+1;                                    //后一页
$first = 1;                                                //后一页
$last = $pagenum;                                   //最后也
if($page>$pagenum || $page == 0){
       echo "Error : Can Not Found The page .";
       exit;
}
                                             
$info=mysql_query("select * from user_mst  limit $offset,$num");   
while($it=mysql_fetch_array($info)){
       echo $it['id']. "     " . $it["nick_name"] . "<br>";
}                                                         
   
if($pagenum==1){
    echo "<a href='page2.php?page=1'>首?</a>"." " . "<br>";
}
if($pagenum >1){
if($page>1 && $page<$pagenum){
  echo "<a href='page2.php?page=".$first."'>首页</a>" . "<a href='page2.php?page=".$next."'>下一页</a>" . "<a href='page2.php?page=".$pre."'>上一页</a>". "<a href='page2.php?page=".$last."'>最后页</a>";
}elseif($page==1){
  echo "首页" . "<a href='page2.php?page=".$next."'>下一页</a>" . "上一页". "<a href='page2.php?page=".$last."'>最后页</a>";
}elseif($page==$pagenum){
  echo "<a href='page2.php?page=".$first."'>首页</a>" . "下一页" . "<a href='page2.php?page=".$pre."'>上一页</a>". "最后页";
}
}
?>

作者: luanren   发布时间: 2006-12-30

大家继续啊,如果想要在分页时传递一个参数,该怎么写啊,
也就是有个搜索页面,想在分页时把搜索的关键字也带上 ,应该怎么写啊 ,
在线等待~~~~~~~~~~

作者: yinqikai1984   发布时间: 2006-12-30

补充一下,就是用默默的分页代码 应该怎么写啊  各位

作者: yinqikai1984   发布时间: 2006-12-30

默默真是为大家着想!
辛苦了

作者: hqlong   发布时间: 2006-12-30

那做个<input typt="hidden" .......>,这样可以传值呀

作者: luanren   发布时间: 2006-12-30

好象不是 用隐藏域来传的吧,
怎么感觉默默的分页代码 在做搜索时怎么输不出数据啊,
  在线等待默默 ~~~

作者: yinqikai1984   发布时间: 2006-12-30

应该是你的SQL语句写的不对,传值可以GET也可以POST

作者: 默默   发布时间: 2006-12-30

讲解的很详细。

作者: 特蓝克斯   发布时间: 2006-12-30

不多的分页代码~已加在自己的学习页面中,多谢了

作者: terryCM   发布时间: 2007-01-11

爱死momo了

作者: redhood   发布时间: 2007-01-12

function page($alltopic,$url,$p)
{
if($alltopic<=0) return;       //无主题直返回
$allpage=ceil($alltopic/_TOPICINPAGE); //求得总页数
if($p<=0 || $p>$allpage) $p=1;   //当前页不在范围,初始化当前页


请教
_TOPICINPAGE
这种形式是php里常量的定义么? 这个是在那里负值的?

作者: redhood   发布时间: 2007-01-15

听到默默就想起以前玩魔兽世界时,在六区阿拉希,练级时有个叫默默的LM女MS蹲我尸:')

作者: tony508   发布时间: 2007-01-15

..........

作者: 默默   发布时间: 2007-01-15

引用:
原帖由 tony508 于 2007-1-15 10:41 发表
听到默默就想起以前玩魔兽世界时,在六区阿拉希,练级时有个叫默默的LM女MS蹲我尸:')
...记忆力真好...联想的也好...;P

作者: suturn-ly   发布时间: 2007-01-15

MOMO:
请帮我看一下我这个分页怎么不行?
我分页结果中的第页记录数少了一条记录:》
http://www.phpchina.com/bbs/thread-17440-1-1.html

请麻看看?

作者: pewkee   发布时间: 2007-01-24

认真学习,争取早点入门。。

作者: lihuaxia838   发布时间: 2007-01-25

认真学习,争取早点入门。。

作者: lihuaxia838   发布时间: 2007-01-25

好贴,
学而时习之

作者: 太上皇   发布时间: 2007-01-25

好贴,给初学者上了很好的一课

作者: banbadaowd   发布时间: 2007-01-25

好帖。。。。。。。。。
金典。。。。。。。。。

作者: huanglei926   发布时间: 2007-01-27

:) :) 顶下学习

作者: goshawk   发布时间: 2007-01-27

http://www.shaws.com.cn/
这个站点显示搜索结果的分页有兴趣的看看,若需要源代码请发送Email到webmaster@shaws.com.cn

作者: sjtushaw   发布时间: 2007-01-27

$total=mysql_num_rows(mysql_query("select * from user_mst"));
�@���|西有�c���}- -
如果用
$info=mysql_query("select * from user_mst  limit $offset,$num");   
$total=mysql_num_rows($info);
再去xxxxx
�@便可以�p了一次的query^_^
如:
复制PHP内容到剪贴板
PHP代码:

<?php
$page = isset($_GET['page']) && intval($_GET['page']) >= 1 ? intval($_GET['page']) : 1;
$num = 10;
$offset = ($page-1) * $num;

##############################
$query=mysql_query("select * from user_mst  limit $offset,$num");
$total=mysql_num_rows($info);
if($total < 1) {
    exit('�]有����...');
}
##############################

// ..................

?>

[ 本帖最后由 w992 于 2007-1-28 11:00 编辑 ]

作者: w992   发布时间: 2007-01-28

初学 PHP 很有收获 感谢默默分享经验:lol

作者: 天之魔神   发布时间: 2007-01-28

收藏了。

作者: lgy1   发布时间: 2007-01-28

昨晚看完忘记回复  今天如此多贴....

可恨啊

作者: 小竣   发布时间: 2007-01-28

en ,学到了很多东西。。

作者: yzhxiang   发布时间: 2007-02-08

支持,在发一个。

作者: yzhxiang   发布时间: 2007-02-08

$page=$_GET['page'];
if($page>1){
$next=$page-1;
echo" <a href='lyb.php?class=$class&page=$next'>上一页</a> ";
}
这样也可以的坳。

作者: yzhxiang   发布时间: 2007-02-08

哈哈,再顶顶。。。。。。。。。。。。。。

作者: yzhxiang   发布时间: 2007-02-08

顶,这两天正看到这,不明白limit的作用,谢啦,收藏一下~

作者: lttb258   发布时间: 2007-02-08

新手必看

作者: wind840619   发布时间: 2007-02-09

收下~!..

作者: qingis   发布时间: 2007-02-26

学习了

作者: groudfish   发布时间: 2007-02-27

顶一下!!新手学习中!!

作者: zedspur   发布时间: 2007-02-27

努力学习,天天向上!

作者: cnhaoren   发布时间: 2007-03-05

太好了 正在从0开始:)

作者: 纯色理想   发布时间: 2007-03-11

顶一下!!!

作者: cxc0378   发布时间: 2007-03-12

我是初学者,有个问题请教:
关于这句
$info=mysql_query("select name from table limit $offset,$num");

我把select name from table 这条命令替换为用post读取的一个session变量,如$_SESSION['sql']=$_POST['command'],可是当我执行
$info=mysql_query("$_SESSION['com_sql'] limit $offset, $num");
这句的时候就出错了,请问是哪里的错误呀?
谢谢

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解决了$info=mysql_query("".$_SESSION['com_sql']." limit $offset, $num");
这样就行了
为什么要加"."呢???

[ 本帖最后由 hurey 于 2007-3-16 09:58 编辑 ]

作者: hurey   发布时间: 2007-03-16

还有一个问题关于分页导航条
$pagenav="|| afficher ".($total_row?($offset+1):0)."-".min($offset+10,$total_row)." records || total $total_row records ||<br>";
其中有很多"."是什么意思
下边的变量$pagenav.为什么也有"."呢?

作者: hurey   发布时间: 2007-03-16

不知道是怎么回事 我直接把默默地代码改了以后 只出现了第一页 其他的几页都说找不到 然后参考了一下辉老大的代码 然后把最后改为
$url="nav.php";
$show=($i!=$page)?"<a href='$url?page=".$i."'>$i</a>":"<b>$i</b>";
了以后就能够正常的分页。也就是说多了一个url定位。:L

作者: scofile   发布时间: 2007-03-16

:(
每次鄱页都连接,查询数据库,是不是效率差点.浪费时间

比如一页是10条信息..

能不能一次先取出0-50条.缓存起来,减少直接连接数据库.

每次传回10条.

然后,等到第6页时,再启动下一个连接,取回50-100条

......


这种思路怎么实现叱?

作者: heimuxiao   发布时间: 2007-03-20

刚接触php
分页要函数怎么改啊

作者: 纯色理想   发布时间: 2007-03-22

学习~~~~

作者: sanrui1   发布时间: 2007-03-22

默默我爱你~~:lol

作者: lijunyan_888   发布时间: 2007-04-18

支持,写得很实在,OK

作者: swxhlj   发布时间: 2007-05-10

我也做过PHP的分页,哈哈
不过没你做的好啊

作者: php_boy   发布时间: 2007-05-11

多多发一些这样的帖子!!!

呵呵~~~

作者: 木�^   发布时间: 2007-05-11

支持!:)

作者: 相思豆   发布时间: 2007-05-11

学习~~~

作者: 寂寞的防火墙   发布时间: 2007-05-26

:lol

作者: leander   发布时间: 2007-06-18

好帖!顶了

作者: php_lover   发布时间: 2007-06-22

支持!

作者: richard_liu   发布时间: 2007-06-26

太谢谢了,我最近就是看得头都大了啊

作者: njuptsoz   发布时间: 2007-08-02

很有帮助

作者: 路人郝   发布时间: 2007-08-04

默默可以当教授了。。。。一般的老师都没分析得这么详细、明了!

作者: mossystone   发布时间: 2007-08-08

不错

作者: xulxqqqq   发布时间: 2007-08-08

同意默默当教授 呵呵

作者: wrs_1983   发布时间: 2007-08-10

终于明白了分页的原理和代码的实现了。谢谢楼上和楼下的朋友!

作者: dangerous_b   发布时间: 2007-10-25

DING!狂顶
好东东啊

作者: lxylxy888666   发布时间: 2007-10-25

★PHP4.3.4(带2.1.10a 加速器) /Apache2.0.48/GD2.1x/Zend 加速及加密
可设置虚拟目录;
★数据库可在线管理,空间不限,支持Mysql或者Sql sever数据库;
★新增空间流量统计功能,可实时查看访问量、访问IP数、流量大小和CPU执行
时间等网站状态
★送免费的留言板和计数器
--------------------------------------------------------------------------------
例程如下:
<?
if($send){
$hearer="From:$from\nReply-To:$from\nX-Mailer: PHP/".phpversion()."\nContent-Type:text/html";
$result=mail($to,$subject,$body,$hearer);
if($result)
echo "邮件已成功发送";
}
?>
<html>
<body>
<table width="100%" border="0" cellpadding="1" cellspacing="1" bgcolor="#6699FF">
<form method="post">
<tr bgcolor="#E7E7CB">
<td width="20%" height="26">发件人:</td>
<td width="80%"><input name="from" type="text"></td>
</tr>
<tr bgcolor="#E7E7CB">
<td height="25">收件人:</td>
<td><input name="to" type="text"></td>
</tr>
<tr bgcolor="#E7E7CB">
<td height="24">邮件标题:</td>
<td><input name="subject" type="text" size="50"></td>
</tr>
<tr bgcolor="#E7E7CB">
<td height="27">邮件内容:</td>
<td><textarea name="body" cols="60" rows="10"></textarea></td>
</tr>
<tr bgcolor="#E7E7CB">
<td height="28"> </td>
<td>
<input type="hidden" value="1" name="send">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置"></td>
</tr>
</form>
</table>
</body>
</html>

作者: oneeo001   发布时间: 2007-10-25

引用:
原帖由 leehui1983 于 2006-12-3 15:18 发表
好帖子啊,我来顶默默的提问,代码,如下:


顺便再深入下,在实际应用中,几乎涉及列表的就要用到分页,大家可以试试做一个分页通用函数,这样只要需要分页的地方就调用这个函数,呵呵~~
大家请看
$url='test.php';//获取本页URL

个人感觉这样写很不好吧~
应该写成$_SERVER['PHP_SELF']
用这种方法来取得会更好些,不然每页都要改啊~

呵呵

作者: my.com.net   发布时间: 2007-10-31

希望对这个做个总结,做成分页总结档,不要后面有跟贴只添加扩展内容方便查阅,就像面向对象一样的继承和扩展

作者: jfcat   发布时间: 2007-10-31

太棒了

作者: php没伞的男孩   发布时间: 2007-11-04

我看懂了。

作者: dujiangtao   发布时间: 2007-11-06

作者: naodai   发布时间: 2007-11-06

谢谢了


很不错

支持你了

作者: fy521   发布时间: 2007-11-07

不错,学习下

作者: songyuchen88   发布时间: 2007-11-08

默默很不错啊,值得学习哦

作者: zhun   发布时间: 2007-11-10

up

作者: claymore   发布时间: 2007-11-10


最早是在别的论坛也看到这段代码。
开始还以为是个男的呢!
哈哈~~

晕,原来是这里的默默写的呀!

作者: Edward_Sim   发布时间: 2007-11-11

学到了

作者: oldjan   发布时间: 2007-11-20

支持默默

作者: ztskycn   发布时间: 2007-12-02

好东西啊!

作者: 赤地之雪   发布时间: 2007-12-02

我了来顶下哦 确实很详细

作者: kissweb   发布时间: 2007-12-02

以前也看到过分页详细解释 这个 http://www.phpchina.com/bbs/thread-13295-1-1.html
不过没这个跟帖多 这个贴你一言我一语的都贡献着自己的力量 就越来越清晰了

[ 本帖最后由 kissweb 于 2007-12-2 15:02 编辑 ]

作者: kissweb   发布时间: 2007-12-02

感谢LZ的分享!

作者: 51drum   发布时间: 2007-12-02

感觉php+mysql分页实现起来还是蛮简单的!!!

作者: liumy601   发布时间: 2007-12-03

太强了!无限的膜拜

作者: leejianjun   发布时间: 2007-12-21

默默真的应该去出一本书,文笔太好了

作者: fhjr999   发布时间: 2007-12-21

$_GET['page'])中这个page是从那来的呢?

如果要$_GET['name']都有一个<input type="text",name="name" value="">

但这个page是从哪 来的呢,我是小菜,不明白啊

作者: enterhuiche   发布时间: 2008-01-08

作者: ct_174880859   发布时间: 2008-01-08

谢谢!

作者: canstar   发布时间: 2008-01-08

一篇文章要如何分页呢?

作者: siemenliu   发布时间: 2008-01-08

leehui1983和默默都厉害

作者: xscac   发布时间: 2008-01-31

默默帮了我大忙了,解惑也

作者: 脚本王子   发布时间: 2008-02-12

顶下~~~

作者: siasford   发布时间: 2008-03-02

不错,做个记号!

作者: ztskycn   发布时间: 2008-03-02

喜欢喜欢喜欢。默默一说我就明白勒~~

作者: lx4909   发布时间: 2008-03-12

好贴,我顶!

作者: 冰翼   发布时间: 2008-03-12

我用2楼辉大大写的代码.
怎么每条数据都显示2次了呢...奇怪.

作者: scorpio32   发布时间: 2008-03-13

支持楼主!!!

作者: jmnhw   发布时间: 2008-03-13

希望在多一些这样详细的教程。。。

作者: aluan2005   发布时间: 2008-03-14

学习! 不错,新手喜欢!

作者: yoyorose   发布时间: 2008-03-14

学习,向所有LS的学习

作者: jsw0528   发布时间: 2008-03-14

哇哈哈,正好需要啊,很不错,浅显易懂!
我想问要,要是显示的时候成“三行五列”显示,应该怎么处理啊?

作者: slliang1983   发布时间: 2008-03-18

分页对我来说很实用的功能,谢谢了.

作者: heannt   发布时间: 2008-03-20

默默我寻求这么久就是为了你

作者: lucas1860   发布时间: 2008-03-21

刚好用到!谢谢谢谢!
学习去

作者: tolert   发布时间: 2008-03-21

服了,2006年的帖子都被翻出来了

作者: thaiki   发布时间: 2008-03-21

我是新手,有的地方不是很明白

作者: 46612206   发布时间: 2008-03-21

对于新手来说非常有用啊!

作者: ses20020557   发布时间: 2008-03-21

相信很有帮助

作者: ft234451532   发布时间: 2008-03-21

好。受教了。

作者: 歪歪   发布时间: 2008-04-06

很好。谢谢

作者: libaiyi   发布时间: 2008-04-06

两个都好,呵呵~我还是要自习琢磨一下~!

作者: hncscwc   发布时间: 2008-04-06

默默是男生还是女生?
这么厉害?

作者: jefsun   发布时间: 2008-04-09

好文章谢谢啦

作者: fei   发布时间: 2008-04-10

多谢~默默

作者: siasford   发布时间: 2008-04-18

辉哥,默默都值得我们学习

作者: atree1984   发布时间: 2008-05-12

假如我有100W条数据,用limit的思路的话,要找到50W后的10条就是 select * from TBL order by id desc limit 500000,10
查询的效率是否要考虑一下.

个人觉得用select * from TBL where id>500000  limit 10效率会高一点.

作者: Fevo   发布时间: 2008-05-15

看过了,很有帮助。。。
                                 学而不思则罔。思而不学则殆

作者: wydycrtd   发布时间: 2008-05-15

没入门的新手来顶你

作者: 落寞三少   发布时间: 2008-05-16

学习,再学习

作者: fangguojun   发布时间: 2008-05-20

哇。。。。。。。。。。。。。

作者: Cr@zyTreE   发布时间: 2008-07-11

php有没有现成的分页标签(如java开发时,可以使用pager等现成标签),使得程序员只关注后台查找总数和列表而不用关心前台显示(显然前台显示是 重复的无聊的体力活).
关注ing.........

作者: flykete   发布时间: 2008-07-11

不错 不错

作者: caifeng112   发布时间: 2008-07-11

简洁,想要的功能也都有,不错

作者: ankchang   发布时间: 2008-07-17

引用:
原帖由 Fevo 于 2008-5-15 16:04 发表
假如我有100W条数据,用limit的思路的话,要找到50W后的10条就是 select * from TBL order by id desc limit 500000,10
查询的效率是否要考虑一下.

个人觉得用select * from TBL where id>500000  limit 10效率会高 ...
select * from TBL where id>=(select id from TBL limit 500000,1) limit 10

作者: lcsendmail   发布时间: 2008-07-19

select * from srv_stu where id<=(select id from srv_stu order by id desc limit $offset,1) order by id desc limit $intPerPage

作者: lcsendmail   发布时间: 2008-07-19

分离的discuz分页函数function page($page_num,$cur_page,$per_group,$base_url){  //分页函数

        $base_url .= strpos($base_url, '?') ? '&' : '?';

        $page_val = "";

        if ($page_num < 1) {
                return $page_val;
        } elseif($page_num == 1) {
                return $page_val = 1;
        }

        $group_ok = !(($page_num-1)%($per_group-1));

        //计算一共有多少组
        if($group_ok) {
                $group_num = ($page_num-1)/($per_group-1);
        } else {
                $group_num = ceil(($page_num-1)/($per_group-1));
        }

        //判断当前页是否为一组的最后一个
        $is_last_page = !(($cur_page-1)%($per_group-1));

        //计算当前在的组数
        if($is_last_page) {
                $cur_group = ($cur_page-1)/($per_group-1) + 1;
        } else {
                $cur_group = ceil(($cur_page-1)/($per_group-1));
        }

        //计算显示的起始页
        $from = ($cur_group - 1) * ($per_group-1) + 1;
        $from = $cur_group <= 1 ? 1 :$from;
        $to = $from + $per_group;
        $to = $to > $page_num ? $page_num + 1 : $to;

        for($a = $from; $a < $to; $a++){
                if( $a != $cur_page) {
                        $page_val .= '<a href ='.$base_url.'page='.$a.'>'.$a.'</a>';
                } else {
                        $page_val .= $a;
                }
        }

        //上一页下一页首页尾页
        $next=$cur_page+1;
        $prev=$cur_page-1;
        if ($cur_page!=$page_num) {
                $page_val.='<a href ='.$base_url.'page='.$next.'>'.'下一页'.'</a>';
                $page_val .= '<a href ='.$base_url.'page='.$page_num.'>'.'>>'.'</a>'; //尾页
        }
        if ($cur_page!=1) {
                $page_val = '<a href ='.$base_url.'page='.$prev.'>'.'上一页'.'</a>'.$page_val;
                $page_val = '<a href ='.$base_url.'page=1>'.'<<'.'</a>'.$page_val;  //首页
        }

        return $page_val;
}

作者: 脚本王子   发布时间: 2008-07-20

我现在倒是觉得分页难在链接生成上

作者: love__xijun   发布时间: 2008-07-20

收了,好用,谢谢了!

作者: wtguang   发布时间: 2008-07-22

支持

作者: wtguang   发布时间: 2008-07-22

好东西!!学习了!谢谢了!

作者: huaganshang   发布时间: 2008-08-07

不错!!!!!!!!


will you say mother jyili.com still every parent not www.tjzmb.com come to a www.cye58.com free ers post www.yingyuji.com two www.aywawa.com that youa aeui www.baidu.com and see you moss kiss dzy.cye58.com to r1.cye58.com seeya fp025.cye58.com atalk work eayu .

作者: 小雨点   发布时间: 2010-09-24