首頁 php教程 PHP源码 经典php分页代码与分页原理(1/3)

经典php分页代码与分页原理(1/3)

Jun 08, 2016 pm 05:26 PM
nbsp page quot this

<script>ec(2);</script>

经典php教程分页代码与分页原理
1、前言

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

2、原理

所谓分页显示,也就是将数据库教程中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页多少条记录($pagesize)?
当前是第几页($currentpageid)?

现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
至于其他的参数,比如:上一页($previouspageid)、下一页($nextpageid)、总页数($numpages)等等,都可以根据前边这几个东西得到。
以mysql教程数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
……

这一组sql语句其实就是当$pagesize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($currentpageid - 1) * $pagesize, $pagesize

拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

3、简单代码
请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

// 建立数据库连接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
   or die("could not connect: " . mysql_error());
// 获取当前页数
if( isset($_get['page']) ){
  $page = intval( $_get['page'] );
}
else{
  $page = 1;
}
// 每页数量
$pagesize = 10;
// 获取总数据量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 记算总共有多少页
if( $amount ){
  if( $amount   if( $amount % $page_size ){                 //取总数据量除以每页数的余数
    $page_count = (int)($amount / $page_size) + 1;      //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
  }else{
    $page_count = $amount / $page_size;           //如果没有余数,则页数等于总数据量除以每页数的结果
  }
}
else{
  $page_count = 0;
}

// 翻页链接
$page_string = '';
if( $page == 1 ){
  $page_string .= '第一页|上一页|';
}
else{
  $page_string .= '|上一页|';
}
if( ($page == $page_count) || ($page_count == 0) ){
  $page_string .= '下一页|尾页';
}
else{
  $page_string .= '下一页|尾页';
}
// 获取数据,以二维数组格式返回结果
if( $amount ){
  $sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
  $result = mysql_query($sql);
 
  while ( $row = mysql_fetch_row($result) ){
    $rowset[] = $row;
  }
}else{
  $rowset = array();
}
// 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果
?>


4、oo风格代码
以下代码中的数据库连接是使用的pear db类进行处理

// filename: pager.class.php
// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
class pager
{
  var $pagesize;       //每页的数量
  var $currentpageid;    //当前的页数
  var $nextpageid;      //下一页
  var $previouspageid;    //上一页
  var $numpages;       //总页数
  var $numitems;       //总记录数
  var $isfirstpage;     //是否第一页
  var $islastpage;      //是否最后一页
  var $sql;         //sql查询语句
 
 function pager($option)
  {
    global $db;
    $this->_setoptions($option);
    // 总条数
    if ( !isset($this->numitems) )
    {
      $res = $db->query($this->sql);
      $this->numitems = $res->numrows();
    }
    // 总页数
    if ( $this->numitems > 0 )
    {
      if ( $this->numitems pagesize ){ $this->numpages = 1; }
      if ( $this->numitems % $this->pagesize )
      {
        $this->numpages= (int)($this->numitems / $this->pagesize) + 1;
      }
      else
      {
        $this->numpages = $this->numitems / $this->pagesize;
      }
    }
    else
    {
      $this->numpages = 0;
    }

首页 1 2 3 末页
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解決方法:您的組織要求您更改 PIN 碼 解決方法:您的組織要求您更改 PIN 碼 Oct 04, 2023 pm 05:45 PM

解決方法:您的組織要求您更改 PIN 碼

Windows 11 上調整視窗邊框設定的方法:變更顏色和大小 Windows 11 上調整視窗邊框設定的方法:變更顏色和大小 Sep 22, 2023 am 11:37 AM

Windows 11 上調整視窗邊框設定的方法:變更顏色和大小

Windows 11 上啟用或停用工作列縮圖預覽的方法 Windows 11 上啟用或停用工作列縮圖預覽的方法 Sep 15, 2023 pm 03:57 PM

Windows 11 上啟用或停用工作列縮圖預覽的方法

如何在 Windows 11 上變更標題列顏色? 如何在 Windows 11 上變更標題列顏色? Sep 14, 2023 pm 03:33 PM

如何在 Windows 11 上變更標題列顏色?

OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題 OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題 Jul 16, 2023 pm 03:29 PM

OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題

Windows 11 上的顯示縮放比例調整指南 Windows 11 上的顯示縮放比例調整指南 Sep 19, 2023 pm 06:45 PM

Windows 11 上的顯示縮放比例調整指南

10種在 Windows 11 上調整亮度的方法 10種在 Windows 11 上調整亮度的方法 Dec 18, 2023 pm 02:21 PM

10種在 Windows 11 上調整亮度的方法

如何在Safari中關閉iPhone的隱私瀏覽身份驗證? 如何在Safari中關閉iPhone的隱私瀏覽身份驗證? Nov 29, 2023 pm 11:21 PM

如何在Safari中關閉iPhone的隱私瀏覽身份驗證?

See all articles