程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php分頁可利用表格來分頁類

php分頁可利用表格來分頁類

編輯:關於PHP編程

* 在新建對象時需要的變量:$query(從數據表中獲取記錄數的sql語句),$page(當前頁碼),$maxline(每頁幾行)) * 1、showpage方法:如果上面創建對象的$query正確,直接調用,即可輸出分頁信息 * 2、showtable方法:需要的變量:$query(從數據庫讀取記錄的SQL語句,不要加Limit,因為在方法中已經添加)  代碼如下 復制代碼

<?php
/*
 * 直接輸出數據表和分頁信息
 * 在新建對象時需要的變量:$query(從數據表中獲取記錄數的sql語句),$page(當前頁碼),$maxline(每頁幾行))
 * 1、showpage方法:如果上面創建對象的$query正確,直接調用,即可輸出分頁信息
 * 2、showtable方法:需要的變量:$query(從數據庫讀取記錄的SQL語句,不要加Limit,因為在方法中已經添加)
 *   直接輸出<tr><td></td></tr>的表格,所以只需在前後加上<table></table>就是完整的表格
 * 3、showresult方法:根據提交的$query中的SQL,直接將$result資源返回,表格可以自己定義
 * 示例:
//獲取當前頁,並定義每頁最大行
$page=1;
$maxline="10";
if(!empty($_GET["page"])){
 $page=$_GET["page"];
}
//定義計算表內數據總數的SQL語句,這裡必須和下面的$query是同一個表和條件,創建對象,輸出頁碼和表格
$query="select count(*) from mailbox";
$a=new PageList($query, $maxline, $page);
$a->showpage();
//這裡顯示列表,需要和上面的SQL語句一樣的條件
$query="select username,name,quota,created,modified,active from mailbox order by created desc";
echo "<table width='800' border='0' cellspacing='0' cellpadding='0' class='pagelist'>";
$a->showtable($query);
echo "</table>";
 * */

class PageList{
 private $link;
 private $result;
 private $maxline;
 private $page=1; 
 private $startline=0;
 private $countline;
 public  $countpage;
 private $prevpage;
 private $nextpage;
 //數據庫聯接,需要修改為您自己的地址
 private $dbhost=DBHOST;
 private $dbuser=DBUSER;
 private $dbpasswd=DBPASSWD;
 private $dbtable=DBTABLE;

/*
 * 構造函數中建立數據庫聯接
 * 1、數據庫連接的4個參數設置為常量 記錄在config.php頁面中
 * 2、連接數據庫,並選擇數據庫
 * 3、設置數據庫執行的編碼方式為utf8
 * 4、將接收到的$maxline,$page兩個變量賦值給類屬性,成為該類通用屬性
 *   (其中$query是count(*)的SQL,和下面方法中的query是不一樣的)
 * 5、根據新建對象時遞交的$query語句,對數據庫執行查詢,將得到的總記錄數賦值到類屬性中$this->countline
 *   將總記錄數/每頁行數,再用ceil函數高位取整,得到總頁數並賦值到類屬性中$this->countpage
 * 6、根據遞交的當前頁碼$page,算出前後頁的數字$this->prevpage和$this->nextpage
 *  還有必須算出數據庫讀取的起始行$this->startline
 *  這裡分3種情況,page<2 ,page=最後一頁,page>1(這個情況可以不判斷,直接用else)  
 * */
 public function __construct($query,$maxline,$page){
  @$this->link=mysql_connect($dbhost,$dbuser,$dbpasswd) or die($this->feedback='System Error ,Please contect admin');
  @mysql_select_db($dbtable,$this->link) or die($this->feedback='System Error ,Please contect admin');
  @mysql_query('set names utf8');
  $this->maxline=$maxline;
  
  //讀取行數,並將結果返回$coutline
  $this->result=mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
  if($count=mysql_fetch_row($this->result)){
   //intval將字符串轉為int,可以不轉,但這樣的程序更健康
   $this->countline = intval($count[0]);
   $this->countpage = ceil($this->countline/$maxline);
  }
  //判斷遞交的$page是否大於總頁數
  if($page<=$this->countpage){
   $this->page=$page;
  }
  
  if($this->page<2){
   $this->prevpage=0;
   $this->nextpage=2;
   $this->startline= 0;
  }elseif($this->page==$this->countpage){
   $this->prevpage=$this->page-1;
   $this->nextpage=0;
   $this->startline= ($this->page-1)*$this->maxline;
  }else{
   $this->prevpage=$this->page-1;
   $this->nextpage=$this->page+1;
   $this->startline= ($this->page-1)*$this->maxline;
  }
 }

/*
 * 析構函數
 * 釋放資源,關閉數據庫連接
 * */
 public function __destruct(){
  mysql_free_result($this->result);
  mysql_close($this->link);
  exit();
 }
 
/*
 * 輸出分頁信息
 * */
 public function showpage(){
  //$listnum顯示上下頁中間的數字位數,一定要偶數阿!否則不能被2除
  $listnum=10;
  echo $this->countline." Items, ".$this->countpage." Pages  ";

  if($this->prevpage==0){
   echo "&lt;&lt;Prev ";
  }else{
   echo "<a href=?page=".$this->prevpage.">&lt;&lt;Prev</a> ";
  }
  
  if($this->countpage<$listnum){          //判斷總頁數是否小於$listnum
   $page_start=1;
   $page_end=$this->countpage;
  }elseif($this->page<$listnum/2){          //判斷當前頁是否小於$listnum的一半
   $page_start=1;
   $page_end=$listnum;
  }elseif($this->page>$this->countpage-($listnum/2)){  //判斷當前頁是否是最後幾頁了
   $page_start=$this->countpage-($listnum-1);
   $page_end=$this->countpage;
  }else{                    //如果上面的條件都不符合,那當前也正在中間
   $page_start=$this->page-($listnum/2-1);
   $page_end=$this->page+($listnum/2);
  }
  
  for($i=$page_start;$i<=$page_end;$i++){       //根據上面判斷的start和end頁碼,循環輸出之間的頁碼
   if($i==$this->page){
    echo "<b>".$i."</b>  ";
   }else{
    echo "<a href=?page=".$i.">".$i."</a>  ";
   }
  }
  
  if ($this->nextpage==0){
   echo " Next&gt;&gt;";
  }else{
   echo " <a href=?page=".$this->nextpage.">Next&gt;&gt;</a> ";
  }
  
 }

/*
 * 根據sql語句讀取數據庫中的數據,然後列成表單輸出
 * 需要的變量:$field(字段),$table(表名),$startline(開始行),$maxline(每頁顯示行數)
 * 輸出從表格的tr開始,從tr結束,所以在使用這個方法前後要加table的標簽
 * */ 
 public function showtable($query){
  $query=$query." LIMIT ".$this->startline.",".$this->maxline;
  $result = mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
  //行循環開始,定義一個$i變量,用來顯示行號,每次執行一條while語句,指針就指向下一條數據
  $i=0;
  while ($fetch = mysql_fetch_assoc($result)){
   $i++;
   echo "<tr><td>".$i."</td>";
   //列循環開始,因為通過while後,$fetch已經是個數組,所以通過foreach遍歷數組即可
   foreach ($fetch as $value){
    echo "<td>".$value."</td>";
   }
   echo "</tr>";
  }
 }

/*
 * 這個方法是將資源傳出,表格在外面自定義樣式
 * */
 public function showresult($query){
  $result = mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
  return $result;
 }
}
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved