PHP+MySQL 分頁(yè)那點(diǎn)事

分頁(yè)技術(shù)隨處可見,這可以算得上是最為基礎(chǔ)的網(wǎng)站功能了。于是今天嘗試著用PHP來(lái)實(shí)現(xiàn)一個(gè)分頁(yè)的小例子贩猎。


[toc]


準(zhǔn)備工作

俗話有云“工欲善其事,必先利其器”萍膛,我們今天要使用PHP來(lái)實(shí)現(xiàn)分頁(yè)吭服。那么我們首要的任務(wù)就是搭建PHP的工作環(huán)境。

環(huán)境準(zhǔn)備

使用PHP技術(shù)蝗罗,最好的搭檔就是AMP(Apache艇棕,MySQL,PHP),現(xiàn)在有很多集成好的環(huán)境串塑,例如WAMP沼琉,XAMPP,phpnow等等桩匪。但是今天我來(lái)手動(dòng)的搭建一套PHP 的工作環(huán)境打瘪。

Apache

我們首先需要到Apache的官網(wǎng)上下載Apache server。最好是能下載msi版本的傻昙,因?yàn)檫@樣我們就可以不用手動(dòng)的配置各種環(huán)境了闺骚。

Apache下載地址

MySQL

作為數(shù)據(jù)庫(kù)界有名的開源項(xiàng)目MySQL現(xiàn)如今也被Oracle收購(gòu)了,不知道今后會(huì)不會(huì)收費(fèi)妆档。但是目前而言僻爽,PHP開發(fā)最好的選擇就是MySQL了。這個(gè)無(wú)需多言贾惦,現(xiàn)附上下載地址胸梆。

MySQL下載地址

在安裝過(guò)程中,切記要牢記用戶名及密碼纤虽。

PHP

有人說(shuō)PHP不是一門語(yǔ)言乳绕,而是一個(gè)框架,一個(gè)連接MySQL的客戶端實(shí)現(xiàn)逼纸。我仔細(xì)的想了想洋措,好像也是有那么點(diǎn)道理。但是如果這樣說(shuō)來(lái)杰刽,有很多的語(yǔ)言都算不上是語(yǔ)言了菠发。php作為平民英雄,其進(jìn)步之大眾所周知贺嫂。下面附上php的下載地址滓鸠,免得再去單獨(dú)尋找。

PHP下載地址

工作環(huán)境

我們安裝好了上面的三個(gè)軟件之后第喳,就可以正式的開始環(huán)境搭建了糜俗。我們目前而言只需要知道的就是我們的工作目錄就在Apache的htdocs文件夾下,作為虛擬目錄的htdocs是由apache配置文件維護(hù)的,我們以后慢慢的會(huì)接觸到悠抹。

切記是在apache的安裝目錄下的htdocs文件夾珠月。

數(shù)據(jù)庫(kù)準(zhǔn)備

環(huán)境雖然搭建好了,但是要想做分頁(yè)楔敌。首先得有數(shù)據(jù)不是啤挎。”巧婦難為無(wú)米之炊“卵凑。下面咱們就來(lái)準(zhǔn)備一下數(shù)據(jù)庆聘。

建庫(kù)

建庫(kù)語(yǔ)句 create database my_database_name;
這里就使用MySQL安裝時(shí)自帶的mysql數(shù)據(jù)庫(kù)好了。也省事一點(diǎn)勺卢。

建表

數(shù)據(jù)的倉(cāng)庫(kù)依然建好了伙判,現(xiàn)在我們要”分隔房間“,也就是數(shù)據(jù)存放地值漫,表澳腹。

create table table_name(···)织盼;

同樣這里為了偷懶使用自帶的數(shù)據(jù)庫(kù)表杨何。詳細(xì)信息如下:

mysql> use mysql
Database changed
mysql> desc innodb_table_stats;
+--------------------------+---------------------+------+-----+-------------------+-----------------------------+
| Field                    | Type                | Null | Key | Default           | Extra                       |
+--------------------------+---------------------+------+-----+-------------------+-----------------------------+
| database_name            | varchar(64)         | NO   | PRI | NULL              |                             |
| table_name               | varchar(64)         | NO   | PRI | NULL              |                             |
| last_update              | timestamp           | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| n_rows                   | bigint(20) unsigned | NO   |     | NULL              |                             |
| clustered_index_size     | bigint(20) unsigned | NO   |     | NULL              |                             |
| sum_of_other_index_sizes | bigint(20) unsigned | NO   |     | NULL              |                             |
+--------------------------+---------------------+------+-----+-------------------+-----------------------------+

