会员登录 用户名: 密码: 登录 新会员注册 [找回密码]
当前位置:编程论坛 >> Web开发技术 >> PHP编程论坛 >> [分享]php的分页显示
首页
中资源
  发表一个新主题  发表一个新投票  回复主题 您是本帖的第 368 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
 * 贴子主题:[分享]php的分页显示 报告本帖给版主  显示可打印的版本  把本贴打包邮递  把本贴加入论坛收藏夹  发送本页面给朋友  把本贴加入IE收藏夹 
 shuxian 帅哥哟,离线,有人找我吗?
  
  
  等 级:初出江湖
  积 分:167
  专家分:20
  提问帖:0/0
  回答帖:4
  总帖数:14
  经验值:70
  注 册:2008-11-18
给shuxian发送一个短消息 把shuxian加入好友 查看shuxian的个人资料 搜索shuxian在PHP编程论坛的所有贴子  引用回复这个贴子 回复这个贴子楼主

发贴心情 [分享]php的分页显示

复杂的实现分页功能
function _PAGEFT($totle, $displaypg = 20, $url = '') 
    {
      global $page, $firstcount, $pagenav, $_SERVER;
      $GLOBALS["displaypg"] = $displaypg;
      if(!$page)
        $page = 1;
            if (!$url) 
       {
        $url = $_SERVER["REQUEST_URI"];
       }
      //URL分析:
      $parse_url = parse_url($url);
      $url_query = $parse_url["query"]; //单独取出URL的查询字串
      if($url_query)       {
        $url_query = ereg_replace("(^|&)page=$page", "", $url_query);
        $url = str_replace($parse_url["query"], $url_query, $url);
        if ($url_query)
          $url .= "&page";
        else
          $url .= "page";
      }
     else 
     {
       $url .= "?page";
     }
      $lastpg = ceil($totle / $displaypg); //最后页,也是总页数
      $page = min($lastpg, $page);
      $prepg = $page -1; //上一页
      $nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
      $firstcount = ($page -1) * $displaypg;
      //开始分页导航条代码:
     $pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
  //如果只有一页则跳出函数:
     if ($lastpg <= 1)
     return false;
        $pagenav .= " <a href='$url=1'>首页</a> ";
      if ($prepg)
         $pagenav .= " <a href='$url=$prepg'>前页</a> ";
       else
         $pagenav .= " 前页 ";
      if ($nextpg)
         $pagenav .= " <a href='$url=$nextpg'>后页</a> ";
      else
         $pagenav .= " 后页 ";
          $pagenav .= " <a href='$url=$lastpg'>尾页</a> ";

      //下拉跳转列表,循环列出所有页码:
         $pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
        for ($i = 1; $i <= $lastpg; $i++)
         {
          if ($i == $page)
            $pagenav .= "<option value='$i' selected>$i</option>\n";
         else
            $pagenav .= "<option value='$i'>$i</option>\n";
         }
    $pagenav .= "</select> 页,共 $lastpg 页";
 }
