当前位置:Gxlcms > PHP教程 > 这个分页哪里写的不对?明明是显示5页为什么显示所有的?

这个分页哪里写的不对?明明是显示5页为什么显示所有的?

时间:2021-07-01 10:21:17 帮助过:4人阅读

那个shoupage明明是设置的5啊 为什么还是显示所有的页 而且我把shoupage的值随便改还是显示所有的 没变化

";
    echo '
  • '.$page.'/'.$pagenum.'页|
  • '; if($page==1){ echo '
  • 首页|
  • '; echo '
  • 上一页|
  • '; }else{ echo '
  • 首页|
  • '; echo '
  • 上一页|
  • '; } if($pagenum>$shoupage){ if($page>$pageoffset){ $start=$page-$pageoffset; $end=$pagenum>$page+$pageoffset?$page+$pageoffset:$pagenum; }else{ $start=1; $end=$pagenum>$shoupage?$shoupage:$pagenum; } if($page+$pageoffset>$pagenum){ $start=$start-($page+$pageoffset-$end); } } echo ''; echo '
      '; $shoupage=5; $pageoffset=($shoupage-1)/2; $start=1; $end=$pagenum; for($i=$start;$i<=$end;$i++){ echo '
    • '.($i).'
    • '; } echo '
    '; echo ''; if($page==$pagenum){ echo '
  • |下一页|
  • '; echo '
  • 尾页|
  • '; }else{ echo '
  • |下一页|
  • '; echo '
  • 尾页|
  • '; } echo ''; echo ''; }; ?>

    回复内容:

    那个shoupage明明是设置的5啊 为什么还是显示所有的页 而且我把shoupage的值随便改还是显示所有的 没变化

    ";
        echo '
  • '.$page.'/'.$pagenum.'页|
  • '; if($page==1){ echo '
  • 首页|
  • '; echo '
  • 上一页|
  • '; }else{ echo '
  • 首页|
  • '; echo '
  • 上一页|
  • '; } if($pagenum>$shoupage){ if($page>$pageoffset){ $start=$page-$pageoffset; $end=$pagenum>$page+$pageoffset?$page+$pageoffset:$pagenum; }else{ $start=1; $end=$pagenum>$shoupage?$shoupage:$pagenum; } if($page+$pageoffset>$pagenum){ $start=$start-($page+$pageoffset-$end); } } echo ''; echo '
      '; $shoupage=5; $pageoffset=($shoupage-1)/2; $start=1; $end=$pagenum; for($i=$start;$i<=$end;$i++){ echo '
    • '.($i).'
    • '; } echo '
    '; echo ''; if($page==$pagenum){ echo '
  • |下一页|
  • '; echo '
  • 尾页|
  • '; }else{ echo '
  • |下一页|
  • '; echo '
  • 尾页|
  • '; } echo ''; echo ''; }; ?>

    @Eapen 他已经说出了原因。

    这边给出一个我写的demo,复制粘贴即可运行。

    若是消化了,你也就学会了分页,若还有不知道的可随时问我:

    $np=@$_GET['page']; // 获取当前页
    
    /*
    * 设置要显示的页数。
    
    * 例如显示 5 页
    
    * 为了合理的显示,需要设置一个偏移量:你肯定想得到偏移量会是:(5-1)/2=2;----》 5 6 nowpage 8 9
    
    * 那如果显示的是6页该怎么办? 
    
    * 该不会也是 (6-1)/2 吧! 所以你其实需要自己手动算一下的,只要凑成6页即可:3+1+2=6 所以设: $offset_forward=3   $offset_forward=2  1 表示当前页 --->5 6 7 nowpage 9 10 
    */
    $dp=12;             //显示多少页
    $offset_forward=6;  // 前面显示多少条记录
    $offset_after=5;    // 后面显示多少天记录
    

    /---分页函数---/
    function display_data($np,$dp,$offset_forward,$offset_after){

      $length=1000;     // 设置记录数
      if ($length==0)
        {
          echo '没有数据!';
        }
      $total_page=ceil($length/$dp);  // 计算总页数。 
    
      /*---对页数进行限制:必须大于0 小于总页数---*/
      if (!isset($np))
       {
          $np=1;
       }else{
          if ($np<1)
           {
              $np=1;
           } 
          if ($np>$total_page)
           {
               $np=$total_page;
           }
       }
       $btn="";
       $btn.="首页";
       $btn.="上一页";
       if ($total_page<=$dp) // 若是总页数小于要显示的分页数 ...
         {
             $start_page=1;
             $end_page=$total_page;
             for ($i=$start_page;$i<=$end_page;++$i)
               {
                   $btn.="$i"; 
               }
         }else{ // 若是总页数大于要显示的分页数 ...
             if ($np<=$dp) // 若是当前页小于等于要显示的页数..
              {
                 $start_page=1;
                 $end_page=$dp;
                 for ($i=$start_page;$i<=$end_page;++$i)
                   {
                     $btn.="$i"; 
                   }
               }else{ // 若是当前页大于要显示的页数..
                  if ($np+$offset_forward>$total_page) //若是当前页加上偏移量会大于总页数 ....
                    {
                          $start_page=$total_page-$offset_forward-$offset_after; 
                          $end_page=$total_page;
                          for ($i=$start_page;$i<=$end_page;++$i)
                              {
                                 $btn.="$i"; 
                              }
                    }else{ //若是当前页加上偏移量会小于总页数 ....
                        $start_page=$np-$offset_after;
                        $end_page=$np+$offset_forward;
                         for ($i=$start_page;$i<=$end_page;++$i)
                            {
                               $btn.="$i"; 
                            }
                    }
               }
         }
        $btn.="下一页";
        $btn.="尾页";
        echo $btn;
    
        /*---给当前页添加样式--*/
        echo <<

    EOT;

    }
    display_data($np,$dp,$offset_forward,$offset_after); // 执行分页逻辑

    ?>

    啊 分页写的好复杂。。。

    如果只是想问为什么全都显示出来的话

    问题出在30 31行

    $start=1;
    $end=$pagenum;

    去掉这两行就可以了。。虽然还是有其他问题

    人气教程排行