首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

默默小谈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,可是第二个参数是不变的。
也就是说咱们设法根据页数来改变第一个参数的值,就可以进行分页显示数据了,怎么样,原理是不是很简单?

可是要怎么设法根据页数来改变第一个参数的值呢?首先,咱们要有一个页数的值,用urlGET方式获取。
比如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 13:39:00
好帖子啊,我来顶默默的提问,代码,如下:
复制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 $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 15:18:00
默默就是默默
认真向默默学习!
昵称: Nickboy  时间: 2006-12-03 15:22:00
楼上的觉得我怎样?:lol :lol :lol
昵称: leehui1983  时间: 2006-12-03 15:27:00
不错,支持一下
昵称: dzjzmj  时间: 2006-12-03 16:17:00
哈哈,辉老大!
昵称: PHPChina  时间: 2006-12-03 17:41:00
楼上的笑什么啊?:L
昵称: leehui1983  时间: 2006-12-03 20:03:00
支持一下,很好!
昵称: 3x032  时间: 2006-12-03 21:37:00
谢谢!!!
昵称: zwws  时间: 2006-12-03 21:43:00
两个都不错,谢谢
昵称: 王洋姜  时间: 2006-12-03 22:08:00
or die("打字出错了")

用url的ger方式获取。


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

[ 本帖最后由 86800787 于 2006-12-4 01:24 编辑 ]
昵称: 86800787  时间: 2006-12-04 01:20:00
谢谢楼上大大的指正,已经修改好啦,呵呵
昵称: 默默  时间: 2006-12-04 09:05:00
那mssql分页呢
昵称: 浪迹天涯  时间: 2006-12-04 09:11:00
复制内容到剪贴板
代码:
$page=isset($_GET['page'])?intval($_GET['page']):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
这句话看起来有点难理解哦,那个  “page=18”  是怎么定义来的还是怎么回事,谢谢
昵称: shenstef  时间: 2006-12-04 09:43:00
这是检查page是否赋值,是就取得page值,如果是18则取得18,不是则取1,也就是判断是否多于一页
昵称: leehui1983  时间: 2006-12-04 10:07:00
$page=isset($_GET['page'])?intval($_GET['page']):1;      
相当于

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

表达式  ? :  是三元运算符,假如问号之前的条件成立,则执行问号之后的表达式,否则执行冒号之后的表达式.
昵称: 默默  时间: 2006-12-04 10:08:00
引用:
原帖由 默默 于 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 10:17:00
三元运算符,应该掌握的基本东东:L
昵称: leehui1983  时间: 2006-12-04 10:18:00
引用:
原帖由 leehui1983 于 2006-12-4 10:18 发表
三元运算符,应该掌握的基本东东:L
哈哈  惭愧,我真的没用功学
昵称: shenstef  时间: 2006-12-04 10:22:00
引用:
原帖由 shenstef 于 2006-12-4 10:17 发表

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

但是一般排列数据都是倒序(记录id最大的最前面),您这样能实现么,没环境不好去测试,谢谢
因为咱们主要是实现分页,假如是倒序的话只要在查询语句里的limit前面加入
order by date desc
就可以啦.^_^.
昵称: 默默  时间: 2006-12-04 10:28:00
:lol 学习了,非常感谢楼上各位的指点,谢谢
昵称: shenstef  时间: 2006-12-04 10:33:00
昵称: cator  时间: 2006-12-04 12:53:00
收藏了,回去在研究,别删了啊
昵称: shuck  时间: 2006-12-04 13:05:00
呵呵
昵称: 默默  时间: 2006-12-05 12:13:00
不错 比较基础 入门级
昵称: 水镜  时间: 2006-12-05 13:51:00
经典的分析!绝对支持
昵称: yustar  时间: 2006-12-05 13:58:00
高手分析就是不一样,谢谢了.学习!
昵称: loveyou_85  时间: 2006-12-05 16:54:00
没有把数据库命令集成进去,只通过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<=|| $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>=&& $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 22:57:00
不错
昵称: leehui1983  时间: 2006-12-06 12:39:00
引用:
原帖由 86800787 于 2006-12-4 01:20 发表
or die("打字出错了")

