已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

标题: PHP分页,看到有些虎友需要

作者: @Ta

时间: 2014-02-08

点击: 6694

首先分页你得先查出数据的总记录数$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()
这又写了这么多,不管错没有,都写上来了,希望给分页有困难的撸友一些帮助,有错的可以提出来,我会更正的,谢谢!

[隐藏样式|查看源码]


『回复列表(17|隐藏机器人聊天)』

1. @xggz,写得不错{呲牙}
(/@Ta/2014-02-08 12:05//)

2. 赞!
(/@Ta/2014-02-08 12:07//)

3. @拒绝柳岩99次@Future,嘿嘿
(/@Ta/2014-02-08 12:24//)

4. 膜拜。。txt呢。。话说我一直不懂分页。。一直没学。。
(/@Ta/2014-02-08 16:09//)

5. @xggz,你能把附件传上就好了。
(/@Ta/2014-02-08 16:28//)

6. @浪人@东城, 我以前写的一个小程序里的聊天室就有分页,嘿嘿,源码好像在论坛里发过的。http://www.mplogs.com/test/
(/@Ta/2014-02-08 16:52//)

7. @xggz,css不错。。
(/@Ta/2014-02-08 17:32//)

8. @xggz,魔力日志。。
(/@Ta/2015-02-05 18:12//)

9. @Onism,(⊙o⊙)…我去、一年前的了
(/@Ta/2015-02-05 21:19//)

10. @xggz,我说,程序挺好啊~不开源么?给我一份也好~
(/@Ta/2015-02-05 22:04//)

11. @Onism,(⊙o⊙)…以前那个论坛程序不知道被我弄到哪去了
(/@Ta/2015-02-06 11:18//)

12. @xggz,去论坛打包吧。。?反正我是看上你的程序了~不给我就赖下不走了。?????????
(/@Ta/2015-02-06 11:22//)

13. 楼主你写三元运算符会有很多人不懂啊
(/@Ta/2015-02-06 11:36//)

14. @Onism,那是wordpress,哈哈,自个下载去
(/@Ta/2015-02-06 14:02//)

15. @好想发安装包,(⊙o⊙)…这、、
(/@Ta/2015-02-06 14:02//)

16. @xggz,唔~了解
(/@Ta/2015-02-06 14:10//)

17. 高手!
(/@Ta/2015-02-06 14:30//)

回复需要登录

7月6日 05:43 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1