iT邦幫忙

2

【物件導向】PHP 物件導向 簡易分頁實作

pratnket 1 周前915 瀏覽

參考->原文
[鐵人賽Day10]PHP簡易分頁實作

物件導向系列
PHP系列
【物件導向】PHP 物件導向 簡易分頁實作
javascript系列
【物件導向】javascript 物件導向概念 API (範例可玩)

物漸導向-基本概念

class 物件

    class db{} //db叫作物件

public 公開屬性

class db{
    public $host //$host叫作屬性
}

function __construct() 建構式(【成立】物件時要【預先】執行的方法)

class db{
function __construct(){
$this->八雲();

}
function 八雲(){
    echo $string = "橙"
    return $string;
}
function skill(){
    echo $string = "化貓橙"
    return $string;
}

}

一般頁面使用方法
new 成立物件

$chen = new db;// $變數 = db類別名稱
$chen->skill();// 印出 化貓橙

物漸導向就這樣。大概吧...?

物件導向概念結束

說明專區

工作流程->資料庫(帳號、密碼、連結的資料庫)

//資料庫連線
class db{
    //類別內的變數
    public $host = '127.0.0.1'; //架設的網域
    public $username = 'daniel'; //資料庫帳號
    public $password = '123456'; //資料庫密碼
    public $database = 'ch21'; //資料庫
    public $result; //公開屬性,function {$this->$result//內存取方式 }
}
//建構式
    function __construct(){
        $this->sql_connect();
        $this->sql_database();
        $this->set_db_encode();
    }

//設定連線
    function sql_connect(){
        return @mysql_connect($this->host,$this->username,$this->password);
    }
//選擇資料庫
    function sql_database(){
        return @mysql_select_db($this->database);
    }
//選擇資料庫語系
    function set_db_encode(){
        return mysql_query("SET NAMES 'utf8'");
    }
//主要使用方法
    function query($sql_string){
        $result = mysql_query($sql_string); //$sql_string(自訂的SQL語法),$result = 資料庫的物件
        $query = new db_query($result); //進行 資料庫的物件 轉array
		$result = $query->result(); //進行object轉array
        return $result;
    }
//資料庫物件轉陣列
class db_query{  
    private $result;
    function __construct($result){
        $this->result = $result;//DB查詢->db_query->$result
    }
    function result(){
        $query = array();
        if($this->result != false){
            while($row = mysql_fetch_object($this->result)){
                $query[] = $row;
            }
            return $query;
        }
        return false;
    }
}
//頁碼類別
class pages{
	
	public $page_out = false; //測試印出
	public $per = 10; //每頁顯示數量
	public $data_nums = 0; //總筆數
	public $page = 0; //現在頁數
	public $pages = 0; //總頁數
	
    function __construct(){
		
    }
	
    function Page($sql_string){
		$sql = $sql_string; //自訂的SQL
		$result = mysql_query($sql);//資料庫物件

		$data_nums = mysql_num_rows($result); //統計總比數
		$per = $this->per; //每頁顯示項目數量
		$pages = ceil($data_nums/$per); //取得不小於值的下一個整數
		
        /*如果沒有輸入 $_GET["page"] */
		if (!isset($_GET["page"])){
			$page=1;
		} else {
			$page = intval($_GET["page"] + 0);
		}
		
		$start = ($page-1)*$per; //每一頁開始的資料序號
        
        //Ex
        //SELECT * FROM class WHERE 1 LIMIT 0,10
        //LIMIT x,y
        //x = 開始頁
        //y = 顯示數量
        
		$sql = $sql.' LIMIT '.$start.', '.$per;
		$result = mysql_query($sql) or die("Error");
		
        //$This
		$this->data_nums = $data_nums;
		$this->page = $page;
		$this->pages = $pages;

        $query = new db_query($result);
		$result = $query->result();
        return $result;
    }	
	
};

$Pages = new pages;

其實【頁碼】就是在組合MYSQL字串而已...

說明專區結束

程式碼複製區
下列為程式碼完整部分...可直接複製使用...
採用於PHP物件導向,不影響你的程式碼運作

<?php 

/*######DB.php######*/
<?php 
//###時區修正
date_default_timezone_set('Asia/Taipei');
//資料庫連線
class db{

    public $host = '127.0.0.1';
    public $username = 'daniel';
    public $password = '123456';
    public $database = 'ch21';
    public $result;
		
    function __construct(){
        $this->sql_connect();
        $this->sql_database();
        $this->set_db_encode();
    }

    function sql_connect(){
        return @mysql_connect($this->host,$this->username,$this->password);
    }

    function sql_database(){
        return @mysql_select_db($this->database);
    }

    function set_db_encode(){
        return mysql_query("SET NAMES 'utf8'");
    }

    function query($sql_string){
        $result = mysql_query($sql_string);
        $query = new db_query($result);
		$result = $query->result();
        return $result;
    }
}
//資料庫物件轉陣列
class db_query{  
    private $result;
    function __construct($result){
        $this->result = $result;//DB查詢->db_query->$result
    }
    function result(){
        $query = array();
        if($this->result != false){
            while($row = mysql_fetch_object($this->result)){
                $query[] = $row;
            }
            return $query;
        }
        return false;
    }
}
$DB = new db;

//頁碼類別
class pages{
	
	public $page_out = false; //測試印出
	public $per = 10; //每頁顯示數量
	public $data_nums = 0; //總筆數
	public $page = 0; //現在頁數
	public $pages = 0; //總頁數
	
