发新话题
打印

求分頁代碼

求分頁代碼

如題

TOP

请说的更详细些  谢谢
偶的小家 www.iplayer.cc 欢迎光临
偶的足迹 www.dophp.net
偶的分享 www.iplayer.cc/php

TOP

http://www.dophp.net/viewthread.php?tid=187&extra=page%3D1
我发过了呀 你还留过言 怎么又来这里要??
交流QQ群2:16142493
智能手机软件下载
PHP新手不可错过一帖
PHP新手如何获得积分
论坛需要你,我们大家需要你!

TOP

PHP+MySQL的分页处理

单纯搭配 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() ),避免程序空转或是发生未能预期的错误
为了不要模糊焦点,这里选择了比较粗糙的方式处理,如果实用的话,要再加些修饰和处理。

TOP

恩呢~~~~~~~~~~
顶``~~~~~
*********************************
天地自在,任我逍遥
http://www.dophp.net/
dophp@qq.com
**********************************

TOP

发新话题