用url的ger方式获取。


:lol默默你可以为我们新手写一本书啦!销路一定没有问题的:lol
用 URL的GER方式获取!!:o :o :o
昵称: CFC4N  时间: 2006-12-07 11:42:00
HOHO
昵称: 默默  时间: 2006-12-07 13:54:00
默默,真好:)
昵称: carra  时间: 2006-12-07 19:09:00
想象当年就是看dreamweaver的分页学会的。
昵称: RunWithU  时间: 2006-12-07 20:22:00
我也顶下 ,,写的不错
昵称: baker95935  时间: 2006-12-19 10:59:00
好帖,,讲解详细。可以用作教程了。
昵称: runner  时间: 2006-12-19 11:39:00
好贴就是要顶

最近下了几个教程,打印了,边看边学边改.
昵称: regedit18  时间: 2006-12-19 16:39:00
复杂问题简单话是要一定的水平的,好!支持默默
昵称: caicaiphper  时间: 2006-12-29 10:40:00
不错,支持默默..
昵称: visam  时间: 2006-12-29 12:53:00
;P  支持基础
昵称: 小小熊  时间: 2006-12-29 13:01:00
这贴里水份也很多,不差我一个,留个名
昵称: unspace  时间: 2006-12-29 13:07:00
:L 我基础太差了,没看懂.

我还是从头学起吧
昵称: hxlady  时间: 2006-12-29 13:49:00
收了,好好学习
昵称: studyphp  时间: 2006-12-29 14:56:00
支持下!!:)
昵称: yepiaobo  时间: 2006-12-29 15:46:00
支持支持、、
昵称: joknang  时间: 2006-12-29 19:13:00
向默默学习
昵称: luanren  时间: 2006-12-30 09:37:00
按照默默说的,随便做的,感觉不好,大家改改

<?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 11:47:00
大家继续啊,如果想要在分页时传递一个参数,该怎么写啊,
也就是有个搜索页面,想在分页时把搜索的关键字也带上 ,应该怎么写啊 ,
在线等待~~~~~~~~~~
昵称: yinqikai1984  时间: 2006-12-30 12:53:00
补充一下,就是用默默的分页代码 应该怎么写啊  各位
昵称: yinqikai1984  时间: 2006-12-30 12:54:00
默默真是为大家着想!
辛苦了
昵称: hqlong  时间: 2006-12-30 13:27:00
那做个<input typt="hidden" .......>,这样可以传值呀
昵称: luanren  时间: 2006-12-30 13:35:00
好象不是 用隐藏域来传的吧,
怎么感觉默默的分页代码 在做搜索时怎么输不出数据啊,
  在线等待默默 ~~~
昵称: yinqikai1984  时间: 2006-12-30 13:58:00
应该是你的SQL语句写的不对,传值可以GET也可以POST
昵称: 默默  时间: 2006-12-30 18:17:00
讲解的很详细。
昵称: 特蓝克斯  时间: 2006-12-30 21:19:00
不多的分页代码~已加在自己的学习页面中,多谢了
昵称: terryCM  时间: 2007-01-11 00:19:00
爱死momo了
昵称: redhood  时间: 2007-01-12 12:07:00
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 08:36:00
听到默默就想起以前玩魔兽世界时,在六区阿拉希,练级时有个叫默默的LM女MS蹲我尸:')
昵称: tony508  时间: 2007-01-15 10:41:00
..........
昵称: 默默  时间: 2007-01-15 13:01:00
引用:
原帖由 tony508 于 2007-1-15 10:41 发表
听到默默就想起以前玩魔兽世界时,在六区阿拉希,练级时有个叫默默的LM女MS蹲我尸:')
...记忆力真好...联想的也好...;P
昵称: suturn-ly  时间: 2007-01-15 13:13:00
MOMO:
请帮我看一下我这个分页怎么不行?
我分页结果中的第页记录数少了一条记录:》
http://www.phpchina.com/bbs/thread-17440-1-1.html

