下面是一段PHP分页代码,可以正常运行,$rst =  mysql_query($qry) or die(mysql_error());
        $numrows    =   mysql_num_rows($rst);
        $qry         .= " limit $starting, $recpage"; //$starting开始数,$recpage每页几条记录
        $this->result   =   mysql_query($qry) or die(mysql_error());
        $next       =   $starting+$recpage;
        $var        =   ((intval($numrows/$recpage))-1)*$recpage;
        $page_showing   =   intval($starting/$recpage)+1;
        $total_page =   ceil($numrows/$recpage);     $norepeat = 4;
    $j = 1;
    for($i=$page_showing; $i>1; $i--){
        $fpreviousPage = $i-1;
        $pagee = ceil($fpreviousPage*$recpage)-$recpage;
        $anch = "<a href='#' >$fpreviousPage</a>".$anch;
        if($j == $norepeat) break;
        $j++;
    }
    $anc .= $anch;  // 前几条    $anc .= $page_showing;   //当前页码    $j = 1;
    for($i=$page_showing; $i<$total_page; $i++){
        $fnextPage = $i+1;
        $pagee = ceil($fnextPage*$recpage)-$recpage;
        $anc .= "<a href='#' >$fnextPage</a>"; //后几条
        if($j==$norepeat) break;
        $j++;
    }
但是显示的规律如下,只能显示当前页面的前后四个页码。(1) | 2 | 3 | 4 | 5   // (1) 是当前页码
2 | 3 | 4 | 5 | (6) | 7 | 8 | 9 | 10  // (6) 是当前页码
12 | 13 | 14 | 15 | (16) // (16)是当前页码, 最后一页如何增加判断,使页码小于5时,同样可以显示9个页码?下面是我要的效果:(1) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9  // (1) 是当前页码,显示9个页码
1 | (2) | 3 | 4 | 5 | 6 | 7 | 8 | 9  // (2) 是当前页码,显示9个页码
2 | 3 | 4 | 5 | (6) | 7 | 8 | 9 | 10  // (6) 是当前页码,这里和前面的一样
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | (16) // (16) 是当前页码, 最后一页,显示9个页码同时还应该注意当页码少于9的情况。(比如只有6页,这样分页只显示6.)
谢谢。