    function __construct(){
		
    }
	
    function Page($sql_string){
		$sql = $sql_string;
		$result = mysql_query($sql);

		$data_nums = mysql_num_rows($result); //統計總比數
		$per = $this->per; //每頁顯示項目數量
		$pages = ceil($data_nums/$per); //取得不小於值的下一個整數
		
		if (!isset($_GET["page"])){
			$page=1;
		} else {
			$page = intval($_GET["page"] + 0);
		}
		
		$start = ($page-1)*$per; //每一頁開始的資料序號
		$sql = $sql.' LIMIT '.$start.', '.$per;
		$result = mysql_query($sql) or die("Error");
		//$This
		$this->data_nums = $data_nums;
		$this->page = $page;
		$this->pages = $pages;
		if(($this->page_out == true)){
			//分頁頁碼
			echo '共 '.$data_nums.' 筆-在 '.$page.' 頁-共 '.$pages.' 頁';
			echo "<br /><a href=?page=1>首頁</a> ";
			echo "第 ";
			for( $i=1 ; $i<=$pages ; $i++ ) {
				if ( $page-3 < $i && $i < $page+3 ) {
					echo "<a href=?page=".$i.">".$i."</a> ";
				}
			} 
			echo " 頁 <a href=?page=".$pages.">末頁</a><br /><br />";
		}

        $query = new db_query($result);
		$result = $query->result();
        return $result;
    }	
	
};

$Pages = new pages;
?><?php 
//###時區修正
date_default_timezone_set('Asia/Taipei');
//資料庫連線
class db{

    public $host = '127.0.0.1';
    public $username = 'daniel';
    public $password = '123456';
    public $database = 'ch21';
    public $result;
		
    function __construct(){
        $this->sql_connect();
        $this->sql_database();
        $this->set_db_encode();
    }

    function sql_connect(){
        return @mysql_connect($this->host,$this->username,$this->password);
    }

    function sql_database(){
        return @mysql_select_db($this->database);
    }

    function set_db_encode(){
        return mysql_query("SET NAMES 'utf8'");
    }

    function query($sql_string){
        $result = mysql_query($sql_string);
        $query = new db_query($result);
		$result = $query->result();
        return $result;
    }
}
//資料庫物件轉陣列
class db_query{  
    private $result;
    function __construct($result){
        $this->result = $result;//DB查詢->db_query->$result
    }
    function result(){
        $query = array();
        if($this->result != false){
            while($row = mysql_fetch_object($this->result)){
                $query[] = $row;
            }
            return $query;
        }
        return false;
    }
}
$DB = new db;

//頁碼類別
class pages{
	
	public $page_out = false; //測試印出
	public $per = 10; //每頁顯示數量
	public $data_nums = 0; //總筆數
	public $page = 0; //現在頁數
	public $pages = 0; //總頁數
	
    function __construct(){
		
    }
	
    function Page($sql_string){
		$sql = $sql_string;
		$result = mysql_query($sql);

		$data_nums = mysql_num_rows($result); //統計總比數
		$per = $this->per; //每頁顯示項目數量
		$pages = ceil($data_nums/$per); //取得不小於值的下一個整數
		
		if (!isset($_GET["page"])){
			$page=1;
		} else {
			$page = intval($_GET["page"] + 0);
		}
		
		$start = ($page-1)*$per; //每一頁開始的資料序號
		$sql = $sql.' LIMIT '.$start.', '.$per;
		$result = mysql_query($sql) or die("Error");
		//$This
		$this->data_nums = $data_nums;
		$this->page = $page;
		$this->pages = $pages;
		if(($this->page_out == true)){
			//分頁頁碼
			echo '共 '.$data_nums.' 筆-在 '.$page.' 頁-共 '.$pages.' 頁';
			echo "<br /><a href=?page=1>首頁</a> ";
			echo "第 ";
			for( $i=1 ; $i<=$pages ; $i++ ) {
				if ( $page-3 < $i && $i < $page+3 ) {
					echo "<a href=?page=".$i.">".$i."</a> ";
				}
			} 
			echo " 頁 <a href=?page=".$pages.">末頁</a><br /><br />";
		}

        $query = new db_query($result);
		$result = $query->result();
        return $result;
    }	
	
};

$Pages = new pages;
?>

/*######index.php######*/

<?php include("DB.php") ?>

 <?php 
//自己打SQL語法取法 
	$SQL = "SELECT * FROM class WHERE 1 LIMIT 0,10 ";
	$query = $DB->query($SQL);
	foreach($query as $key=>$row){
		echo $row->name.'<br/>';
	}	
echo "-------------------------------".'<br/>';
//頁碼類別取法
	$SQL = "SELECT * FROM class WHERE 1";
	$Pages->page_out = true ;
	$query = $Pages->Page($SQL);
	foreach($query as $key=>$row){
		echo $row->name.'<br/>';
	}	
 ?>

/*###### MYSQL資料庫 ######*/
id	name	birthday	math	english	history	total	address_L	address_R
1	李大華	1997/3/7	90	94	92	276		
2	陳小明	1997/2/1	82	88	90	260		
3	劉小珍	1997/8/3	89	87	78	254		
4	廖小敏	1997/10/21	75	80	85	240		
5	吳大龍	1997/5/17	63	71	68	202		

尚未有邦友留言

立即登入留言