php中分頁程式之基於留言板詳解_PHP教程

來源:互聯網
上載者:User
文章是重點是講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的時候我們語句最終會是這樣的:

代碼如下 複製代碼
$recordSql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert
FROM post a
LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b
WHERE a.guest_id = b.id
ORDER BY a.id DESC
" 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 "上一頁|" ;

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

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

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

完整的代碼

代碼如下 複製代碼

$pagesize = 10;//每一頁顯示多少留言記錄
if(isset($_GET['page'])&&$_GET['page']!='') $page=$_GET['page'];
else $page=0;

$sql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert
FROM post a
LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b
WHERE a.guest_id = b.id
ORDER BY a.id DESC";
$numRecord = mysql_num_rows(mysql_query($sql));
$totalpage = ceil($numRecord/$pagesize);

$recordSql = $sql. " LIMIT ".$page*$pagesize.",".$pagesize;
$result = mysql_query($recordSql);




















while($rs=mysql_fetch_object($result)){?> if(isset($_SESSION['login'])&&$_SESSION['login']){ ?> } ?> }?>
留言人:name?> |Email:email?>|QQ:qq?>|留言時間:post_time+8*3600)?>
id?>">回複 | id?>">刪除
留言內容:post))?>


回複內容:revert))?>[revert_time!="") echo date("Y-m-d H:i:s",$rs->revert_time+8*3600)?> ]








if($page>0) echo "上一頁|" ;
if($page<$totalpage-1) echo "下一頁" ;
?>

http://www.bkjia.com/PHPjc/631302.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631302.htmlTechArticle文章是重點是講php中的分頁原理,同時我們是利用一個實現來講解如何在php中實現分頁,這個就是基於自己寫的留方板程式了,有需要的朋...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.