佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1255|回复: 7

php - pagination 教学 [已完成]

[复制链接]
发表于 13-5-2006 04:47 PM | 显示全部楼层 |阅读模式
在学习做网页的我也面对过这个问题,相信很多初学者也有这样的烦恼。。。 从资料库(database)获得一定数量的资料后不知所措。例如资料总数为100笔,但是每页想要显示的资料却限制在25笔,然后接下来的资料就在后来的页数里面显示。如何自动create 出剩余页数的link呢?用 manual 的方式也同样可以达到这个显示要求,不过面对的限制多多,也很费时费力。我特别把这个写上来,希望能够帮到许多初学者(有错误解释的话,高手们请告诉我,我可以改一下)

这个是我把别人的教学翻译成华文,顺便改掉里面的错误过后放上来的。原本的版本在这里
http://www.phpfreaks.com/tutorials/43/1.php
(希望坛主列为教学贴。。。)

好了,现在要开始教学咯!!!

首先要连接资料库和提取资料。。。

  1. <?php
  2.     //第一句是连接资料库的资料,请自行换上你们的连接资料
  3.   //第二句选择资料库,如果连接失败将显示错误讯息
  4.     @mysql_connect($localhost, $user, $password) or die("ERROR--CAN'T CONNECT TO SERVER");
  5.     @mysql_select_db("database") or die("ERROR--CAN'T CONNECT TO DB");

  6.     $limit      = 25;  //每页显示的资料总数为25笔            
  7.    
  8.     $query_count    = "SELECT * FROM table";  //从table里选出资料  
  9.     $result_count   = mysql_query($query_count);   

  10.     $totalrows  = mysql_num_rows($result_count);   //所选出的资料一共有多少笔

  11.     if(empty($page)){    //如果page还没有资料
  12.         $page = 1;      //那么现在表示我们在第一面
  13.     }

  14.     $limitvalue = $page * $limit - ($limit);
  15.     // 例如: (2 * 25) - 25 = 25 <- 假设现在我们在第二面,资料就从第二十五开始
  16.    
  17.     $query  = "SELECT * FROM table LIMIT $limitvalue, $limit";
  18.   //$limitvalue 表示从哪里开始, $limit表示选择多少资料出来
  19.     $result = mysql_query($query) or die("Error: " . mysql_error());
  20.     //如果有error就显示错误讯息
复制代码


今晚回来继续写...

[ 本帖最后由 lakupo 于 13-5-2006 05:24 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 13-5-2006 04:56 PM | 显示全部楼层
继续。。。显示资料

  1.     if(mysql_num_rows($result) == 0){
  2.         echo("Nothing to Display!");//没有符合的资料
  3.     }

  4.   //***接下来format table的颜色,显示时会一深一浅
  5.   $bgcolor = "#E0E0E0"; // light gray

  6.     echo("<table>"); //开始画table
  7.    
  8.     while($row = mysql_fetch_array($result)){ //把资料显示出来(一行一行显示)
  9.             
  10.         //***颜色一深一浅的检查,如果要改颜色可以在这里改
  11.         if($bgcolor == "#E0E0E0"){ //如果上一行是浅灰,这行就变白色
  12.             $bgcolor = "#FFFFFF";
  13.         }else{
  14.             $bgcolor = "#E0E0E0";
  15.         }

  16.        //***开始显示资料***
  17.        echo("<tr bgcolor=".$bgcolor."><td>");
  18.    
  19.        echo($row["users"]); //改成你资料库里的column名
  20.        echo("</td><td>");
  21.    
  22.        echo($row["usersID"]);
  23.        echo("</td></tr>");
  24.    
  25.     } //退出loop..资料已经显示完毕
  26.    
  27.     echo("</table>"); //把桌子关起来

复制代码
回复

使用道具 举报

 楼主| 发表于 13-5-2006 05:13 PM | 显示全部楼层
开始制作link....

  1.    //制作出来的link会像这样.--> PREV 1 2 3 NEXT
  2.   //***这里我们先做prev的link***
  3.    if($page != 1){  //如果不在第一面就create link去上一页
  4.         $pageprev = $page-1;
  5.         echo("<a href="xxx.php?page=$pageprev">PREV</a> "); //xxx.php是你的file name
  6.     }else{
  7.         echo("PREV ");  //不然就只显示prev的字眼,这个字眼是不能按的
  8.     }

  9.     //***开始中间的号码link***
  10.     $numofpages = $totalrows / $limit;
  11.     //计算有多少面,例如102笔资料除于每页25笔资料,答案为4.08
  12.    
  13.     for($i = 1; $i <= $numofpages; $i++){ //我们先拿4来create 4个页面的连接
  14.         if($i == $page){//例如现在我在第三面,3这个字就不会变成link
  15.             echo($i." ");
  16.         }else{
  17.             echo("<a href="xxx.php?page=$i">$i</a> ");
  18.         }
  19.     }   //退出loop

  20.   //***剩下的资料要放进一面里***(比如刚刚我们的total page是4.08,我们只做了4面,这里是第五面
  21.     if(($totalrows % $limit) != 0){//如果剩余数不等于0
  22.         if($i == $page){ //跟上面的一样
  23.             echo($i." ");
  24.         }else{
  25.             echo("<a href="xxx.php?page=$i">$i</a> ");
  26.         }
  27.     }

复制代码

[ 本帖最后由 lakupo 于 13-5-2006 05:19 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 13-5-2006 05:19 PM | 显示全部楼层
最后剩下next link 就完成了!!

  1.     if(($totalrows - ($limit * $page)) > 0){//如果不是最后一面,next link就会被create成link....
  2.         $pagenext   = $page+1;
  3.         echo("<a href="xxx.php?page=$pagenext">NEXT</a>");
  4.     }else{
  5.         echo("NEXT");
  6.     }
  7.    
  8.     mysql_free_result($result); //把从资料库取出的资料消除
复制代码


怎么样?应该瞒容易懂了吧??如果有什么问题请告诉我
回复

使用道具 举报

发表于 15-5-2006 02:57 AM | 显示全部楼层
我的FYP做PHP的,这些资料对我很有用,谢谢你了~
回复

使用道具 举报

发表于 16-5-2006 02:14 PM | 显示全部楼层
多谢楼主分享
但我还是看不太懂
回复

使用道具 举报

Follow Us
发表于 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到底有什么优势呢?
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 13-11-2024 09:52 PM , Processed in 0.159659 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表