单纯搭配 MySQL 数据库进行增、删、改、查功能,对于一般刚开始学习PHP的朋友已经算是一个里程碑,因为可以延伸出相当多的应用;只是当数据笔数持续成长时,看着画面越拉越长似乎不是办法,这时候就可以尝试进行分页功能。网上查了一下那些狗屁东西,虽是共享出来了,但注释不明,逻辑不清。于是淡水河边这厮就抽空分享一下了。言归正传。
在设计分页功能时,第一个会想到的问题是要分几页?而分页的数量是基于符合条件数据总数计算出来,因此我们先尝试计算这个数字:
复制内容到剪贴板
代码:
mysql_connect("host","username","pass");
mysql_select_db("dbname");
$result1 = mysql_query('Select count(*) FROM table');
$data1 = mysql_fetch_row($result1);
// $data1[0] 就是数据总数接着假定每页要显示 20 个项目,计算总页数:
复制内容到剪贴板
代码:
$per = 20; //每页显示项目数量
$pages = ceil($data1[0]/$per); //总页数知道总页数之后就可以产生相对页数的连结,像是这样:
复制内容到剪贴板
代码:
for($i=1;$i<=$pages;$i++) {
echo '<a href="?page='.$i.'">' . $i . '</a>';
}产生的连结是透过网址传递希望浏览的页面数字,我们可以透过全域变量取得;但是使用者提供的数据并非绝对正确,而且可能含有恶意的参数,因此需要增加一些过滤的手续:
复制内容到剪贴板
代码:
if(!isset($_GET["page"])){
$page=1; //设定起始页
} else {
$page = intval($_GET["page"]); //确认页数只能够是数值数据
$page = ($page > 0) ? $page : 1; //确认页数大于零
$page = ($pages > $page) ? $page : $pages; //确认使用者没有输入太神奇的数字
}现在程序流程已经可以知道使用者位于哪个页面,接着计算该页面需要出现哪些数据?因为刚刚已经设定了每页显示 20 笔数据,因此我们只需要计算这 20 笔数据要从哪里开始:
复制内容到剪贴板
代码:
$start = ($page-1)*$per; //每页起始数据序号因为 MySQL 数据库的第一笔数据序号为零,因此第一页的数据是从第零笔开始。
到这里需要的参数都准备好了,我们就正式到数据库去取得所需要的数据,并且将它显示在画面上:
复制内容到剪贴板
代码:
$result2 = mysql_query('Select * FROM table LIMIT ' . $start . ', ' . $per);
while($data2 = mysql_fetch_row($result2)) {
print_r($data2);
}这里有两个需要注意的地方:
1. 养成习惯,取得需要的字段就好,不要每次都尝试用星号(*)取得全部资料
2. 实际的操作中记得先确认有没有符合条件的数据( mysql_num_rows() ),避免程序空转或是发生未能预期的错误
为了不要模糊焦点,这里选择了比较粗糙的方式处理,如果实用的话,要再加些修饰和处理。