- Oct 01 Thu 2009 13:57
-
[javascript] location.replace() 函數
- Sep 29 Tue 2009 17:06
-
[SMARTY] Smarty 的條件判斷式 {if} , {elseif} , {else}
Smarty 的條件判斷式 {if} , {elseif} , {else}
Smarty 的條件判斷式其實與PHP本身的條件判斷式非常相近,對於熟悉PHP的人來說是相當容易上手的,以下稍微簡單介紹一下Smarty中的 {if} , {elseif} , {else}
- Sep 29 Tue 2009 15:26
-
[PHP] date --- 將本地的時間/日期格式化
- Sep 23 Wed 2009 15:19
-
[SQL] select as的意義
SELECT [table.]field1 [AS alias1]
- Sep 22 Tue 2009 16:36
-
[jQuery] [jQuery筆記] 好用的日期函式 datepicker
- Sep 22 Tue 2009 15:55
-
[PHP] MySQL 資料庫的分頁處理
http://twpug.net/modules/smartsection/item.php?itemid=42
--
--
MySQL 資料庫的分頁處理
由 Kiang 發佈於 02月25日 (10015 次瀏覽)
單純搭配 MySQL 資料庫進行增、刪、改、查功能,對於一般剛開始學習的朋友已經算是一個里程碑,因為可以延伸出相當多的應用;只是當資料筆數持續成長時,看著畫面越拉越長似乎不是辦法,這時候就可以嘗試進行分頁功能。
在設計分頁功能時,第一個會想到的問題是要分幾頁?而分頁的數量是基於符合條件資料總數計算出來,因此我們先嘗試計算這個數字:
接著假定每頁要顯示 20 個項目,計算總頁數:
知道總頁數之後就可以產生相對頁數的連結,像是這樣:
產生的連結是透過網址傳遞希望瀏覽的頁面數字,我們可以透過全域變數取得;但是使用者提供的資料並非絕對正確,而且可能含有惡意的參數,因此需要增加一些過濾的手續:
現在程式流程已經可以知道使用者位於哪個頁面,接著計算該頁面需要出現哪些資料?因為剛剛已經設定了每頁顯示 20 筆資料,因此我們只需要計算這 20 筆資料要從哪裡開始:
因為 MySQL 資料庫的第一筆資料序號為零,因此第一頁的資料是從第零筆開始。
到這裡需要的參數都準備好了,我們就正式到資料庫去取得所需要的資料,並且將它顯示在畫面上:
這裡有兩個需要注意的地方:
1. 養成習慣,取得需要的欄位就好,不要每次都嘗試用星號(*)取得全部資料
2. 實際的操作中記得先確認有沒有符合條件的資料( mysql_num_rows() ),避免程式空轉或是發生未能預期的錯誤
為了不要模糊焦點,這裡選擇了比較粗糙的方式處理。
一個比較陽春的分頁功能這樣就完成了,下面幾個方向就留給各位去思考、練習:
1. 頁數連結太多時該如何處理?
2. 如何重複利用這樣的程式碼?
有了答案不妨透過討論區與大家分享:
http://twpug.net/modules/newbb/viewforum.php?forum=16
最後,程式的實做有太多種方式與可能性,千萬別以為只能、或是應該得這麼做。 :)
在設計分頁功能時,第一個會想到的問題是要分幾頁?而分頁的數量是基於符合條件資料總數計算出來,因此我們先嘗試計算這個數字:
mysql_connect("host","username","pass");
mysql_select_db("dbname");
$result1 = mysql_query('SELECT count(*) FROM table');
$data1 = mysql_fetch_row($result1);
// $data1[0] 就是資料總數接著假定每頁要顯示 20 個項目,計算總頁數:
$per = 20; //每頁顯示項目數量
$pages = ceil($data1[0]/$per); //總頁數知道總頁數之後就可以產生相對頁數的連結,像是這樣:
for($i=1;$i<=$pages;$i++) {
echo '<a href="?page='.$i.'">' . $i . '</a>';
}產生的連結是透過網址傳遞希望瀏覽的頁面數字,我們可以透過全域變數取得;但是使用者提供的資料並非絕對正確,而且可能含有惡意的參數,因此需要增加一些過濾的手續:
if(!isset($_GET["page"])){
$page=1; //設定起始頁
} else {
$page = intval($_GET["page"]); //確認頁數只能夠是數值資料
$page = ($page > 0) ? $page : 1; //確認頁數大於零
$page = ($pages > $page) ? $page : $pages; //確認使用者沒有輸入太神奇的數字
}現在程式流程已經可以知道使用者位於哪個頁面,接著計算該頁面需要出現哪些資料?因為剛剛已經設定了每頁顯示 20 筆資料,因此我們只需要計算這 20 筆資料要從哪裡開始:
$start = ($page-1)*$per; //每頁起始資料序號因為 MySQL 資料庫的第一筆資料序號為零,因此第一頁的資料是從第零筆開始。
到這裡需要的參數都準備好了,我們就正式到資料庫去取得所需要的資料,並且將它顯示在畫面上:
$result2 = mysql_query('SELECT * FROM table LIMIT ' . $start . ', ' . $per);
while($data2 = mysql_fetch_row($result2)) {
print_r($data2);
}這裡有兩個需要注意的地方:
1. 養成習慣,取得需要的欄位就好,不要每次都嘗試用星號(*)取得全部資料
2. 實際的操作中記得先確認有沒有符合條件的資料( mysql_num_rows() ),避免程式空轉或是發生未能預期的錯誤
為了不要模糊焦點,這裡選擇了比較粗糙的方式處理。
一個比較陽春的分頁功能這樣就完成了,下面幾個方向就留給各位去思考、練習:
1. 頁數連結太多時該如何處理?
2. 如何重複利用這樣的程式碼?
有了答案不妨透過討論區與大家分享:
http://twpug.net/modules/newbb/viewforum.php?forum=16
最後,程式的實做有太多種方式與可能性,千萬別以為只能、或是應該得這麼做。 :)
- Sep 22 Tue 2009 11:51
-
[SQL] pgsql不支援LIMIT #,# 語法
為了要做分頁需要用到Limit來select,使用了Limit 0,20的語法,結果都return false = =
Google了一下才知道
The SELECT ... LIMIT #,# syntax will
be removed in the next release. You should change your queries to use separate LIMIT and OFFSET clauses, e.g. LIMIT 10 OFFSET 20.
- Sep 21 Mon 2009 19:10
-
[楚狂人] 大家都愛吃魚不想找魚吃
- Sep 21 Mon 2009 01:12
-
AE-L AF-L按鍵
- Sep 20 Sun 2009 12:16
-
上次談到PTT Trading板的forextw007板友
劇情越來越像藍色蜘蛛網一樣急轉直下,一切都像看小說一樣。
跟單兩個禮拜遇到一次回檔,本來賺的變成沒賺,開始擔心。
人性是遭受虧損時會變得更容易冒險,這時開始擴大本金,更冏的是擴大的錢還是"借"來的,他往後操作的心理壓力可想而知XD
- Sep 20 Sun 2009 01:47
-
職場3大死因 少動、腰粗、高壓力

