<?php/**
** lino的通用php分页类。(仿Google样式)
** 只需提供记录总数与每页显示数两个参数。(已附详细使用说明.....)
** 无需指定URL,链接由程序生成。方便用于检索结果分页。**/class Pager{
var $url;
var $countall;
var $page;
var $thestr;
var $backstr;
var $nextstr;
var $pg;
//构造函数,实例化该类的时候自动执行该函数
function Pager($countall,$countlist){
@$this->pg=sprintf("%d",$_GET["pg"]);
//保证pg在未指定的情况下为从第1页开始
if ($this->pg==0){
$this->pg=1;
}
if (!isset($this->pg)){
$this->pg=1;
}
//记录数与每页显示数不能整队时,页数取余后加1
$this->countall = $countall;
if ($this->countall%$countlist!=0){
$this->page=sprintf("%d",$this->countall/$countlist)+1;
}
else{
$this->page=$this->countall/$countlist;
}//得到当前的URL。具体实现请看最底部的函数实体
$this->url = Pager::getUrl();//生成12345等数字形式的分页。
if ($this->page<=10){
for ($i=1;$i<$this->page+1;$i++){
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg);
}
}
else{
if ($this->pg<=5){
for ($i=1;$i<10;$i++){
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg);
}
}
else{
if (6+$this->pg<=$this->page){
for ($i=$this->pg-4;$i<$this->pg+6;$i++){
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg); 
}
}
else{
for ($i=$this->pg-4;$i<$this->page+1;$i++){
$this->thestr=$this->thestr.Pager::makepg($i,$this->pg);
}}
}
}
//生成上页下页等文字链接
$this->backstr = Pager::gotoback($this->pg);
$this->nextstr = Pager::gotonext($this->pg,$this->page);
echo ($this->backstr.$this->thestr.$this->nextstr." 共".$this->countall." 条,每页".$countlist."条,分".$this->page."页");
}
//生成数字分页的辅助函数
function makepg($i,$pg){
if ($i==$pg){
return " <font color=red><b>".$i."</b></font>";
}
else{
return " <a href=".Pager::replacepg($this->url,5,$i).">".$i."</a>";
}
}
//生成上一页等信息的函数
function gotoback($pg){
if ($pg-1>0){
return $this->gotoback=" <a href=".Pager::replacepg($this->url,3,0).">首页</a> <a href=".Pager::replacepg($this->url,2,0).">上页</a>";
}
else{
return $this->gotoback="";
}}
//生成下一页等信息的函数
function gotonext($pg,$page){
if ($pg < $page){
return " <a href=".Pager::replacepg($this->url,1,0).">下页</a> <a href=".Pager::replacepg($this->url,4,0).">尾页</a>";
}
else{
return "";
}
}//处理url中$pg的方法,用于自动生成pg=x
function replacepg($url,$flag,$i){
if ($flag == 1){ 
$temp_pg = $this->pg;
return str_replace("pg=".$temp_pg,"pg=".($this->pg+1),$url);
}
else if($flag == 2) {
$temp_pg = $this->pg;
return str_replace("pg=".$temp_pg,"pg=".($this->pg-1),$url);
}
else if($flag == 3) {
$temp_pg = $this->pg;
return str_replace("pg=".$temp_pg,"pg=1",$url);
}
else if($flag == 4){
$temp_pg = $this->pg;
return str_replace("pg=".$temp_pg,"pg=".$this->page,$url);
}
else if($flag == 5){
$temp_pg = $this->pg;
return str_replace("pg=".$temp_pg,"pg=".$i,$url);
}
else{
return $url;
}
}
//获得当前URL的方法
function getUrl(){ 
$url="http://".$_SERVER["HTTP_HOST"];if(isset($_SERVER["REQUEST_URI"])){ 
$url.=$_SERVER["REQUEST_URI"]; 

else{ 
$url.=$_SERVER["PHP_SELF"]; 
if(!empty($_SERVER["QUERY_STRING"])){ 
$url.="?".$_SERVER["QUERY_STRING"]; 


//在当前的URL里加入pg=x字样
if (!ereg("(pg=|PG=|pG=|Pg=)", $url)){
if (!strpos($url,"?")){
$url = $url."?pg=1";
}
else{
$url = $url."&pg=1";
}

return $url; 

}
?>
<?php//*********************************************************
//不少朋友问我这个PHP分页类怎么用。我写得再详细一些供大家参考。
//请您把前面的代码保存为pager.php
    //require_once("config/pager.php"); //引入我放在config目录下的pager.php
    $pg = @$_REQUEST["pg"]; //接收当前的页码。
    $pagelist = 5; //设定每页显示10条记录
    $limitFrom = 0; //开始limit的数,用于当前pg(即页码)小于2的场合。此时sql的语句为..... limit 0,10
    if (!isset($pg))
{                //如果接收的页码为空,说明当前为第一页。
         $pg = 1;    //把页码设定为第一页
    }
    if ($pg>1){ //当页码大于1 的时候,需要设定limitFrom。此时sql可能为 limit 30,10
         $limitFrom = $pagelist*($pg-1);    //这是个计算limitFrom小算法,仔细看看就能明白了。
    }else{
         $limitFrom = 0;
    }    //基本参数已经设置完成了,现在从数据库中取出总记录数
    $sql = "select count(*) as total from admin";    //统计记录总数
    mysql_select_db($database_conn) or dir("打开数据库失败!");$res = mysql_fetch_array(mysql_query($sql));
    $countAll = $res['total'];    //这里可以是你显示列表的地方,不关分页的事情了。
    //提示:显示列表的SQL语句可以是这样写:
    // $sql = "select * from admin order by id desc limit $limitFrom,$pagelist";
   $sql = "SELECT * FROM `admin` ORDER BY id desc LIMIT ".$limitFrom.",".$pagelist;
   // echo $sql;
$rs=mysql_query($sql);
while($row=mysql_fetch_assoc($rs))
{
   echo "sag=".$row["username"]."<br>";
}
     ?>
   <table border="1"> <tr><td><?php $pager = new Pager($countAll,$pagelist);?></td></tr></table>

解决方案 »

  1.   

    LZ的程序写得不错哈,赞一个,看见一个小问题
    mysql_select_db($database_conn) or dir("打开数据库失败!");
    ----------------->
    mysql_select_db($database_conn) or die("打开数据库失败!");
      

  2.   

    分页其实还是很简单的.
    <?php
    require('Common.php');
    /**
     * Enter description here...
     *
     */
    class Common_List
    {
    var  $common;
        /**
         * Enter description here...
         *
         */
    function __construct(){
    $this->common=& new Common();
    }
    /**
     * Enter description here...
     *
     * @param unknown_type $page_size
     * @param unknown_type $page_no
     * @param unknown_type $count
     * @param unknown_type $url
     * @param unknown_type $parm
     * @param unknown_type $template
     * @return unknown
     */
    function general_list($page_size=15,$page_no=1,$count,$url,$parm=array(),$template="list/list.php"){
    //总页数 $num = ceil($count/$page_size); if($num > 10){
    $priv_10 = true;
    $next_10 = true;
    }else {
    $priv_10 = false;
    $next_10 = false;
    }
    $big_page =ceil($num/10);
    $current_big_page = ceil($page_no/10);
    //url参数构造
    $urlparm = $this->CreateUrlParm($parm); $p =array('count'=>$count,'current_big_page'=>$current_big_page,'big_page'=>$big_page,'num'=>$num,'priv_10'=>$priv_10,'next_10'=>$next_10,'urlparm'=>$urlparm,'page_no'=>$page_no,'url'=>$url); $content = $this->common->include_fetch($template,$p); return $content;
    }
    /**
      * 构造参数
      *
      * @param unknown_type $var
      * @return unknown
      */
    function CreateUrlParm($var){
    $urlparm = "";
    if(count($var) > 0){
    foreach ($var as $key => $value){
    $urlparm = $urlparm."&".$key."=".$value;
    }
    }
    return $urlparm;
    }
    }?>页面元素:
    <table  border="0" cellpadding="0" cellspacing="0" style="text-decoration:none">
        <tr>
            <td align="right"><?php 
            if($priv_10){
             if($current_big_page < 2){
        ?>
                <a style="text-decoration:none" href="<?php echo $url?>?page_no=1<?=$urlparm?>">
                <?php        
             }else {
          ?>
                <a style="text-decoration:none" href="<?php echo $url?>?page_no=<?=($current_big_page-2)*10+1?><?=$urlparm?>">
                <?php 
             }
        ?>
                &lt;&lt;前10頁</a>
                <?php
            }
        ?>
                <span>&nbsp;&nbsp; &nbsp;&nbsp;</span>
                <?php 
                if($next_10){
                 if($current_big_page< ($big_page-1)){
        ?>
                <a style="text-decoration:none" href="<?php echo $url?>?page_no=<?=$current_big_page*10+1?><?=$urlparm?>&">
                <?php
                 }else {
        ?>
                <a style="text-decoration:none" href="<?php echo $url?>?page_no=<?=($big_page-1)*10+1?><?=$urlparm?>">
                <?php
                 }
        ?>
                后10頁&gt;&gt; </a>
                <?php
                }
         ?>
                <?php 
                $start = ($current_big_page-1)*10 + 1;
                $end = ($current_big_page)*10+1;            if($end > ($num+1)){
                 $end = $num+1;
                }            for($i=$start;$i< $end;$i++){
                 if($i == $page_no){
         ?>
                <span style="font-size:14">
                [<?php echo $i?>]
                </span>
                <?php }else {?>
                <a style="text-decoration:none" href="<?php echo $url?>?page_no=<?php echo $i?><?php echo $urlparm?>">
                <?php echo $i?>
                </a>
                <?php 
                }
                }
        ?>
            </td>
        </tr>
    </table>
      

  3.   

    http://codebin.cn/16
    我的分页类,分享给你。写的一般,用用就好了
      

  4.   

    一般用jquery 包装一下,还可以把分页整成局部刷新的。
      

  5.   

    有空看看我做的分页的例子。
    http://61.234.152.100/interactive/userInfo.php这里出示一下,我封装的类中关于分页的几个方法。。 /**
     *  指定分页 
     */
    function pnum($page,$rows_num,$rows_per_page=20,$offset=0) {
    if($rows_num)      $this->rows_num      = $rows_num;
    if($rows_per_page) $this->rows_per_page = $rows_per_page;
    if($offset)        $this->offset        = $offset;
    if(!$page)         $page =1;
    $this->page = $page;
    $this->pages_num = ceil(($this->rows_num-$this->offset)/$this->rows_per_page);
    Return $this->pages_num;
    } /* 进行分页处理 */
    function page($sql,$rs_name='') {
    switch($this->dbtype) {
    case 'mysql':
    $sql = $sql." limit ".(($this->page-1)*$this->rows_per_page+$this->offset).", ".$this->rows_per_page;


    return $this->rs($sql,$rs_name);
    break;
    }
    } /**
     * * 输出分页条.
     *
     * @param 分页的格式类型 $style
     * @param 显示多少个分页标签. $show_page_num
     */
    function nav(  $style='nav1',  $show_page_num=15 ) {
    switch( $style ) {


    /* 第四类分页 */
    case 'nav4':
    if($show_page_num) $this->show_page_num = $show_page_num;
    $page          = $this->page;
    $show_page_num = $this->show_page_num;
    $pages_num     = $this->pages_num;
    $param         = $this->params;
    if (!$pages_num) $pages_num =1;
    $nav = "<a href='?$param' title='1页'><font face=webdings>9</font></a> ";

    if ($page>1) {
    $nav .="<a href='?$param&page=".($page-1)."' title='".($page-1)."页'><font face=webdings>7</font></a> ";
    }else {
    $nav .= "<font face=webdings>7</font> ";
    }
    if ($page<=2||$pages_num<$show_page_num) {
    $begin=1;
    } elseif ($page>$pages_num-$show_page_num+2) {
    $begin = $pages_num-$show_page_num+1;
    }else {
    $begin = $page-2;
    }
    if ($pages_num<$show_page_num) {
    $end =$pages_num;
    }else {
    $end = $begin+$show_page_num-1;
    }

    for ($i=$begin;$i<=$end;$i++) {
    $nav .=($page!=$i)?"<a href='?$param&page=$i' title='第{$i}页' class=nav> $i </a> ":"<font color='#000000'><b> <U>$i</U> </b></font> ";
    }

    if ($page<$pages_num) {
    $nav .="<a href='?$param&page=".($page+1)."' title='第".($page+1)."页'><font face=webdings>8</font></a> ";
    }else {
    $nav .= "<font face=webdings>8</font> ";
    }
     $nav .="<a href='?page=$pages_num&$param' title='尾页'><font face=webdings>:</font></a>  <b><font color='#74A2DE'>".$pages_num."</font>页</b>";
    break;

    //91061 2008版分页.
    case 'nav5' :
    if($show_page_num) $this->show_page_num = $show_page_num;
    $page          = $this->page;
    $show_page_num = $this->show_page_num;
    $pages_num     = $this->pages_num;
    $param         = $this->params;
    $mid = ceil(($show_page_num+1)/2);
    $nav = '';
    if($page<=$mid ) {
    $begin = 1;
    }else if($page > $pages_num-$mid) {
    $begin = $pages_num-$show_page_num+1;
    }else {
    $begin = $page-$mid+1;
    }

    /**
     * patch for param; 保留原有的查询条件.
     * */
    $param = $_SERVER["QUERY_STRING"];
    $pattern = "/&page=(\d+)/i";
    $replacement = "";
    $param =  preg_replace($pattern, $replacement, $param);

    if($begin<=0) $begin = 1;
    //if($begin!=1) $nav .= "<li><a class='page_num' title='到首页' href='?$param&page=1'>首页</a></li>";
    //<li><a class="page_flip2" title="上一页" href="#">上一页</a></li>
    if($page<$pages_num)   $nav .= "<li> <a href='?$param&page=".($page+1)."' title='".($page+1)."页' class ='page_next'></a> </li> ";
    $end = ($begin+$show_page_num>$pages_num)?$pages_num+1:$begin+$show_page_num;
    for($i=$end-1; $i>=$begin; $i--) {
    $nav .=($page!=$i)?"<li><a href='?$param&page=$i' class = 'page_num'  title='{$i}页'>$i</a></li>":"<li><a href='?$param&page=$i' class = 'page_sele'  title='{$i}页'>$i</a></li>";
    }
         if($page>1)   $nav .= "<li> <a href='?$param&page=".($page-1)."' title='".($page-1)."页' class='page_pre'></a> </li>";
    break;


    case 'nav6' :
    if($show_page_num) $this->show_page_num = $show_page_num;
    $page          = $this->page;
    if($page < 0)  $page = 1;

    $show_page_num = $this->show_page_num;
    $pages_num     = $this->pages_num;
    $param         = $this->params;
    $mid = ceil(($show_page_num+1)/2);
    $nav = '';
    if($page<=$mid ) {
    $begin = 1;
    }else if($page > $pages_num-$mid) {
    $begin = $pages_num-$show_page_num+1;
    }else {
    $begin = $page-$mid+1;
    }
    $end = ($begin+$show_page_num>$pages_num)?$pages_num+1:$begin+$show_page_num;



    $lastPage =$page -1;
    $nextPage = $page +1;


    $param = $_SERVER["QUERY_STRING"];
    $pattern = "/&page=(\d+)/i";
    $replacement = "";
    $param =  preg_replace($pattern, $replacement, $param);


    $nav = "<div class='page_cont'>";
    $nav .= "<span>共$pages_num 页</span>"; //共有多少页。

    //上一页与首页处理
    if($page <= 1){
         $nav .= "<span class='nextprev'>首  页</span>";
            $nav .= "<span class='nextprev'>上一页</span>";
    }else{
    $nav .= "<a href=\"?$param&page=1\" class='nextprev'   >首  页</a>";
       $nav .= "<a href=\"?$param&page=$lastPage\" class='nextprev'  >上一页</a>";
    }

    //遍历分页。
     for($i=$begin; $i<$end; $i++) {
     
    $nav .=($page!=$i)?"<a href='?$param&page=$i'   title='第{$i}页'>$i</a>":"<span class = 'page_sele'  title='第{$i}页'>$i</span>";
    }

        
    if( $page < $pages_num ){
    $nav .= "<a href=\"?$param&page=$nextPage\" class='nextprev'  >下一页</a>";
        $nav .= "<a href=\"?$param&page=$pages_num\" class='nextprev'   >尾页</a>";

    }
    else{  
        $nav .= "<span class='nextprev'>下一页</span>";
       $nav .= "<span class='nextprev'>尾页</span></div>";

    }

        
    break;

    /*直转 */
    case 'listjump':
    $nav = '
     <select onchange="location.href=\'?'.$this->params.'&page=\'+this.value;">
    <script language="JavaScript">
    <!--
    for(i=1; i<='.$this->pages_num.'; i++) {
    document.write("<option value="+i+(i=='.$this->page.'?" selected":"")+">"+i+"</option>");
    }
    //-->
    </script>
    </select> 页';
    break;
    case 'inputjump':
    return "<script language='javascript'>function pagejump(){if (document.all.pagejmp.value == ''|| document.all.pagejmp.value < 0 ) {document.all.pagejmp.focus();alert('转页搿?;return false;}else{this.location.href = '?page='+document.all.pagejmp.value+'&".$this->params."'; target = '_self';}}</script>  转 <input name=pagejmp size=2 onkeydown='if(window.event.keyCode==13) pagejump();'> 页 <img src=".gd('user')."images/go1.gif align=absmiddle onclick='pagejump();' style='cursor:hand;'>";
    break;
    case 'imagejump':
    return "<script language='javascript'>function pagejump(){if (document.all.pagejmp.value == ''|| document.all.pagejmp.value < 0 ) {document.all.pagejmp.focus();alert('转页搿?;return false;}else{this.location.href = '?page='+document.all.pagejmp.value+'&".$this->params."'; target = '_self';}}</script>  转 <input name=pagejmp size=4 onkeydown='if(window.event.keyCode==13) pagejump();' style='border:1px solid #424242; height:16px;'> 页 <img src=".gd('magzine')."images/go.gif align=absmiddle onclick='pagejump();' style='cursor:hand;' width=25 height=17>";
    break;
    default:
    $nav = '';
    }
    return $nav;
    }
    }