请麻看看?
昵称: pewkee  时间: 2007-01-24 16:39:00
认真学习,争取早点入门。。
昵称: lihuaxia838  时间: 2007-01-25 20:54:00
认真学习,争取早点入门。。
昵称: lihuaxia838  时间: 2007-01-25 20:55:00
好贴,
学而时习之
昵称: 太上皇  时间: 2007-01-25 22:15:00
好贴,给初学者上了很好的一课
昵称: banbadaowd  时间: 2007-01-25 23:50:00
好帖。。。。。。。。。
金典。。。。。。。。。
昵称: huanglei926  时间: 2007-01-27 19:57:00
:) :) 顶下学习
昵称: goshawk  时间: 2007-01-27 20:17:00
http://www.shaws.com.cn/
这个站点显示搜索结果的分页有兴趣的看看,若需要源代码请发送Email到webmaster@shaws.com.cn
昵称: sjtushaw  时间: 2007-01-27 22:24:00
$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']) >= 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 10:52:00
初学 PHP 很有收获 感谢默默分享经验:lol
昵称: 天之魔神  时间: 2007-01-28 15:13:00
收藏了。
昵称: lgy1  时间: 2007-01-28 15:14:00
昨晚看完忘记回复  今天如此多贴....

可恨啊
昵称: 小竣  时间: 2007-01-28 16:09:00
en ,学到了很多东西。。
昵称: yzhxiang  时间: 2007-02-08 22:58:00
支持,在发一个。
昵称: yzhxiang  时间: 2007-02-08 22:59:00
$page=$_GET['page'];
if($page>1){
$next=$page-1;
echo" <a href='lyb.php?class=$class&page=$next'>上一页</a> ";
}
这样也可以的坳。
昵称: yzhxiang  时间: 2007-02-08 23:01:00
哈哈,再顶顶。。。。。。。。。。。。。。
昵称: yzhxiang  时间: 2007-02-08 23:02:00
顶,这两天正看到这,不明白limit的作用,谢啦,收藏一下~
昵称: lttb258  时间: 2007-02-08 23:40:00
新手必看
昵称: wind840619  时间: 2007-02-09 13:01:00
收下~!..
昵称: qingis  时间: 2007-02-26 19:14:00
学习了
昵称: groudfish  时间: 2007-02-27 16:26:00
顶一下!!新手学习中!!
昵称: zedspur  时间: 2007-02-27 16:50:00
努力学习,天天向上!
昵称: cnhaoren  时间: 2007-03-05 16:16:00
太好了 正在从0开始:)
昵称: 纯色理想  时间: 2007-03-11 23:54:00
顶一下!!!
昵称: cxc0378  时间: 2007-03-12 10:09:00
我是初学者,有个问题请教:
关于这句
$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 03:24:00
还有一个问题关于分页导航条
$pagenav="|| afficher ".($total_row?($offset+1):0)."-".min($offset+10,$total_row)." records || total $total_row records ||<br>";
其中有很多"."是什么意思
下边的变量$pagenav.为什么也有"."呢?
昵称: hurey  时间: 2007-03-16 07:51:00
不知道是怎么回事 我直接把默默地代码改了以后 只出现了第一页 其他的几页都说找不到 然后参考了一下辉老大的代码 然后把最后改为
$url="nav.php";
$show=($i!=$page)?"<a href='$url?page=".$i."'>$i</a>":"<b>$i</b>";
了以后就能够正常的分页。也就是说多了一个url定位。:L
昵称: scofile  时间: 2007-03-16 15:23:00
:(
每次鄱页都连接,查询数据库,是不是效率差点.浪费时间

比如一页是10条信息..

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

每次传回10条.

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

......


这种思路怎么实现叱?
昵称: heimuxiao  时间: 2007-03-20 11:52:00
刚接触php
分页要函数怎么改啊
昵称: 纯色理想  时间: 2007-03-22 11:16:00
学习~~~~
昵称: sanrui1  时间: 2007-03-22 11:37:00
默默我爱你~~:lol
昵称: lijunyan_888  时间: 2007-04-18 11:00:00
支持,写得很实在,OK
昵称: swxhlj  时间: 2007-05-10 22:05:00
我也做过PHP的分页,哈哈
不过没你做的好啊
昵称: php_boy  时间: 2007-05-11 07:49:00
多多发一些这样的帖子!!!

呵呵~~~
昵称: 木�^  时间: 2007-05-11 08:08:00
支持!:)
昵称: 相思豆  时间: 2007-05-11 10:13:00
学习~~~
昵称: 寂寞的防火墙  时间: 2007-05-26 10:39:00
:lol
昵称: leander  时间: 2007-06-18 19:28:00
好帖!顶了
昵称: php_lover  时间: 2007-06-22 17:36:00
支持!
昵称: richard_liu  时间: 2007-06-26 13:04:00
太谢谢了,我最近就是看得头都大了啊
昵称: njuptsoz  时间: 2007-08-02 16:28:00
很有帮助
昵称: 路人郝  时间: 2007-08-04 09:33:00
默默可以当教授了。。。。一般的老师都没分析得这么详细、明了!
昵称: mossystone  时间: 2007-08-08 16:06:00
不错
昵称: xulxqqqq  时间: 2007-08-08 19:56:00
同意默默当教授 呵呵
昵称: wrs_1983  时间: 2007-08-10 22:08:00
终于明白了分页的原理和代码的实现了。谢谢楼上和楼下的朋友!
昵称: dangerous_b  时间: 2007-10-25 11:29:00
DING!狂顶
好东东啊
昵称: lxylxy888666  时间: 2007-10-25 15:23:00
★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 16:37:00
引用:
原帖由 leehui1983 于 2006-12-3 15:18 发表
好帖子啊,我来顶默默的提问,代码,如下:


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

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

