首页 > 开发 > PHP > 正文

php分页可利用表格来分页类

2024-05-04 23:06:46
字体:
来源:转载
供稿:网友
  1. <?php 
  2. /* 
  3.  * 直接输出数据表和分页信息 
  4.  * 在新建对象时需要的变量:$query(从数据表中获取记录数的sql语句),$page(当前页码),$maxline(每页几行)) 
  5.  * 1、showpage方法:如果上面创建对象的$query正确,直接调用,即可输出分页信息 
  6.  * 2、showtable方法:需要的变量:$query(从数据库读取记录的SQL语句,不要加Limit,因为在方法中已经添加) 
  7.  *   直接输出<tr><td></td></tr>的表格,所以只需在前后加上<table></table>就是完整的表格 
  8.  * 3、showresult方法:根据提交的$query中的SQL,直接将$result资源返回,表格可以自己定义 
  9.  * 示例: 
  10. //获取当前页,并定义每页最大行 
  11. $page=1; 
  12. $maxline="10"; 
  13. if(!empty($_GET["page"])){ 
  14.  $page=$_GET["page"]; 
  15. } 
  16. //定义计算表内数据总数的SQL语句,这里必须和下面的$query是同一个表和条件,创建对象,输出页码和表格 
  17. $query="select count(*) from mailbox"; 
  18. $a=new PageList($query, $maxline, $page); 
  19. $a->showpage(); 
  20. //这里显示列表,需要和上面的SQL语句一样的条件 
  21. $query="select username,name,quota,created,modified,active from mailbox order by created desc"; 
  22. echo "<table width='800' border='0' cellspacing='0' cellpadding='0' class='pagelist'>"; 
  23. $a->showtable($query); 
  24. echo "</table>"; 
  25.  * */ 
  26. class PageList{ 
  27.  private $link
  28.  private $result
  29.  private $maxline
  30.  private $page=1;  
  31.  private $startline=0; 
  32.  private $countline
  33.  public  $countpage
  34.  private $prevpage
  35.  private $nextpage
  36.  //数据库联接,需要修改为您自己的地址 
  37.  private $dbhost=DBHOST; 
  38.  private $dbuser=DBUSER; 
  39.  private $dbpasswd=DBPASSWD; 
  40.  private $dbtable=DBTABLE; 
  41. /* 
  42.  * 构造函数中建立数据库联接 
  43.  * 1、数据库连接的4个参数设置为常量 记录在config.php页面中 
  44.  * 2、连接数据库,并选择数据库 
  45.  * 3、设置数据库执行的编码方式为utf8 
  46.  * 4、将接收到的$maxline,$page两个变量赋值给类属性,成为该类通用属性 
  47.  *   (其中$query是count(*)的SQL,和下面方法中的query是不一样的) 
  48.  * 5、根据新建对象时递交的$query语句,对数据库执行查询,将得到的总记录数赋值到类属性中$this->countline 
  49.  *   将总记录数/每页行数,再用ceil函数高位取整,得到总页数并赋值到类属性中$this->countpage 
  50.  * 6、根据递交的当前页码$page,算出前后页的数字$this->prevpage和$this->nextpage 
  51.  *  还有必须算出数据库读取的起始行$this->startline 
  52.  *  这里分3种情况,page<2 ,page=最后一页,page>1(这个情况可以不判断,直接用else)   
  53.  * */ 
  54.  public function __construct($query,$maxline,$page){ 
  55.   @$this->link=mysql_connect($dbhost,$dbuser,$dbpasswdor die($this->feedback='System Error ,Please contect admin'); 
  56.   @mysql_select_db($dbtable,$this->link) or die($this->feedback='System Error ,Please contect admin'); 
  57.   @mysql_query('set names utf8'); 
  58.   $this->maxline=$maxline
  59.    
  60.   //读取行数,并将结果返回$coutline 
  61.   $this->result=mysql_query($queryor die($this->feedback='System Error ,Please contect admin'); 
  62.   if($count=mysql_fetch_row($this->result)){ 
  63.    //intval将字符串转为int,可以不转,但这样的程序更健康 
  64.    $this->countline = intval($count[0]); 
  65.    $this->countpage = ceil($this->countline/$maxline); 
  66.   } 
  67.   //判断递交的$page是否大于总页数 
  68.   if($page<=$this->countpage){ 
  69.    $this->page=$page
  70.   } 
  71.    
  72.   if($this->page<2){ 
  73.    $this->prevpage=0; 
  74.    $this->nextpage=2; 
  75.    $this->startline= 0; 
  76.   }elseif($this->page==$this->countpage){ 
  77.    $this->prevpage=$this->page-1; 
  78.    $this->nextpage=0; 
  79.    $this->startline= ($this->page-1)*$this->maxline; 
  80.   }else
  81.    $this->prevpage=$this->page-1; 
  82.    $this->nextpage=$this->page+1; 
  83.    $this->startline= ($this->page-1)*$this->maxline; 
  84.   } 
  85.  } 
  86. /* 
  87.  * 析构函数 
  88.  * 释放资源,关闭数据库连接 
  89.  * */ 
  90.  public function __destruct(){ 
  91.   mysql_free_result($this->result); 
  92.   mysql_close($this->link); 
  93.   exit(); 
  94.  } 
  95.   
  96. /* 
  97.  * 输出分页信息 
  98.  * */ 
  99.  public function showpage(){ 
  100.   //$listnum显示上下页中间的数字位数,一定要偶数阿!否则不能被2除 
  101.   $listnum=10; 
  102.   echo $this->countline." Items, ".$this->countpage." Pages  "
  103.   if($this->prevpage==0){ 
  104.    echo "&lt;&lt;Prev "
  105.   }else
  106.    echo "<a href=?page=".$this->prevpage.">&lt;&lt;Prev</a> "
  107.   } 
  108.    
  109.   if($this->countpage<$listnum){          //判断总页数是否小于$listnum 
  110.    $page_start=1; 
  111.    $page_end=$this->countpage; 
  112.   }elseif($this->page<$listnum/2){          //判断当前页是否小于$listnum的一半 
  113.    $page_start=1; 
  114.    $page_end=$listnum
  115.   }elseif($this->page>$this->countpage-($listnum/2)){  //判断当前页是否是最后几页了 
  116.    $page_start=$this->countpage-($listnum-1); 
  117.    $page_end=$this->countpage; 
  118.   }else{                    //如果上面的条件都不符合,那当前也正在中间 
  119.    $page_start=$this->page-($listnum/2-1); 
  120.    $page_end=$this->page+($listnum/2); 
  121.   } 
  122.    
  123.   for($i=$page_start;$i<=$page_end;$i++){       //根据上面判断的start和end页码,循环输出之间的页码 
  124.    if($i==$this->page){ 
  125.     echo "<b>".$i."</b>  "
  126.    }else
  127.     echo "<a href=?page=".$i.">".$i."</a>  "
  128.    } 
  129.   } 
  130.    
  131.   if ($this->nextpage==0){ 
  132.    echo " Next&gt;&gt;"
  133.   }else
  134.    echo " <a href=?page=".$this->nextpage.">Next&gt;&gt;</a> "
  135.   } 
  136.    
  137.  } 
  138. /* 
  139.  * 根据sql语句读取数据库中的数据,然后列成表单输出 
  140.  * 需要的变量:$field(字段),$table(表名),$startline(开始行),$maxline(每页显示行数) 
  141.  * 输出从表格的tr开始,从tr结束,所以在使用这个方法前后要加table的标签 
  142.  * */  
  143.  public function showtable($query){ 
  144.   $query=$query." LIMIT ".$this->startline.",".$this->maxline; 
  145.   $result = mysql_query($queryor die($this->feedback='System Error ,Please contect admin'); 
  146.   //行循环开始,定义一个$i变量,用来显示行号,每次执行一条while语句,指针就指向下一条数据 
  147.   $i=0; 
  148.   while ($fetch = mysql_fetch_assoc($result)){ 
  149.    $i++; 
  150.    echo "<tr><td>".$i."</td>"
  151.    //列循环开始,因为通过while后,$fetch已经是个数组,所以通过foreach遍历数组即可 
  152.    foreach ($fetch as $value){ 
  153.     echo "<td>".$value."</td>"
  154.    } 
  155.    echo "</tr>"
  156.   } 
  157.  } 
  158. /* 
  159.  * 这个方法是将资源传出,表格在外面自定义样式 
  160.  * */ 
  161.  public function showresult($query){ 
  162.   $result = mysql_query($queryor die($this->feedback='System Error ,Please contect admin'); 
  163.   return $result
  164.  } 
  165. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表