一. 思路整理
实现一个数据分页功能,需要有数据的总条数,每页展示的条数,和当前在第几页这三个参数
通过⌈总条数/每页展示的条数⌉可以得到总页数,比如某留言板有101条留言,每页展示10条,一那就需要11个页面进行展示
数据分页核心就是通过SQL的limit函数来控制当前页显示第几条到第几条,比如第一页limit(0,10),就是第1条到第10条,第二页是limit(11,10),就是第11条到第20条 . . . . . .
用当(前页数-1)*每页显示条数+1就可以得到limit的第一个参数,limit的第二个参数就是当前页显示的数据条数.
二. 3个必要参数
当前页$page使用get方式在url中传入,修改page属性就可以跳转页面,点击上一页下一页等操作都是通过修改page实现的
每页展示条数$listRow在实例化page类时传参的方式定义,通过修改l$istrow就可以设置每页显示的信息条数:
显示的总条数$total通过查询数据库获得:
创建一个数据表messageboard,为了方便只设置id title两个字段
创建数据库连接
$pdoObj = new PDO("mysql:host=localhost;dbname=zhangkwebsite", 'root', 'root');
$pdoObj->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
获取数据的总条数$ncount
$query=$pdoObj->query("select count(*) from messageboard");
$val=$query->fetch(PDO::FETCH_ASSOC);
$ncount=$val['count(*)'];
三. 数据分页类
创建一个数据分页类page,在类中定义好需要使用的变量
classpage{private $total;//总记录数
private $listRows;//每页显示行数
private $limit;//sql语句的limit限制
private $uri;//去掉page属性的uri
private $pageNum;//总页数
private $listNum;//页码数量
总记录数和每页显示的条数在用户实例化类时设置
public function __construct($total,$listRows=10){$this->total=$total;$this->listRows=$listRows;
当前页显示的记录$limit
limit (前页数-1)*每页显示条数+1,每页总条数 和前面的例子完全相同
private functionsetLimit()
{return 'Limit' .' '.($this->page - 1) * $this->listRows .','."{$this->listRows}";
}
setLimit()的返回值将保存在私有变量$limit中,使用__get函数为用户提供一个调用的接口
function __get($args)
{if ($args=="limit"){return $this->limit;
}else
return null;
}
这个字符串在用户查询时拼接在sql语句中
$p=new page($ncount,5);
$query=$pdoObj->query("select * from messageboar