呵呵
昵称: my.com.net  时间: 2007-10-31 13:07:00
希望对这个做个总结,做成分页总结档,不要后面有跟贴只添加扩展内容方便查阅,就像面向对象一样的继承和扩展
昵称: jfcat  时间: 2007-10-31 13:27:00
太棒了
昵称: php没伞的男孩  时间: 2007-11-04 16:12:00
我看懂了。
昵称: dujiangtao  时间: 2007-11-06 22:20:00
昵称: naodai  时间: 2007-11-06 22:48:00
谢谢了


很不错

支持你了
昵称: fy521  时间: 2007-11-07 17:29:00
不错,学习下
昵称: songyuchen88  时间: 2007-11-08 03:16:00
默默很不错啊,值得学习哦
昵称: zhun  时间: 2007-11-10 16:06:00
up
昵称: claymore  时间: 2007-11-10 18:05:00

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

晕,原来是这里的默默写的呀!
昵称: Edward_Sim  时间: 2007-11-11 16:34:00
学到了
昵称: oldjan  时间: 2007-11-20 22:16:00
支持默默
昵称: ztskycn  时间: 2007-12-02 13:37:00
好东西啊!
昵称: 赤地之雪  时间: 2007-12-02 13:40:00
我了来顶下哦 确实很详细
昵称: kissweb  时间: 2007-12-02 14:43:00
以前也看到过分页详细解释 这个 http://www.phpchina.com/bbs/thread-13295-1-1.html
不过没这个跟帖多 这个贴你一言我一语的都贡献着自己的力量 就越来越清晰了

[ 本帖最后由 kissweb 于 2007-12-2 15:02 编辑 ]
昵称: kissweb  时间: 2007-12-02 14:56:00
感谢LZ的分享!
昵称: 51drum  时间: 2007-12-02 19:33:00
感觉php+mysql分页实现起来还是蛮简单的!!!
昵称: liumy601  时间: 2007-12-03 00:02:00
太强了!无限的膜拜
昵称: leejianjun  时间: 2007-12-21 15:03:00
默默真的应该去出一本书,文笔太好了
昵称: fhjr999  时间: 2007-12-21 18:55:00
$_GET['page'])中这个page是从那来的呢?

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