預(yù)存數(shù)據(jù)

為了演示的方便,我們需要預(yù)存一些數(shù)據(jù)沥邻。具體使用批量導(dǎo)入還是手動(dòng)添加都無(wú)所謂危虱。核心還是

insert into table_name(···) values(···);

例如唐全,我們存儲(chǔ)好的數(shù)據(jù)如下:

mysql> select * from innodb_table_stats;
+-----------------+----------------+---------------------+--------+----------------------+--------------------------+
| database_name   | table_name     | last_update         | n_rows | clustered_index_size | sum_of_other_index_sizes |
+-----------------+----------------+---------------------+--------+----------------------+--------------------------+
| fams            | admin          | 2016-07-19 14:47:02 |      3 |                    1 |                        0 |
| fams            | assets_in      | 2016-07-14 14:42:44 |      2 |                    1 |                        3 |
| fams            | assets_out     | 2016-07-14 20:14:31 |      4 |                    1 |                        3 |
| fams            | class          | 2016-07-14 14:36:02 |      3 |                    1 |                        0 |
| fams            | dog            | 2016-08-11 15:25:50 |      4 |                    1 |                        0 |
| fams            | fixed_assets   | 2016-07-14 15:55:09 |      6 |                    1 |                        2 |
| fams            | sub_class      | 2016-07-14 14:38:51 |      8 |                    1 |                        1 |
| fams            | user           | 2016-07-14 14:15:59 |      2 |                    1 |                        0 |
| mysql           | gtid_executed  | 2016-07-14 12:50:25 |      0 |                    1 |                        0 |
| privilegesystem | privilege      | 2016-08-08 08:56:21 |      3 |                    1 |                        0 |
| privilegesystem | role           | 2016-08-08 08:26:56 |      2 |                    1 |                        0 |
| privilegesystem | role_privilege | 2016-08-08 09:51:04 |      2 |                    1 |                        1 |
| privilegesystem | user           | 2016-08-08 11:07:35 |      2 |                    1 |                        0 |
| privilegesystem | user_role      | 2016-08-08 11:08:15 |      2 |                    1 |                        2 |
| sys             | sys_config     | 2016-07-14 12:50:30 |      6 |                    1 |                        0 |
| test            | datetest       | 2016-07-19 10:02:38 |      2 |                    1 |                        0 |
+-----------------+----------------+---------------------+--------+----------------------+--------------------------+
16 rows in set (0.00 sec)

PHP拓展準(zhǔn)備

如果是非msi版本的安裝的話埃跷,我們需要手動(dòng)的開啟PHP的拓展,這樣才能使用mysql的一些函數(shù)來(lái)操作數(shù)據(jù)庫(kù)邮利。

php.ini

該文件位于php的安裝目錄弥雹。我們需要把下面代碼前面的分號(hào)去掉即可。