解决方案 »

  1.   

    你的代码好乱,所以没在你的代码上改
    /**
     * $count 总页数
     * $page 当前页号
     * $num 显示的页码数
     **/
    function pagebar($count, $page, $num) {
      $num = min($count, $num); //处理显示的页码数大于总页数的情况
      if($page > $count || $page < 1) return; //处理非法页号的情况
      $end = $page + floor($num/2) <= $count ? $page + floor($num/2) : $count; //计算结束页号
      $start = $end - $num + 1; //计算开始页号
      if($start < 1) { //处理开始页号小于1的情况
        $end -= $start - 1;
        $start = 1;
      }
      for($i=$start; $i<=$end; $i++) { //输出分页条,请自行添加链接样式
        if($i == $page) echo "[$i]";
        else echo " $i ";
      }
      echo "($page)<br />";
    }for($i=1; $i<=50; $i++)
    pagebar(50, $i, 9);
    效果
    [1] 2 3 4 5 6 7 8 9 (1)
    1 [2] 3 4 5 6 7 8 9 (2)
    1 2 [3] 4 5 6 7 8 9 (3)
    1 2 3 [4] 5 6 7 8 9 (4)
    1 2 3 4 [5] 6 7 8 9 (5)
    2 3 4 5 [6] 7 8 9 10 (6)
    3 4 5 6 [7] 8 9 10 11 (7)
    4 5 6 7 [8] 9 10 11 12 (8)
    5 6 7 8 [9] 10 11 12 13 (9)
    6 7 8 9 [10] 11 12 13 14 (10)
    7 8 9 10 [11] 12 13 14 15 (11)
    8 9 10 11 [12] 13 14 15 16 (12)
    9 10 11 12 [13] 14 15 16 17 (13)
    10 11 12 13 [14] 15 16 17 18 (14)
    11 12 13 14 [15] 16 17 18 19 (15)
    12 13 14 15 [16] 17 18 19 20 (16)
    13 14 15 16 [17] 18 19 20 21 (17)
    14 15 16 17 [18] 19 20 21 22 (18)
    15 16 17 18 [19] 20 21 22 23 (19)
    16 17 18 19 [20] 21 22 23 24 (20)
    17 18 19 20 [21] 22 23 24 25 (21)
    18 19 20 21 [22] 23 24 25 26 (22)
    19 20 21 22 [23] 24 25 26 27 (23)
    20 21 22 23 [24] 25 26 27 28 (24)
    21 22 23 24 [25] 26 27 28 29 (25)
    22 23 24 25 [26] 27 28 29 30 (26)
    23 24 25 26 [27] 28 29 30 31 (27)
    24 25 26 27 [28] 29 30 31 32 (28)
    25 26 27 28 [29] 30 31 32 33 (29)
    26 27 28 29 [30] 31 32 33 34 (30)
    27 28 29 30 [31] 32 33 34 35 (31)
    28 29 30 31 [32] 33 34 35 36 (32)
    29 30 31 32 [33] 34 35 36 37 (33)
    30 31 32 33 [34] 35 36 37 38 (34)
    31 32 33 34 [35] 36 37 38 39 (35)
    32 33 34 35 [36] 37 38 39 40 (36)
    33 34 35 36 [37] 38 39 40 41 (37)
    34 35 36 37 [38] 39 40 41 42 (38)
    35 36 37 38 [39] 40 41 42 43 (39)
    36 37 38 39 [40] 41 42 43 44 (40)
    37 38 39 40 [41] 42 43 44 45 (41)
    38 39 40 41 [42] 43 44 45 46 (42)
    39 40 41 42 [43] 44 45 46 47 (43)
    40 41 42 43 [44] 45 46 47 48 (44)
    41 42 43 44 [45] 46 47 48 49 (45)
    42 43 44 45 [46] 47 48 49 50 (46)
    42 43 44 45 46 [47] 48 49 50 (47)
    42 43 44 45 46 47 [48] 49 50 (48)
    42 43 44 45 46 47 48 [49] 50 (49)
    42 43 44 45 46 47 48 49 [50](50)
      

  2.   

    给你个我自己在用的翻页函数:
    //翻页程序,分页
    //翻页变量定义
    global $page,$firstcount,$pagenav,$_SERVER,$displaypg,$grouppage;
    $sqltemp="";//查询条件
    $displaypg=10;//每页显示记录数,一页显示10条记录
    $grouppage=9;//每组显示页数,你的9页可以在这里设置
    $mainsql="select count(*) as rectotal from dian where  zhungtai=2 ".$sqltemp;
    $fsql->query($mainsql);
    if($fsql->next_record()){
    $total=$fsql->f('rectotal');//总记录数
    }else{
    $total=0;
    }
    $lastpg=nx_page4($total,$displaypg); 
    $pagestr=$firstcount.",".$displaypg;
    //从$firstcount开始显示$displaypg条
    //$pagenav,翻页条,插入到需要显示翻页的地方
    //你自己的主程序
    $sql="select dianid,dname2 from dian where zhungtai=2 ".$sqltemp." order by uptime desc limit ".$pagestr;
    $fsql->query($sql);
    while($fsql->next_record()){
    $dianid_cur=$fsql->f('dianid');
    }
    echo $pagenav;//翻页函数
    function nx_page4($total,$displaypg=20){ 
    global $page,$firstcount,$pagenav,$_SERVER,$grouppage;  if($page=="")$page=1; 
    $url=request_uri();
    $parse_url=parse_url($url); 
    $url_query=$parse_url["query"]; 
    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($total/$displaypg); //最后页,也是总页数 
    $page=min($lastpg,$page); 
    $prepg=$page-1; //上一页 
    $nextpg=($page==$lastpg ? 0 : $page+1); //下一页 
    $firstcount=($page-1)*$displaypg;
    if($firstcount<0){
    $firstcount=0;
    } //分组显示,$grouppage:每组显示的页数
    if($lastpg<=$grouppage){
    $group_firstpage=1;//分组显示的第一页
    $group_lastpage=$grouppage;//分组显示的最后一页
    $pregroup=0;//上一组
    $nextgroup=$grouppage+1;
    }else{
    $group_firstpage=(ceil($page/$grouppage)-1)*$grouppage+1;
    $group_lastpage=$group_firstpage+$grouppage-1;
    $pregroup=$group_firstpage-$grouppage;//上一组
    $nextgroup=$group_firstpage+$grouppage;
    }
    $group_lastpage=min($lastpg,$group_lastpage); //开始分页导航条代码: 
    $pagenav="<label style='font-size:13px;color:#828282;height:30px;padding-top:10px'>";
    if($lastpg<$grouppage){
    $pagenav.="页码:";
    } if($lastpg<=1){
    //如果只有一页则跳出函数:
    $pagenav="";
    return false;
    /*
    if($total>0){
    $pagenav.="显示第<B>".($total?($firstcount+1):0)."</B>—<B>".min($firstcount+$displaypg,$total)."</B>条&nbsp;&nbsp;共".$total."条"; 
    return false;
    }else{
    $pagenav="";
    return false;
    }
    */
    }else{
    if($pregroup>0){
    $pagenav.="&nbsp;<a href='".$url."=1'><img src='/code/images/2arrow_l_on.gif'  border=0 title='首页'></a>&nbsp;"; 
    $pagenav.="&nbsp;<a href='".$url."=".$pregroup."'><img src='/code/images/1arrow_l_on.gif'  border=0 title='前".$grouppage."页'></a>";
    //else $pagenav.=" &nbsp;&nbsp;<img src='/code/images/1arrow_l_off.gif'  border=0 title='上一组'> "; 
    }
    //列出本组的页码: 
    //$pagenav.="&nbsp;&nbsp;"; 
    for($i=$group_firstpage;$i<=$group_lastpage;$i++){ 
    if($i==$page)
    $pagenav.="&nbsp;<FONT COLOR='#000000'><B>".$i."</B></FONT>";
    else 
    $pagenav.="&nbsp;<A HREF='".$url."=".$i."'><FONT COLOR='#0000FF'>[".$i."]</A></FONT>";

    if($nextgroup<=$lastpg){
    $pagenav.="&nbsp;<a href='".$url."=".$nextgroup."'><img src='/code/images/1arrow_r_on.gif'  border=0 title='后".$grouppage."页'></a> ";
    //$pagenav.="&nbsp;<a href='".$url."=".$lastpg."'><img src='/code/images/2arrow_r_on.gif'  border=0 title='末页'></a>";
    }
    //$pagenav.="&nbsp;&nbsp;共".$lastpg."页(".$displaypg."条/页)";
    if($total<101){
    $pagenav.="&nbsp;共<B>".$total."</B>家";
    }
    } $pagenav.="</label>"; return $lastpg;

    function request_uri()
    {
    if (isset($_SERVER['REQUEST_URI']))
    {
    $uri = $_SERVER['REQUEST_URI'];
    }
    else{
    if (isset($_SERVER['argv'])){
    if($_SERVER['argv'][0]!=""){
    $uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['argv'][0];
    }else{
    $uri = $_SERVER['PHP_SELF'];
    }
    }else{
    if($_SERVER['QUERY_STRING']!=""){
    $uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
    }else{
    $uri = $_SERVER['PHP_SELF'];
    }
    }
    }
    return $uri;
    }
      

  3.   

    我做过一种这种分页 只讲思路
    当前页和最大页做比较几种不同的情况
    生成一个PAGINATION的HTML 然后前台打印出这个HTML。