但这个page是从哪 来的呢,我是小菜,不明白啊
昵称: enterhuiche  时间: 2008-01-08 10:46:00
昵称: ct_174880859  时间: 2008-01-08 14:32:00
谢谢!
昵称: canstar  时间: 2008-01-08 16:23:00
一篇文章要如何分页呢?
昵称: siemenliu  时间: 2008-01-08 21:33:00
leehui1983和默默都厉害
昵称: xscac  时间: 2008-01-31 20:44:00
默默帮了我大忙了,解惑也
昵称: 脚本王子  时间: 2008-02-12 17:32:00
顶下~~~
昵称: siasford  时间: 2008-03-02 21:39:00
不错,做个记号!
昵称: ztskycn  时间: 2008-03-02 21:46:00
喜欢喜欢喜欢。默默一说我就明白勒~~
昵称: lx4909  时间: 2008-03-12 14:44:00
好贴,我顶!
昵称: 冰翼  时间: 2008-03-12 14:53:00
我用2楼辉大大写的代码.
怎么每条数据都显示2次了呢...奇怪.
昵称: scorpio32  时间: 2008-03-13 21:54:00
支持楼主!!!
昵称: jmnhw  时间: 2008-03-13 23:35:00
希望在多一些这样详细的教程。。。
昵称: aluan2005  时间: 2008-03-14 09:50:00
学习! 不错,新手喜欢!
昵称: yoyorose  时间: 2008-03-14 13:42:00
学习,向所有LS的学习
昵称: jsw0528  时间: 2008-03-14 15:10:00
哇哈哈,正好需要啊,很不错,浅显易懂!
我想问要,要是显示的时候成“三行五列”显示,应该怎么处理啊?
昵称: slliang1983  时间: 2008-03-18 09:03:00
分页对我来说很实用的功能,谢谢了.
昵称: heannt  时间: 2008-03-20 10:59:00
默默我寻求这么久就是为了你
昵称: lucas1860  时间: 2008-03-21 14:15:00
刚好用到!谢谢谢谢!
学习去
昵称: tolert  时间: 2008-03-21 15:18:00
服了,2006年的帖子都被翻出来了
昵称: thaiki  时间: 2008-03-21 15:33:00
我是新手,有的地方不是很明白
昵称: 46612206  时间: 2008-03-21 16:06:00
对于新手来说非常有用啊!
昵称: ses20020557  时间: 2008-03-21 16:57:00
相信很有帮助
昵称: ft234451532  时间: 2008-03-21 19:36:00
好。受教了。
昵称: 歪歪  时间: 2008-04-06 17:16:00
很好。谢谢
昵称: libaiyi  时间: 2008-04-06 18:53:00
两个都好,呵呵~我还是要自习琢磨一下~!
昵称: hncscwc  时间: 2008-04-06 20:17:00
默默是男生还是女生?
这么厉害?
昵称: jefsun  时间: 2008-04-09 08:16:00
好文章谢谢啦
昵称: fei  时间: 2008-04-10 17:25:00
多谢~默默
昵称: siasford  时间: 2008-04-18 14:08:00
辉哥,默默都值得我们学习
昵称: atree1984  时间: 2008-05-12 23:27:00
假如我有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 16:04:00
看过了,很有帮助。。。
                                 学而不思则罔。思而不学则殆
昵称: wydycrtd  时间: 2008-05-15 23:01:00
没入门的新手来顶你
昵称: 落寞三少  时间: 2008-05-16 12:18:00
学习,再学习
昵称: fangguojun  时间: 2008-05-20 13:30:00
哇。。。。。。。。。。。。。
昵称: Cr@zyTreE  时间: 2008-07-11 16:37:00
php有没有现成的分页标签(如java开发时,可以使用pager等现成标签),使得程序员只关注后台查找总数和列表而不用关心前台显示(显然前台显示是 重复的无聊的体力活).
关注ing.........
昵称: flykete  时间: 2008-07-11 16:49:00
不错 不错
昵称: caifeng112  时间: 2008-07-11 23:41:00
简洁,想要的功能也都有,不错
昵称: ankchang  时间: 2008-07-17 18:19:00
引用:
原帖由 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 22:31:00
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 23:18:00
分离的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 00:01:00
我现在倒是觉得分页难在链接生成上
昵称: love__xijun  时间: 2008-07-20 09:11:00
收了,好用,谢谢了!
昵称: wtguang  时间: 2008-07-22 10:35:00
支持
昵称: wtguang  时间: 2008-07-22 13:02:00
好东西!!学习了!谢谢了!
昵称: huaganshang  时间: 2008-08-07 17:20:00
不错!!!!!!!!


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 00:22:35