首先分页你得先查出数据的总记录数$total,sql就是这样:
select count(1) from table
再设置每页要显示的条数$limit
那么显示第1页的sql就是这样:
select * from table limit $limit offset $limit*(1-1)
第2页的sql就是这样:
select * from table limit $limit offset $limit*(2-1)
第3页的sql就是这样:
select * from table limit $limit offset $limit*(3-1)
...
上面的分页sql看起来好像跟总记录数没有关系啊(⊙o⊙)…,但是还有有作用的,根据总记录数可以计算出总页数,有了总页数就可以防止用户点击无效的下一页(当下一页大于总页数时,是无效的页数,就是没有数据的一页)
例子:
message.php:
<?php
$total = select count(1) from table; //$total是你查出的总记录数
$limit = 10; //$limit是每页显示的条数
$LastPage = ceil($total/$limit); //$LastPage为尾页,也就是总页数函数ceil就是向上取整数,如:ceil(3.3) == 4 ceil(3.7) == 4
$pageno = $_GET['pageno'] == null ? 1 : $_GET['pageno']; //$pageno为当前的页数,默认为第1页
if($pageno > $LastPage) {
$pageno = $LastPage;
}
if($pageno < 1) {
$pageno = 1;
}
$messageArray = select * from table limit $limit offset $limit*($pageno-1); //这就是当前页数的数据
?>
<html>
<head><title>分页</title></head>
<body>
<?php
if($messageArray) {
foreach($messageArray as $message) {
//循环写出数据
}
} else {
echo '没有记录';
}
?>
<a href="message.php?pageno=1">首页</a>
<a href="message.php?pageno=<?php echo $pageno-1; ?>">上一页</a>
<a href="message.php?pageno=<?php echo $pageno+1; ?>">下一页</a>
<a href="message.php?pageno=<?php echo $LastPage; ?>">尾页</a>
</body>
</html>
上面这样基本可以实现分页了吧,大牛勿喷,也不知道写错没有!
如果你需要精简分页你还可以写个分页类,如下:
<?php
class Page {
private $pageno;
private $total;
private $limit;
public function __construct() { }
/**
* 设置当前页数
* @param unknown $pageno
*/
public function setPageno($pageno) {
$this->pageno = $pageno;
}
/**
* 设置总记录数
* @param unknown $total
*/
public function setTotal($total) {
$this->total = $total;
}
/**
* 设置limit
* @param unknown $limit
*/
public function setLimit($limit) {
$this->limit = $limit;
}
/**
* 获取当前页码
*/
public function getPageno() {
return $this->pageno;
}
/**
* 获取总记录数
*/
public function getTotal() {
return $this->total;
}
/**
* 获取总页数
* @return number
*/
public function getPageNum() {
return ceil($this->total/$this->limit);
}
/**
* 获取第一页
* @return number
*/
public function getFirstPage() {
return 1;
}
/**
* 获取最后一页
*/
public function getLastPage() {
return $this->getPageNum();
}
/**
* 获取上一页
* @return number
*/
public function getPrePage() {
if($this->getPageno() > 1) {
return $this->getPageno() - 1;
} else {
return 1;
}
}
/**
* 获取下一页
* @return number
*/
public function getNextPage() {
if($this->getPageno() < $this->getPageNum()) {
return $this->getPageno() + 1;
} else {
return $this->getPageNum();
}
}
public function getLimit() {
return $this->limit;
}
public function getOffset() {
return $this->getLimit()*($this->getPageno()-1);
}
}
?>
需要分页的时候先实例化这个类
$page = new Page();
再设置total
$page->setTotal($total);
再设置limit
$page->setLimit($limit);
再设置当前页码
$page->setPageno($pageno);
这样就可以直接得到limit和offset,分页sql就可以这样写
$sql = "select * from table limit ".$page->getLimit()." offset ".$page->getOffset();
上一页的url:message.php?pageno=$page->getPrePage()
下一页的url: message.php?pageno=$page->getNextPage()
这又写了这么多,不管错没有,都写上来了,希望给分页有困难的撸友一些帮助,有错的可以提出来,我会更正的,谢谢!