如果妳能仔細研究我的寫作,分頁將不再是壹個問題。
有兩種分頁。
首先,文件數據的分頁
第二,數據庫數據的分頁
數據庫數據分頁用的最多,原理差不多,只是獲取數據的方法不同。
下面主要講數據庫數據的分頁。
首先,我們要了解量。
a、頁面要顯示的鏈接數量是$links(我們這裏說的不僅僅是上壹頁和下壹頁,我們說的是百度圖片中的分頁效果)。
b、每頁顯示的記錄數$page_messages是壹頁顯示的數據數。
c,當前頁碼為number頁
d,數據庫中的記錄總數(不是必須的,但我們也要考慮它以確保生成的分頁條是正確的)
有了上面的四個量,我們就可以通過它們得到分頁條的起始頁碼和結束頁碼,而
Select * from表格,其中字段=值限制偏移量、偏移量和數字中的數字。
其中offset =($ page-1)* $ page _ messages。
numbers=$page_messages
其次要明白,在點擊分頁欄中的鏈接時,要將對應的頁碼傳遞給後臺。
也就是說,$ TERM $page傳遞PHP文件,可以動態生成offset,從數據中重新讀取數據。
最後,數據顯示在模板文件中,或者通過循環控制語句直接顯示在HTML中。
分頁欄頁碼的計算需要考慮很多方面,這裏就不贅述了。我會在最後給妳壹個分頁源代碼。因為分頁源代碼是面向對象寫的,所以有點難度,但是妳只要理解這個類的最後壹個方法中的每壹個參數就可以實現分頁。
這個分布類使用了壹個數據操作類,所以它是壹起給出的。
& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)
header(" content-type:text/html;charset = utf-8 ");
DB類{
靜態私有$ obj = null
靜態私有$ db _ link = null
靜態私有$ dbhost//數據庫服務器地址
靜態私有$ dbuser//數據庫用戶名
靜態私有$ dbpass//數據庫密碼
靜態私有$ dbname//數據庫名稱
靜態私有$ dbcharset//數據庫編碼
靜態公共函數ConstZhi($host,$user,$password,$dbname,$dbcharset){
self::$ dbhost = $ host;
self::$ dbuser = $ user;
self::$ db pass = $ password;
self::$ dbname = $ dbname;
self::$ dbcharset = $ dbcharset;
}
靜態公共函數& amp實例(){
if ( null == self::$obj ){
$ class = _ _ CLASS _ _
self::$ obj = new $ class;
}
返回自我::$ obj
}
function __construct(){
self::$ db _ link = MySQL _ connect(self::$ dbhost,self::$dbuser,self::$ dbpass);
@ mysql _ select _ db (self: $ dbname,self: $ db _ link)或者die("數據庫名有誤,請檢查壹下!"。MySQL _ error());
@ MySQL _ query('設置名稱')。self:: $ dbcharset,self:: $ db _ link)或die(“編碼設置錯誤”。MySQL _ error());
}
函數__destruct(){
self::Close();
}
靜態公共函數Close(){
if(is _ resource(self::$ db _ link)){
@ MySQL _ close(self::$ db _ link);
}
self::$ db _ link = null;
self::$ obj = null;
}
靜態公共函數EscapeString( $string ){
self::Instance();
return @ MySQL _ real _ escape _ string($ string,self::$ db _ link);
}
靜態公共函數GetInsertId(){
self::Instance();
return intval(@ MySQL _ insert _ id(self::$ db _ link));
}
靜態公共函數查詢($sql ){
self::Instance();
$result = @mysql_query( $sql,self::$ db _ link);
if ( $result ){
返回$ result
}
self::Close();
返回false
}
靜態公共函數doInsert( $table,$arr1 ){
$ SQL _ FD =“”;
$ SQL _ v =“”;
foreach($ arr 1 as $ k = & gt;$v ) {
$sql_fd。= ",` $ k ` ";
$sql_v .= ",'"self::EscapeString( $v)。”' ";
}
$sql_fd = '('。trim( $sql_fd,',')。')';
$sql_v = '('。trim($sql_v,',')。')';
$sql = "INSERT INTO `$table`"。$sql_fd。“價值觀”。$ SQL _ v;
if ( mysql_query($sql) ) {
返回MySQL _ insert _ id();
}
返回false
}
靜態公共函數doDelete( $table,$val,$fd = 'id' ) {
self::Instance();
$ SQL = " DELETE FROM `$ table ` WHERE `$ FD `="。self::escape string($ val);
返回self::Query( $sql,self::$ db _ link);
}
/**
*許殿洋制作的doDeleteXu()
* */
靜態公共函數doDeleteXu( $table,$val,$fd = 'id' ) {
self::Instance();
$ SQL = " DELETE FROM `$ table ` WHERE `$ FD `="。$ val
返回self::Query( $sql,self::$ db _ link);
}
//更新` Sina ` . ` Sohu _ URL ` SET ` state `= ' 1 '其中` Sohu _ URL ` . ` id `= 1 LIMIT 1;
靜態公共函數dou update($ table,$arr1,$arr2 ){
self::Instance();
$ SQL _ set =“”;
foreach($ arr 2 as $ k = & gt;$v ) {
$sql_set。= ",` $k` = ' "。self::EscapeString($v)。”' ";
}
$sql_set = trim( $sql_set,',');
$ arr _ w = array();
foreach($ arr 1 as $ k = & gt;$v ){
$arr_w[] = " ` "。self::EscapeString($k)。"` = '".self::EscapeString($v)。”' ";
}
$ SQL = " UPDATE `$ table ` SET $ SQL _ SET WHERE "。內爆(' and ',$ arr _ w);
if ( self::Query($sql))
返回true
返回false
}
靜態公共函數getRows( $table,$arr=array(),$one = 0 ) {
self::Instance();
if ( empty($arr) ){
$ sql = " SELECT * FROM ` $ table
}否則{
$ arr _ w = array();
foreach($ arr as $ k = & gt;$v ){
if(is_numeric($v))
$arr_w[] = " ` "。self::EscapeString($k)。"` = ".self::escape string($ v);
其他
$arr_w[] = " ` "。self::EscapeString($k)。"` = '".self::EscapeString($v)。”' ";
}
$sql = "SELECT * FROM `$table` WHERE "。內爆(' and ',$arr_w)。“按` id` ASC '排序”;
//echo $ SQL;
}
if ( $ret = self::Query($sql) ){
如果(壹美元){
返回MySQL _ fetch _ assoc($ ret);
}否則{
$ arr _ out = array();
while($ row = MySQL _ fetch _ assoc($ ret)){
$ arr _ out[]= $ row;
}
返回$ arr _ out
}
}
返回false
}
靜態私有函數makeWhere( $arr ){
$ arr _ w = array();
foreach($ arr as $ k = & gt;$v ){
$arr_w[] = " ` "。self::EscapeString($k)。"` = '".self::EscapeString($v)。”' ";
}
return內爆(' and ',$ arr _ w);
}
靜態公共函數getCount( $table,$arr ){
if ( is_array($arr)和count($arr)>0 ) {
$ SQL = " SELECT COUNT(*)n FROM `$ table ` WHERE "。self::make where($ arr);
if ( $ret = self::Query($sql) ){
$ tmep = MySQL _ fetch _ assoc($ ret);
return $ tmep[' n '];
}
}
返回false
}
/**
* getCountXu()由徐典洋制作
* */
靜態公共函數getCountXu( $table,$arr ){
$ SQL = " SELECT COUNT(*)n FROM `$ table `";
if ( $ret = self::Query($sql) ){
$ tmep = MySQL _ fetch _ assoc($ ret);
return $ tmep[' n '];
}
返回false
}
靜態公共函數getQueryResult( $sql,$one=false ){
$ ret = array();
if ( $result = self::Query($sql) ){
while($ row = MySQL _ fetch _ assoc($ result)){
//$ row = array _ change _ key _ CASE($ row,CASE _ LOWER);
如果(壹美元){
$ ret = $ row
打破;
}否則{
array_push( $ret,$ row);
}
}
@ MySQL _ free _ result($ result);
}
返回$ ret
}
}
您可以在類中配置您自己的數據庫服務器的相應帳戶和密碼。
& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)
分野類{
private $ mDB
公共函數_ _構造(DB $obj){
$ this-& gt;mDB = $ obj
}
/**
*計算總頁數* * *
*
* @param string $table表格名稱
* @ paramarray $ condition查詢條件
* @param integer $message_number每頁顯示的記錄數
* @返回數組*/
公共函數getPageAll($table,$condition,$message_number){
if($condition == ""){
$ recodernum = $ this-& gt;MD B- & gt;getCountXu($table,$ condition);
}否則{
$ recodernum = $ this-& gt;MD B- & gt;getCount($table,$ condition);
}
$ arr $ number[' all ']= $ recodernum;
$ arr $ number[' page _ all ']= ceil($ recodernum/$ message _ number);
返回$ arrnumber
}
/**
*生成查詢的SQL語句
*
*@param string $table要查詢的表。
* @ paramarray $ condition查詢條件
*@param array $arr查詢的字段數組。
*@param mixed $order表示排序方法。
*@param array $limit表示指定查詢記錄的數量。
* @返回字符串
**/
公共函數createSQL($table,$condition,$arr,$order,$limit){
if ($table == ""){
返回false
}否則{
$ str 1 = " ";
$ str2 =
$ str3 =
$ str4 =
$ n = 0;
$ m = 0;
$ p = 0;
if ($arr == ""){
$ str 1 = " * ";
}否則{
foreach ($arr as $value){
$ p++;
if ($p == 1){
$str1。= $ value
}否則{
$str1。=",".$ value
}
}
}
if($condition == ""){
$ str2 =
}否則{
foreach($ condition as $ key = & gt;$value){
$ n++;
if ($n == 1){
$str2。=“哪裏”。$key。"="."'".$value。”'";
}否則{
$str2。= "和"。$key。"="."'".$value。”'";
}
}
}
if($order == ""){
$ str3 =
}否則{
foreach($ order as $ key = & gt;$value){
$ m++;
if ($m == 1){
$str3。=“排序依據”。$key。" ".$ value
}否則{
$str3。=",".$key。" ".$ value
}
}
}
if ($limit == ""){
$ str4 =
}否則{
$str4="limit "。$limit[0]。",".$ limit[1];
}
$sql="select "。$str1。“從”。$table。" ".$str2。$str3。" ".$ str4
}
返回$ sql
}
/**
*獲取當前頁面應有的信息。
*
*@param integer $page當前頁碼
*@param integer $message_number每頁顯示的記錄數
* @ param integer$page all總計* * *頁
*@param string $sql要執行的sql語句
* @返回數組
*/
公共函數getPageInformation($page,$page_all,$message_number,$sql){
$ start = 0;//開頭的頁碼
$ end = 0;//結束頁碼
$ arr = array();//返回的結果存儲在該數組中。
$ left = intval($ message _ number/2);
$ start = $ page-$ left;
$ end = $ page+$ left;
if($message _ number & lt;= $page_all){//判斷頁面總數是否大於每頁鏈接數。
if($ end & lt;= $message_number){
$ end = $ message _ number
}
}否則{
$ end = $ page _ all
}
if($start & lt;= 0){
$ start = 1;
}
if($ end & gt;= $page_all){
$ start = $ page _ all-$ message _ number+1;
if($start & lt;= 0){
$ start = 1;
}
$ end = $ page _ all
}
if($ page & lt;1){
$ page = 1;
$ start = 1;
if($ page _ all & lt;= $message_number){
$ end = $ page _ all
}
$ end = $ message _ number
}
if($ page & gt;= $page_all){
$ page = $ page _ all
$ start = $ page-$ message _ number+1;
if($start & lt;= 0){
$ start = 1;
}
$ end = $ page
}
$ result = $ this-& gt;MD B- & gt;查詢($ SQL);
if($result){
for(;;){
$ zhi = MySQL _ fetch _ assoc($ result);
if($zhi){
$ arr 1[]= $ zhi;
}否則{
打破;
}
}
}
$ arr[' start ']= $ start;
$ arr[' end ']= $ end;
$ arr[' page _ all ']= $ page _ all;
$ arr[' page ']= $ page;
$ arr[' content ']= @ $ arr 1;
返回$ arr
}
/**
*修改傳遞的頁碼使其合法。
*
* @param integer $page傳遞的頁碼
* @param integer $page_all總頁數
* @return integer*/
公共函數checkPage($page,$page_all){
if($ page & lt;1){
$ page = 1;
}
if($ page & gt;= $page_all){
$ page = $ page _ all
}
return $ page
}
/**
*生成分頁欄
*
* @param integer $page當前頁碼
* @ param integer $分頁欄的起始頁碼。
* @param integer $end分頁欄末尾的頁碼
* @param integer $page_all總* * *頁數
* @param string $otherquery其他需要傳遞的參數,如& string=Publisher
* @返回字符串
* */
公共函數createFenYeTiao($page,$start,$end,$page_all,$otherquery=''){
$ str =
if($page == 1){
$str。= '主頁'。"".'上壹頁'。"";
}否則{
$str。= " & lta href= '?page=1 "。$otherquery。target = ' _ self ' & gt" .主頁。
$str。= " & lta href= '?page= "。($page-1)。$otherquery。target = ' _ self ' & gt" .上壹頁。
}
for($ I = $ start;$ i & lt= $ end$i++){
if($page == $i){
$str。= " & lta href= '?page= "。$page。$otherquery。target = ' _ self ' & gt" .$page,"& lt/a & gt;" ."";
}否則{
$str。= " & lta href= '?page= "。$i.$otherquery。target = ' _ self ' & gt[".$ I . "]& lt;/a & gt;" ."";
}
}
if($page == $page_all){
$str。= '下壹頁'。"".'最後壹頁';
}否則{
$str。= " & lta href= '?page= "。($page+1)。$otherquery。target = ' _ self ' & gt" .下壹頁。
$str。= " & lta href= '?page= "。$page_all。$otherquery。target = ' _ self ' & gt" .最後壹頁。”
}
返回$ str
}
/**
*完成分頁的所有操作。
*
*@param string $table要查詢的表。
* @ paramarray $ condition查詢條件
* @ paramarray $查詢的字段數組。
*@param mixed $order表示排序方法。
*@param integer $page當前頁碼
* @ param integer$mess _ num每頁顯示的記錄數
*@param integer $page_link顯示的鏈接數。
*@param string $otherquery點擊分頁頁碼時需要傳遞的其他參數,默認為空。
*@return array包括分頁條和從數據庫中讀取的數據,分別存儲在索引為content和fenyetiao的兩個元素中。請註意。
*具有索引內容的元素是壹個二維數組*/
公共函數FinishFenYe($table,$condition,$arrField,$order,$page,$mess_num,$page_link,$otherquery){
$ all $ number = $ this-& gt;getPageAll($table,"",$ mess _ num);
$ page _ all = $ all $ number[' page _ all '];
$ page = $ this-& gt;checkPage($page,$ page _ all);
$ limit off et =($ page-1)* $ mess _ num;
$limit=array($limitoffet,$ mess _ num);
$ SQL = $ this-& gt;createSQL($table,$condition,$arrField,$order,$ limit);
$ resarr = $ this-& gt;getPageInformation($page,$page_all,$page_link,$ SQL);
$ resarr[' page ']= $ this-& gt;checkPage($resarr['page'],$ resarr[' page _ all ']);
$ fenyetiao = $ this-& gt;createFenYeTiao($ resarr[' page '],$resarr['start'],$resarr['end'],$resarr['page_all'],$ other query);
$ resarr[' fenyetiao ']= $ fenyetiao;
$ resarr[' all ']= $ all $ number[' all '];
return $ resarr
}
}
& gt
祝妳成功!