慘!我快符合三項了 冏"
每週運動要加上有氧運動了.....
●每週應至少累積150分鐘的中等強度有氧運動,例如:快走、騎腳踏車、跳舞等;或累積75分鐘在運動過程中,會感到費力之激烈有氧運動,例如:慢跑、登山、競走等。
- Sep 17 Thu 2009 14:33
-
[CSS] 關於區塊、表格中的文字強迫折行
http://unision.vox.com/library/post/關於區塊表格中的文字強迫折行.html
在區塊或表格中,字母和數字超過寬度時,文字不會折行,而是在一行顯示下去,有沒有強制折行CSS呢?
對於區塊元素DIV、P
正常文字的換行(亞洲文字和非亞洲文字)元素,擁有預設的white-space:normal,當超過定義的寬度之後會自動換行。
IE瀏覽器
連續的英文字符和阿拉伯數字,使用word-wrap : break-word ;或者word-break:break-all;實現強制斷行
#wrap{word-break:break-all; width:200px;} 或者 #wrap{word-wrap:break-word; width:200px;}
Firefox瀏覽器
連續的英文字符和阿拉伯數字的斷行,Firefox並沒有解決這個問題,利用overflow:auto;的屬性讓超出邊界的文字隱藏或者給容器產生捲軸。
對於table
IE瀏覽器
使用 table-layout:fixed;強制table的寬度,多餘內容隱藏。
使用 table-layout:fixed;強制table的寬度,內層td,th採用word-break : break-all;或者word-wrap : break-word ;來強制換行。
Firefox瀏覽器
使用 table-layout:fixed;強制table的寬度,內層td,th採用word-break : break-all;或者word-wrap : break-word ;換行,使用overflow:hidden;隱藏超出內容,這裡overflow:auto;無法起作用。
在區塊或表格中,字母和數字超過寬度時,文字不會折行,而是在一行顯示下去,有沒有強制折行CSS呢?
對於區塊元素DIV、P
正常文字的換行(亞洲文字和非亞洲文字)元素,擁有預設的white-space:normal,當超過定義的寬度之後會自動換行。
IE瀏覽器
連續的英文字符和阿拉伯數字,使用word-wrap : break-word ;或者word-break:break-all;實現強制斷行
#wrap{word-break:break-all; width:200px;} 或者 #wrap{word-wrap:break-word; width:200px;}
Firefox瀏覽器
連續的英文字符和阿拉伯數字的斷行,Firefox並沒有解決這個問題,利用overflow:auto;的屬性讓超出邊界的文字隱藏或者給容器產生捲軸。
對於table
IE瀏覽器
使用 table-layout:fixed;強制table的寬度,多餘內容隱藏。
使用 table-layout:fixed;強制table的寬度,內層td,th採用word-break : break-all;或者word-wrap : break-word ;來強制換行。
Firefox瀏覽器
使用 table-layout:fixed;強制table的寬度,內層td,th採用word-break : break-all;或者word-wrap : break-word ;換行,使用overflow:hidden;隱藏超出內容,這裡overflow:auto;無法起作用。