$result=mysql_query("SELECT * FROM `gbook`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。
_PAGEFT($total,10);
echo $pagenav;

$result=mysql_query("SELECT  *FROM `gbook` ORDER BY `id` DESC limit $firstcount,$displaypg ");
function _PAGEFT($totle, $displaypg = 20, $url = '') 
    {

      global $page, $firstcount, $pagenav, $_SERVER;

      $GLOBALS["displaypg"] = $displaypg;

      if(!$page)
        $page = 1;
      
      if (!$url) 
       {
        $url = $_SERVER["REQUEST_URI"];
       }

      //URL分析:
      $parse_url = parse_url($url);
      $url_query = $parse_url["query"]; //单独取出URL的查询字串
      if($url_query) 
      {
        $url_query = ereg_replace("(^|&)page=$page", "", $url_query);
        $url = str_replace($parse_url["query"], $url_query, $url);
        if ($url_query)
          $url .= "&page";
        else
          $url .= "page";
      }
     else 
     {
       $url .= "?page";
     }
      $lastpg = ceil($totle / $displaypg); //最后页,也是总页数
      $page = min($lastpg, $page);
      $prepg = $page -1; //上一页
      $nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
      $firstcount = ($page -1) * $displaypg;

      //开始分页导航条代码:
     $pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
  //如果只有一页则跳出函数:
     if ($lastpg <= 1)
     return false;
        $pagenav .= " <a href='$url=1'>首页</a> ";
      if ($prepg)
         $pagenav .= " <a href='$url=$prepg'>前页</a> ";
       else
         $pagenav .= " 前页 ";
      if ($nextpg)
         $pagenav .= " <a href='$url=$nextpg'>后页</a> ";
      else
         $pagenav .= " 后页 ";
          $pagenav .= " <a href='$url=$lastpg'>尾页</a> ";

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

$result=mysql_query("SELECT * FROM `gbook`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。
_PAGEFT($total,10);
echo $pagenav; ps: 显示第 11-19 条记录,共 19 条记录 首页 前页 后页 尾页  到第页,共 2 页 >
$result=mysql_query("SELECT  *FROM `gbook` ORDER BY `id` DESC limit $firstcount,$displaypg ");
注:以后就是用来循环实现输出的

功 能:实现分页显示数据,自动传递查询参数;
<?
class pageClass
{
var $recordcount;   //总记录数
var $curpage;    //当前页
var $pagesize;    //每页显示记录数
var $pagecount;    //总页数
var $myurl;     //链接地址
var $urlstr;    //链接地址附带参数
function pageClass($d_count,$my_page=1,$my_pagesize)
{
   $this->recordcount = $d_count;
   $this->curpage = $my_page;
   $this->pagesize = $my_pagesize;
   $this->pagecount = ceil( $this->recordcount / $this->pagesize );
   $this->myurl = $_SERVER['PHP_SELF'];
   $this->urlstr = $_SERVER['QUERY_STRING'];
}

// 检测page合法性
function chk_page($page)
{
   if( !(eregi("[0-9]",$page))){
    $page = 1;
   }
   if( $page<0 ) {
    $page = 1;
   }
   if( $page > $this->pagecount ){
    $page = $this->pagecount;
   }
   return ($page);
}

// 重组url之后的参数
function get_urlstr()
{
   $newurlstr = "";
   $array = explode("&",$this->urlstr);
   for($i=0 ;$i<count($array) ;$i++ )
   {
    if( ($array[$i]!="") && (substr($array[$i],0,4)!="page"))
    {
     $newurlstr .= $array[$i] . "&";
    }
   }
   $this->urlstr = $newurlstr;
}

function get_count()
{
   if( $this->pagecount < 1 )
   {
    $this->pagecount = 1;
   }
}

// 初始化数据
function init()
{
   $this->get_urlstr();
   $this->pagecount = ceil( $this->recordcount / $this->pagesize );
   $this->get_count();
   $this->curpage = $this->chk_page( $this->curpage );
}

// 显示按钮: 总计29条记录 当前 1/3 页 首页 上一页 下一页 尾页 跳转到 页
function pageMenu()
{
   $this->init();
   $myurl = $this->myurl . "?" . $this->urlstr;
   $pagestring = "";
   $pagestring .= "<table border='0' cellspacing='0' cellpadding='0' width='100%'>\n <tr height='25'>\n";
   $pagestring .= " <td></td>\n";
   $pagestring .= " <td bgcolor='#80BDCB' align='right'>";
   $pagestring .= "总计 ".$this->recordcount." 条记录当前 ".$this->curpage."/".$this->pagecount." 页";
  
   if( $this->curpage == 1){
    $pagestring .= "首页 上一页";
   }
   else{
    $pagestring .= "<a href='".$myurl."page=1' class='chkpage'>首页</a> <a href='".$myurl."page=".($this->curpage-1)."' class='chkpage'>上一页</a>";
   }
   if( ( $this->curpage == $this->pagecount ) || ( $this->pagecount == 1 ) ){
    $pagestring .= " 下一页 尾页";
   }
   else{
    $pagestring .= " <a href='".$myurl."page=".($this->curpage+1)."' class='chkpage'>下一页</a> <a href='".$myurl."page=".$this->pagecount."' class='chkpage'>尾页</a>";
   }
  
   $pagestring .= "跳转到\n <select name=\"chg_go\" onchange=\"window.location.href='".$myurl."page='+this.value;\">\n";
   for($a=1;$a<=$this->pagecount;$a++){
    if( $a == $this->curpage ){
     $pagestring .= "   <option value=\"".$a."\" selected>".$a."</option>\n";
    }
    else{
     $pagestring .= "   <option value=\"".$a."\">".$a."</option>\n";
    }
   }
   $pagestring .= " </select>\n 页</td>\n</tr>\n</table>";
   print ($pagestring);
}
}
?>

发帖:2008-11-18 10:41:00
  鲜花(0)  鸡蛋(0)
 zunjie2199 帅哥哟,离线,有人找我吗?
  
  
  等 级:初出江湖
  积 分:202
  专家分:0
  提问帖:0/0
  回答帖:0
  总帖数:2
  经验值:52
  注 册:2008-11-21
给zunjie2199发送一个短消息 把zunjie2199加入好友 查看zunjie2199的个人资料 搜索zunjie2199在PHP编程论坛的所有贴子  引用回复这个贴子 回复这个贴子2

发贴心情 

还用php4写 要是改为php5 就好了
发帖:2008-11-21 8:44:00
 shuxian 帅哥哟,离线,有人找我吗?
  
  
  等 级:初出江湖
  积 分:167
  专家分:20
  提问帖:0/0
  回答帖:4
  总帖数:14
  经验值:70
  注 册:2008-11-18
给shuxian发送一个短消息 把shuxian加入好友 查看shuxian的个人资料 搜索shuxian在PHP编程论坛的所有贴子  引用回复这个贴子 回复这个贴子3

发贴心情 

呵呵,就先那样写了,要不你写一下?
发帖:2008-11-21 13:00:00
 xiaogggg 帅哥哟,离线,有人找我吗?
  
  
  等 级:初出江湖
  积 分:222
  专家分:10
  提问帖:3/2
  回答帖:3
  总帖数:17
  经验值:85
  注 册:2008-11-17
给xiaogggg发送一个短消息 把xiaogggg加入好友 查看xiaogggg的个人资料 搜索xiaogggg在PHP编程论坛的所有贴子 引用回复这个贴子 回复这个贴子4

发贴心情 

太长了啊,还是短一点好
发帖:2008-11-21 15:44:00

本主题贴数4,分页:[返回帖子列表] [上一页] [1] [下一页]
 *快速回复:[分享]php的分页显示  [ 回帖是一种美德 :) ]
会员账号 用户名    还没注册?    密码    忘记密码?
内容
  • HTML标签: 不可用
  • UBB标签: 可用
  • 贴图标签: 可用
  • 多媒体标签:可用
  • 表情字符转换:可用
  • 上传图片:不可用
  • 最多15KB
  • 点击表情图即可在帖子中加入相应的表情
                                
    邮件回复 显示签名   [Ctrl+Enter直接提交贴子]

    管理选项锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告