php 分页函数,带分页下拉跳转,可根据字段排序,可改变每页显示记录数

效果图: 可根据姓,名,年龄排序,右下角是下拉分页跳转 与改变每页显示的记录数:

 

<?php

  include ("connDB.php");
  session_start();
  /*
   * Pagenation:
   * defalut $page_num = 20                         // 默认每页显示 20 条记录
   * $page : the page to be display               // 显示数据页
   * $url  : the page call this function            // 调用页面
   */
 
  function pagenation($page_num=20,$page,$url,$SQL){
     // 定义三个全局变量,数据输出的页面会用到:
    global $rows,$result,$navigator;
   
    // 首先,取得所有的行数:
    $result_All=mysql_query($SQL);
    $total_rows=mysql_num_rows($result_All);   
  
     // 解析传过来的URL,取得操作的参数
     $url_string=parse_url($_SERVER["REQUEST_URI"]);
     $query_string=$url_string["query"];
     $page_string=explode('=',$query_string);
     $page_type=$page_string[0];                       // 传过来的变量  order[排序] , num[每页要显示的记录数], page_no[页数]
     $page=$page_string[1];                                // 对应值 asc , desc, 10-50, 页数
    
    
     // 如果是更改每页的记录数:将每页显示的记录数存进 session 里,页数归一
     if($page_type=="num") {
       $_SESSION["page_num"]=$page;
       $page=1;
     }
    
     // 如果已经有了,则取出来用
     if(isset($_SESSION["page_num"])) $page_num=$_SESSION["page_num"];
        
     /*
      * 对传过来的$page进行判断,是分页还是排序:
      * 升序与 降序:把条件存进 session里,分页时调用
      * 如果有多个条件,则用 switch 来判断
      */                   
     switch($page){
       case "aASC":            // 按年龄升序
         $_SESSION["order"]=" ORDER BY age ASC";
         break;
       case "aDESC":        // 按年龄降序
         $_SESSION["order"]=" ORDER BY age DESC";
         break;  
       case "lASC":            //  按姓升序
         $_SESSION["order"]=" ORDER BY lastname ASC";
         break;
       case "lDESC":         //  按姓降序
         $_SESSION["order"]=" ORDER BY lastname DESC";
         break;
       case "fASC":            //  按名升序
         $_SESSION["order"]=" ORDER BY firstname ASC";
         break;
       case "fDESC":           // 按名降序
         $_SESSION["order"]=" ORDER BY firstname DESC";
         break;
       // 分页或第一次查看:取得页数
       default:
        $page=(integer)($page);
     }
    
     // 如果没有给定 page 或 page不为整数[asc 或  desc], 则设为第一页: 从第一页开始计算
     if(!is_integer($page) ||!$page)
         $page=1;
    
     // Calculator Total pages:
     $total_pages=ceil($total_rows/$page_num);
    
     // 把条件加上去:如果是第一次查看,则 $_SESSION["order"]为空,不起作用
     $SQL.=$_SESSION["order"];
    
   
     // 计算有多少页:
     $start_num=$page_num * ($page-1);
    
     // 正式分页:
     $SQL.=" LIMIT $start_num,$page_num";
    
     print("SQL in pagenation is : ".$SQL."<BR><BR>");
    
     $result=mysql_query($SQL) or die(mysql_error());
     $rows=mysql_num_rows($result);


     // 输出导航代码 Navigator:
 
     // Check $total_page:      检查总页数,如果为 0 或为 1,则上一页下一页均为一
     if($total_pages==0 ||$total_pages==1){
      $Previous=1;
      $Next=1;
     }

     // Previous:  上一页
     ($page==1)?$Previous=1:$Previous=$page-1;

     // Next:         下一页
     ($page==$total_pages)?$Next=$total_pages:$Next=$page+1;
  
  
     // Display:    OK ,输出
     $All="$total_rows All ";
     $First="<a href=$url?page_no=1>First</a>";
     $Previous="<a href=$url?page_no=$Previous>Previous</a>";
     $Next="<a href=$url?page_no=$Next>Next</a>";
     $Last="<a href=$url?page_no=$total_pages>Last</a>";
     $Current=" Current: " .$page. "/" .$total_pages;
  
     // 下拉跳转功能 goToPage() 在 $url 页面定义,很简单
     $Goto="&nbspGOTO:<SELECT NAME=select_page onChange=goToPage(this.value)>";

     for($i=1;$i<=$total_pages;$i++){
       if($page==$i)
         $Goto.="<OPTION VALUE=$i selected>$i";
       else
         $Goto.="<OPTION VALUE=$i>$i";
     }  
     $Goto.="</SELECT>";
    
    
     // 可以选择每页显示多少条纪录:changeNum() 在调用分页函数的页面里定义:
     $perPage=" Rcds/page: <select id=num onchange=changeNum(this.value)>";
     for($j=10;$j<=50;$j=$j+5){
        if($page_num==$j)
          $perPage.="<OPTION VALUE=$j selected>$j";
        else
          $perPage.="<OPTION VALUE=$j>$j";
     }
     $perPage.="</select>";
  
     // Combine:  组合输出
     $navigator=$All." ".$First." | ".$Previous." | ".$Next." | ".$Last.$Current.$Goto.$perPage;
  }
 
?>

调用:  记得写好二个js 函数: changeNum 与 goToPage()

包含文件:

include("pagenation.php");

$SQL="SELECT * FROM players";

  // Pagenation:
  if(!$num) $num=15;
  pagenation($num,1,$_SERVER['PHP_SELF'],$SQL);

//Display data: global $rows,$result,$navigator are defined in pagenation.php
   for($i=0,$i<$rows;$i++){
     @mysql_data_seek($result,$i);
     $data=@mysql_fetch_array($result);

   ............[表格输出数据]

// 然后打印导航的菜单

  print("<span class="pgright">$navigator</span></div>");

搞定

posted @ 2015-12-01 15:35  Sun丶老板  阅读(844)  评论(0编辑  收藏  举报