[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll

在PHP的ini文件中延届,注釋是剪勿;

分頁(yè)原理

”萬(wàn)事俱備只欠東風(fēng)“,現(xiàn)在就來(lái)說(shuō)說(shuō)分頁(yè)的核心思想方庭。

那就是當(dāng)前頁(yè)厕吉,頁(yè)面大小,總記錄數(shù)械念。這三個(gè)通過(guò)總記錄數(shù)和頁(yè)面大小头朱,我們就可以計(jì)算出總的頁(yè)數(shù)。然后根據(jù)當(dāng)前頁(yè)來(lái)實(shí)現(xiàn)對(duì)應(yīng)的顯示龄减。

總記錄數(shù)

// 獲取總的記錄數(shù)
$sql_total_records = "select count(*) from innodb_table_stats";
$total_records_result = mysql_query($sql_total_records);
$total_records = mysql_fetch_row($total_records_result);
echo "總的記錄數(shù)位: ".$total_records[0]."<br>";

當(dāng)前頁(yè)

// 通過(guò)GET方式獲得客戶端訪問(wèn)的頁(yè)碼
$current_page_number = isset($_GET['page_number'])?$_GET['page_number']:1;
if($current_page_number<1) {
    $current_page_number =1;
}
if($current_page_number>$total_pages){
    $current_page_number = $total_pages;
}
echo "要訪問(wèn)的頁(yè)碼為:".$current_page_number;

分頁(yè)核心

// 獲取到了要訪問(wèn)的頁(yè)面以及頁(yè)面大小项钮,下面開始分頁(yè)
$begin_position = ($current_page_number-1)*$page_size;
$sql = "select * from innodb_table_stats limit $begin_position,$page_size";
$result = mysql_query($sql);

就這樣我們就可以拿到自己想要的結(jié)果集了。接下來(lái)的就是如何在頁(yè)面上進(jìn)行展示而已。

頁(yè)面展示

// 處理結(jié)果集
echo "<table border='#CCF solid 1px'><th>Mysql Fixed Assets Table</th>";
echo "<tr><td>DbName</td><td>TableName</td><td>Last_update</td><td>n_Nows</td><td>Clustered_Index_Size</td><td>Sum_od_Other_Index_sizes</td></tr>";
while(($row = mysql_fetch_row($result))){
    echo "<tr>";
    echo "<td>".$row[0]."</td>";
    echo "<td>".$row[1]."</td>";
    echo "<td>".$row[2]."</td>";
    echo "<td>".$row[3]."</td>";
    echo "<td>".$row[4]."</td>";
    echo "<td>".$row[5]."</td>";
    echo "</tr>";
}
echo "</table>";

// 循環(huán)顯示總頁(yè)數(shù)
?>
<?php
echo '<a href="SlicePage.php?page_number=1">首頁(yè)</a>&nbsp;&nbsp;';
for($i=1;$i<=$total_pages;$i++){
    echo '<a href="./SlicePage.php?page_number='.$i.'">第'.$i.'頁(yè)</a>&nbsp;&nbsp;';   
}
echo '<a href="SlicePage.php?page_number='.($current_page_number-1).'">上一頁(yè)</a>&nbsp;&nbsp;';
echo '<a href="SlicePage.php?page_number='.($current_page_number+1).'">下一頁(yè)</a>&nbsp;&nbsp;';
echo '<a href="SlicePage.php?page_number='.($total_pages).'">尾頁(yè)</a>&nbsp;&nbsp;';

分頁(yè)實(shí)現(xiàn)

了解了上面的內(nèi)容之后烁巫,下面來(lái)看一下這個(gè)完整的例子吧鳖敷。

代碼SlicePage.php

<meta charset="utf-8">
<?php
//解決中文亂碼,發(fā)現(xiàn)不能奏效,則考慮MySQL客戶端亂碼情況
header("Content-type=text/html;charset=utf-8");

$host = "localhost";
$username = "root";
$password = "mysql";
$dbname = "mysql";

// 開始獲取數(shù)據(jù)庫(kù)連接
$conn = mysql_connect($host,$username,$password) or die(mysql_error());
// 手動(dòng)更改客戶端編碼
mysql_query("set names utf8");
// 選擇使用哪一個(gè)數(shù)據(jù)庫(kù)
mysql_select_db($dbname);

// 獲取總的記錄數(shù)
$sql_total_records = "select count(*) from innodb_table_stats";
$total_records_result = mysql_query($sql_total_records);
$total_records = mysql_fetch_row($total_records_result);
echo "總的記錄數(shù)位: ".$total_records[0]."<br>";


// 獲得總頁(yè)數(shù)程拭,一般來(lái)說(shuō)頁(yè)面大小事固定的定踱,所以這里暫且定為一頁(yè)5個(gè)數(shù)據(jù)
$page_size = 3;
$total_pages = ceil($total_records[0]/$page_size);
echo "總頁(yè)數(shù)為: ".$total_pages;


// 通過(guò)GET方式獲得客戶端訪問(wèn)的頁(yè)碼
$current_page_number = isset($_GET['page_number'])?$_GET['page_number']:1;
if($current_page_number<1) {
    $current_page_number =1;
}
if($current_page_number>$total_pages){
    $current_page_number = $total_pages;
}
echo "要訪問(wèn)的頁(yè)碼為:".$current_page_number;

// 獲取到了要訪問(wèn)的頁(yè)面以及頁(yè)面大小,下面開始分頁(yè)
$begin_position = ($current_page_number-1)*$page_size;
$sql = "select * from innodb_table_stats limit $begin_position,$page_size";
$result = mysql_query($sql);



// 處理結(jié)果集
echo "<table border='#CCF solid 1px'><th>Mysql Fixed Assets Table</th>";
echo "<tr><td>DbName</td><td>TableName</td><td>Last_update</td><td>n_Nows</td><td>Clustered_Index_Size</td><td>Sum_od_Other_Index_sizes</td></tr>";
while(($row = mysql_fetch_row($result))){
    echo "<tr>";
    echo "<td>".$row[0]."</td>";
    echo "<td>".$row[1]."</td>";
    echo "<td>".$row[2]."</td>";
    echo "<td>".$row[3]."</td>";
    echo "<td>".$row[4]."</td>";
    echo "<td>".$row[5]."</td>";
    echo "</tr>";
}
echo "</table>";

// 循環(huán)顯示總頁(yè)數(shù)
?>
<?php
echo '<a href="SlicePage.php?page_number=1">首頁(yè)</a>&nbsp;&nbsp;';
for($i=1;$i<=$total_pages;$i++){
    echo '<a href="./SlicePage.php?page_number='.$i.'">第'.$i.'頁(yè)</a>&nbsp;&nbsp;';   
}
echo '<a href="SlicePage.php?page_number='.($current_page_number-1).'">上一頁(yè)</a>&nbsp;&nbsp;';
echo '<a href="SlicePage.php?page_number='.($current_page_number+1).'">下一頁(yè)</a>&nbsp;&nbsp;';
echo '<a href="SlicePage.php?page_number='.($total_pages).'">尾頁(yè)</a>&nbsp;&nbsp;';
// 釋放數(shù)據(jù)連接資源
mysql_free_result($result);
mysql_close($conn);

?>

結(jié)果

  • 初始頁(yè)為:


    初始化頁(yè)面
  • 點(diǎn)擊頁(yè)碼


    點(diǎn)擊頁(yè)碼頁(yè)面
  • 下一頁(yè)


    點(diǎn)擊下一頁(yè)

總結(jié)

分頁(yè)是一個(gè)很實(shí)用的技術(shù)恃鞋,相比較于Java的實(shí)現(xiàn)崖媚,PHP實(shí)現(xiàn)起來(lái)靈活性還是很高的。解放了繁瑣的面向?qū)ο蟮木幊绦衾耍谒悸非逦臅r(shí)候確實(shí)能給人以美感畅哑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市水由,隨后出現(xiàn)的幾起案子荠呐,更是在濱河造成了極大的恐慌,老刑警劉巖砂客,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泥张,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鞠值,警方通過(guò)查閱死者的電腦和手機(jī)媚创,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)彤恶,“玉大人钞钙,你說(shuō)我怎么就攤上這事∩耄” “怎么了芒炼?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)术徊。 經(jīng)常有香客問(wèn)我本刽,道長(zhǎng),這世上最難降的妖魔是什么弧关? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任盅安,我火速辦了婚禮,結(jié)果婚禮上世囊,老公的妹妹穿的比我還像新娘别瞭。我一直安慰自己,他們只是感情好株憾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布蝙寨。 她就那樣靜靜地躺著晒衩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墙歪。 梳的紋絲不亂的頭發(fā)上听系,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音虹菲,去河邊找鬼靠胜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毕源,可吹牛的內(nèi)容都是我干的浪漠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼霎褐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼址愿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冻璃,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤响谓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后省艳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娘纷,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年拍埠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了失驶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土居。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枣购,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擦耀,到底是詐尸還是另有隱情棉圈,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布眷蜓,位于F島的核電站分瘾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吁系。R本人自食惡果不足惜德召,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汽纤。 院中可真熱鬧上岗,春花似錦、人聲如沸蕴坪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至呆瞻,卻和暖如春台夺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痴脾。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工颤介, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赞赖。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓买窟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親薯定。 傳聞我的和親對(duì)象是個(gè)殘疾皇子始绍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • php+mysql+apache+centos 編譯安裝 領(lǐng)導(dǎo)要求先保證php環(huán)境穩(wěn)定,然后再去考慮其他话侄,例如性能...
    dnaEMx閱讀 2,178評(píng)論 1 16
  • 一亏推、需求來(lái)源 最近在做一個(gè)就業(yè)信息發(fā)布網(wǎng)站,發(fā)布每天的南北校宣講會(huì)信息年堆。此時(shí)前端模型已經(jīng)搭建好吞杭,用的是HTML+C...
    treker閱讀 6,514評(píng)論 4 30
  • Composer Repositories Composer源 Firegento - Magento模塊Comp...
    零一間閱讀 3,956評(píng)論 1 66
  • 1.MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開發(fā)变丧,目前屬于 Oracle 旗下產(chǎn)品芽狗。My...
    黃花菜已涼閱讀 4,563評(píng)論 3 60
  • 在旁觀者眼中我的前半生算是圓滿,兒女雙全痒蓬,考上了985,211大學(xué)童擎。做為人母的我責(zé)任算是完成了,靜心想想自己的半生...
    心若有情閱讀 294評(píng)論 0 0