zoukankan      html  css  js  c++  java
  • 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>");

    搞定

  • 相关阅读:
    linux开发中常用的命令及技巧(连载)
    使用CCS调试基于AM335X的SPL、Uboot(原创)
    [C语言]变量的声明和定义有什么区别
    C语言中void*详解及应用
    使用中断处理程序实现loop功能
    原码,反码,补码的深入理解与原理
    关于C和C++不同源文件中重名变量的问题(转)
    const extern static 终极指南(转)
    函数调用栈分析
    16位和32位的80X86汇编语言的区别(转)
  • 原文地址:https://www.cnblogs.com/Jerry-blog/p/5010290.html
Copyright © 2011-2022 走看看