查看: 1255|回复: 7
|
php - pagination 教学 [已完成]
[复制链接]
|
|
在学习做网页的我也面对过这个问题,相信很多初学者也有这样的烦恼。。。 从资料库(database)获得一定数量的资料后不知所措。例如资料总数为100笔,但是每页想要显示的资料却限制在25笔,然后接下来的资料就在后来的页数里面显示。如何自动create 出剩余页数的link呢?用 manual 的方式也同样可以达到这个显示要求,不过面对的限制多多,也很费时费力。我特别把这个写上来,希望能够帮到许多初学者(有错误解释的话,高手们请告诉我,我可以改一下)
这个是我把别人的教学翻译成华文,顺便改掉里面的错误过后放上来的。原本的版本在这里
http://www.phpfreaks.com/tutorials/43/1.php
(希望坛主列为教学贴。。。)
好了,现在要开始教学咯!!!
首先要连接资料库和提取资料。。。
- <?php
- //第一句是连接资料库的资料,请自行换上你们的连接资料
- //第二句选择资料库,如果连接失败将显示错误讯息
- @mysql_connect($localhost, $user, $password) or die("ERROR--CAN'T CONNECT TO SERVER");
- @mysql_select_db("database") or die("ERROR--CAN'T CONNECT TO DB");
- $limit = 25; //每页显示的资料总数为25笔
-
- $query_count = "SELECT * FROM table"; //从table里选出资料
- $result_count = mysql_query($query_count);
- $totalrows = mysql_num_rows($result_count); //所选出的资料一共有多少笔
- if(empty($page)){ //如果page还没有资料
- $page = 1; //那么现在表示我们在第一面
- }
- $limitvalue = $page * $limit - ($limit);
- // 例如: (2 * 25) - 25 = 25 <- 假设现在我们在第二面,资料就从第二十五开始
-
- $query = "SELECT * FROM table LIMIT $limitvalue, $limit";
- //$limitvalue 表示从哪里开始, $limit表示选择多少资料出来
- $result = mysql_query($query) or die("Error: " . mysql_error());
- //如果有error就显示错误讯息
复制代码
今晚回来继续写...
[ 本帖最后由 lakupo 于 13-5-2006 05:24 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 13-5-2006 04:56 PM
|
显示全部楼层
继续。。。显示资料
- if(mysql_num_rows($result) == 0){
- echo("Nothing to Display!");//没有符合的资料
- }
- //***接下来format table的颜色,显示时会一深一浅
- $bgcolor = "#E0E0E0"; // light gray
- echo("<table>"); //开始画table
-
- while($row = mysql_fetch_array($result)){ //把资料显示出来(一行一行显示)
-
- //***颜色一深一浅的检查,如果要改颜色可以在这里改
- if($bgcolor == "#E0E0E0"){ //如果上一行是浅灰,这行就变白色
- $bgcolor = "#FFFFFF";
- }else{
- $bgcolor = "#E0E0E0";
- }
- //***开始显示资料***
- echo("<tr bgcolor=".$bgcolor."><td>");
-
- echo($row["users"]); //改成你资料库里的column名
- echo("</td><td>");
-
- echo($row["usersID"]);
- echo("</td></tr>");
-
- } //退出loop..资料已经显示完毕
-
- echo("</table>"); //把桌子关起来
复制代码 |
|
|
|
|
|
|
|
楼主 |
发表于 13-5-2006 05:13 PM
|
显示全部楼层
开始制作link....
- //制作出来的link会像这样.--> PREV 1 2 3 NEXT
- //***这里我们先做prev的link***
- if($page != 1){ //如果不在第一面就create link去上一页
- $pageprev = $page-1;
- echo("<a href="xxx.php?page=$pageprev">PREV</a> "); //xxx.php是你的file name
- }else{
- echo("PREV "); //不然就只显示prev的字眼,这个字眼是不能按的
- }
- //***开始中间的号码link***
- $numofpages = $totalrows / $limit;
- //计算有多少面,例如102笔资料除于每页25笔资料,答案为4.08
-
- for($i = 1; $i <= $numofpages; $i++){ //我们先拿4来create 4个页面的连接
- if($i == $page){//例如现在我在第三面,3这个字就不会变成link
- echo($i." ");
- }else{
- echo("<a href="xxx.php?page=$i">$i</a> ");
- }
- } //退出loop
- //***剩下的资料要放进一面里***(比如刚刚我们的total page是4.08,我们只做了4面,这里是第五面
- if(($totalrows % $limit) != 0){//如果剩余数不等于0
- if($i == $page){ //跟上面的一样
- echo($i." ");
- }else{
- echo("<a href="xxx.php?page=$i">$i</a> ");
- }
- }
复制代码
[ 本帖最后由 lakupo 于 13-5-2006 05:19 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 13-5-2006 05:19 PM
|
显示全部楼层
最后剩下next link 就完成了!!
- if(($totalrows - ($limit * $page)) > 0){//如果不是最后一面,next link就会被create成link....
- $pagenext = $page+1;
- echo("<a href="xxx.php?page=$pagenext">NEXT</a>");
- }else{
- echo("NEXT");
- }
-
- mysql_free_result($result); //把从资料库取出的资料消除
复制代码
怎么样?应该瞒容易懂了吧??如果有什么问题请告诉我 |
|
|
|
|
|
|
|
发表于 15-5-2006 02:57 AM
|
显示全部楼层
我的FYP做PHP的,这些资料对我很有用,谢谢你了~ |
|
|
|
|
|
|
|
发表于 16-5-2006 02:14 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 17-5-2006 01:31 AM
|
显示全部楼层
根據不同的 database 語法也有不同
但是, 重點是
SELECT * FROM table LIMIT 0, 25 -> 第一頁, 0 -- 24, 25 筆資料,
SELECT * FROM table LIMIT 25, 25 -> 第二頁, 25 -- 49
SELECT * FROM table LIMIT 50, 25 -> 第三頁, 50 -- 74
所以用動態的方法來產生以上的 sql
$query = "SELECT * FROM table LIMIT $limitvalue, $limit";
至於總共有多少
$totalrows = mysql_num_rows($result_count); //所选出的资料一共有多少笔
其他的 database 可以用 SELECT COUNT(*) FROM table 來取得,
或者用類似 affected_rows 的 function
其他的部分是畫面處理
[ 本帖最后由 flashang 于 17-5-2006 01:36 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 18-5-2006 08:08 PM
|
显示全部楼层
我想问一下,PHP和HTML有什么不同呢?好像做出来的东西都查不都一样的。
PHP到底有什么优势呢? |
|
|
|
|
|
|
| |
本周最热论坛帖子
|