国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php中分頁程序之基于留言板詳解

2024-05-04 23:06:46
字體:
來源:轉載
供稿:網友

文章是重點是講php中的分頁原理,同時我們是利用一個實現來講解如何在php中實現分頁,這個就是基于自己寫的留方板程序了,有需要的朋友可以參考一下,很適合于初學者哦。

分頁的關鍵問題其實在于Mysql的一個關鍵字limite這個關鍵字后邊跟的兩個數字,第一個是需要記錄的開始行數,第二個數字是從這個開始行數后取得幾行記錄——這一點大家不要誤以為是從第幾行開始到第幾行結束,相差很遠的。

看看我們index.php的第19行,代碼如下:

$recordSql = $sql. ” LIMIT “.$page*$pagesize.”,”.$pagesize;

其中變量$page的判斷在程序的第8行和第9行得到的,代碼如下:

if(isset($_GET['page'])&&$_GET['page']!=”) $page=$_GET['page'];

else $page=0;

當然大家也看到了$_GET['page']變量這個下文會說到,變量$pagesize我們在第7行自己定義的,也就是每頁顯示多少條記錄,我們定義的是10條,當變量$page=0的時候我們語句最終會是這樣的,代碼如下:

  1. $recordSql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert 
  2.   FROM post a 
  3.   LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b 
  4.   WHERE a.guest_id = b.id 
  5.   ORDER BY a.id DESC 
  6.   " LIMIT 0,10"

就是從0條記錄開始取得10個記錄結果——這個是包括第0條記錄的;

當$page=1的時候呢?可想而知了——這個時候$page*$pagesize=10,當然是從……不說了,再說就羅嗦了。

還有需要說的是,為什么我們要在取得總行數之后才加上這個limit呢,很簡單嘛,如果我們在取得結果記錄數的時候就加上這個limit,我們總行數永遠不會大于10,因為加上之后他最多返回的記錄數就是10啊兄弟。——這個顯然不符合實際情況,所以我們在執行了,代碼如下:

mysql_num_rows(mysql_query($sql));

取得總記錄數,之后才加上limit關鍵字的,好了我們已經取得了總記錄數,設置了每頁顯示的記錄數10,現在我們需要的就只有總頁數了,這個小學的問題我就不說了吧?當然是總記錄數除以每頁顯示的數就是總頁數了——當然也有除不盡的時候,例如總記錄數11每頁顯示10個,我們需要分幾頁呢?當然是兩頁呢,怎么才能讓11/10=2呢?——顯然是錯誤的,但是實際生活就這樣并不是完美的數學。使用ceil函數啊,看看我們現在有什么了啊,代碼如下:

總記錄數,$numRecord = mysql_num_rows(mysql_query($sql));

總頁數,$totalpage = ceil($numRecord/$pagesize);

我們什么都不缺了,就差如何顯示“上一頁下一頁”了,很簡單,兩個判斷就搞定了,看index.php的159-163行,第160行,代碼如下:

if($page>0) echo "<a href=index.php?page=".($page-1).">上一頁|</a>" ;

如果變量$page>0的話,也就是當前的頁碼大于0說明有上一頁,那么就顯示“上一頁”的鏈接,這個鏈接里面的$page需要減一,例如當前頁是2,那么上一頁當然是1了是不是,當我們點擊上一頁的時候,隨著這個鏈接將會把page=1傳遞過去,這種依靠鏈接傳遞變量的方式就是get方法。 這就回到了程序8行9行進行處理了。

在161行,我們做的判斷是,如果當前頁數小于總記錄數-1——因為我們的頁碼是從0開始的,所以總記錄數要減一進行判斷才符合實際。如果這個判斷成立,說明還有下一頁,下一頁的時候$page當然要加一了。

好了整個分頁就是這樣了,只要記住,如何取得總記錄數,如何為sql語句加上limit關鍵字,如何判斷顯示上下頁,一切都ok了,完整的代碼如下:

  1. $pagesize = 10;//每一頁顯示多少留言記錄 
  2. if(isset($_GET['page'])&&$_GET['page']!=''$page=$_GET['page']; 
  3. else $page=0; 
  4. $sql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert 
  5.   FROM post a 
  6.   LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b 
  7.   WHERE a.guest_id = b.id 
  8.   ORDER BY a.id DESC"; 
  9. $numRecord = mysql_num_rows(mysql_query($sql)); 
  10. $totalpage = ceil($numRecord/$pagesize); 
  11. $recordSql = $sql" LIMIT ".$page*$pagesize.",".$pagesize
  12. $result = mysql_query($recordSql); 
  13. <table width="800" border="0" align="center" bgcolor="#fefefe"
  14. <?php 
  15. while($rs=mysql_fetch_object($result)){ 
  16. ?> 
  17.   <tr> 
  18.     <td class="tdhx">留言人:<?php echo $rs->name?> |Email:<?php echo $rs->email?>|QQ:<?php echo $rs->qq?>|留言時間:<?php echo date("Y-m-d H:i:s",$rs->post_time+8*3600)?></td> 
  19.   </tr> 
  20.   <?php 
  21.   if(isset($_SESSION['login'])&&$_SESSION['login']){ 
  22.   ?> 
  23.     <tr> 
  24.     <td class="tdhx"><a href="revert.php?id=<?php echo $rs->id?>">回復</a> | <a href="delete.php?id=<?php echo $rs->id?>">刪除</a></td> 
  25.   </tr> 
  26.   <?php 
  27.   } 
  28.   ?> 
  29.   <tr> 
  30.     <td>留言內容:<?php echo nl2br(htmlspecialchars($rs->post))?><br/> 
  31.     <font color="Red"
  32.     回復內容:<?php echo nl2br(htmlspecialchars($rs->revert))?>[<?php if($rs->revert_time!=""echo date("Y-m-d H:i:s",$rs->revert_time+8*3600)?> ] 
  33.     </font> 
  34.      
  35.     </td> 
  36.   </tr> 
  37.   <tr><td height="3px"  bgcolor="##FF6600"></td></tr> 
  38. <?php 
  39. ?> 
  40. </table> 
  41. <table width="800" border="0" align="center" bgcolor="#B1C3D9"
  42.   <tr> 
  43.     <td > 
  44. <?php  
  45. if($page>0) echo "<a href='index.php?page=".($page-1)."'>上一頁|</a>" ; 
  46. if($page<$totalpage-1) echo "<a href='index.php?page=".($page+1)."'>下一頁</a>" ; 
  47. ?></td> 
  48.   </tr> 
  49. </table> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽宁省| 平原县| 台安县| 威宁| 泾源县| 宁明县| 郁南县| 白银市| 金秀| 武宣县| 米泉市| 兴义市| 拜城县| 平陆县| 西盟| 健康| 敖汉旗| 剑川县| 宁德市| 兰溪市| 巧家县| 磴口县| 新营市| 柳州市| 普洱| 高邮市| 南岸区| 府谷县| 屯留县| 曲阜市| 南靖县| 策勒县| 剑阁县| 南安市| 达孜县| 石泉县| 三门峡市| 滨海县| 宜黄县| 汉阴县| 平安县|