PHP分页技术

更新时间:2024-06-08 10:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

分页技术

1、前言

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

2、原理

所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页多少条记录($PageSize)? 当前是第几页($CurrentPageID)?

现在只要再给我一个结果集,我就可以显示某段特定的结果出来。 至于其他的参数,比如:上一页($PReviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。

以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

前10条记录:select * from table limit 0,10 第11至20条记录:select * from table limit 10,10 第21至30条记录:select * from table limit 20,10 ……

这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

3、简单代码 3.1面向过程:

// 建立数据库连接

$link = mysql_connect(\, \, \) or die(\. mysql_error());

mysql_query (\); //设置utf8字符集,以正确显示中文信息 mysql_select_db(\,$link)

or die ( \不能选择指定的MySQL数据库:\. mysql_error());

// 获取当前页数

if( isset($_GET['page']) ){

$page = intval( $_GET['page'] ); } else{

$page = 1; }

// 每页数量

$page_size = 1;

// 获取总数据量

$sql = \; $result = mysql_query($sql); $row = mysql_fetch_row($result); //var_dump($row); $amount = $row[0]; // 记算总共有多少页 if( $amount ){

if( $amount < $page_size ){ $page_count = 1; } //如果总数据量小于$PageSize,那么只有一页

if( $amount % $page_size ){ //取总数据量除以每页数的余数

$page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一 }else{

$page_count = $amount / $page_size; //如果没有余数,则页数等于总数据量除以每页数的结果 } } else{

$page_count = 0; }

// 翻页链接

$page_string = ''; if( $page == 1 ){

$page_string .= '第一页|上一页|'; } else{

$page_string .= '第一页|上一页|'; }

if( ($page == $page_count) || ($page_count == 0) ){ $page_string .= '下一页|尾页'; } else{

$page_string .= '下一页|尾页'; }

// 获取数据,以二维数组格式返回结果 if( $amount ){

$sql = \. ($page-1)*$page_size .\$page_size\; $result = mysql_query($sql);

while ( $row = mysql_fetch_row($result) ){ $rowset[] = $row; } }else{

$rowset = array(); }

//显示数据

foreach ($rowset as $row) {

?>


总共

mysql_free_result($result); //释放与结果集相关联的资源

mysql_close($link); //关闭数据库连接 ?>

3.2引入ajax技术:

tempt.php:

分页测试

temp2.php:

header(\);

$link = mysql_connect (\,\,\) //建立数据库连接 or die ( \不能连接MySQL服务器:\. mysql_error()); mysql_query (\); //设置utf8字符集,以正确显示中文信息 mysql_select_db(\,$link) //选择MySQL服务器下的userlogin数据库 or die ( \不能选择指定的MySQL数据库:\. mysql_error()); $pageSize = 1;//设置每页显示的记录数

$sql = \;// SQL 查询语句 $result = mysql_query($sql,$link); // 进行查询,获取数据库总的记录数 $allPage = mysql_fetch_row($result); $numPage = $allPage[0]; //总的数据记录数

$pages = intval($numPage/$pageSize); // 计算页数 if (isset($_POST['page']))// 获取客户端传递页码数 {

$page=intval($_POST['page']); } else

{

$page=1; //设置为第一页 }

mysql_free_result($result); $first = 1;

$prev = $page-1; //上一页 $next = $page+1; // 下一页 $last = $pages; //尾页

$offset = $pageSize*($page - 1); //计算记录偏移量

$sql = \$offset,$pageSize\;// SQL 查询语句

$result = mysql_query($sql,$link); //读取指定记录数

$row = mysql_fetch_row ($result ); // 从记录集中获取一行记录 do {

for ($i =0; $i < 5; $i++) printf (\, $row[$i]);

}while ($row = mysql_fetch_row($result)); mysql_free_result($result); //释放资源 echo \页次:\.$page.\.$pages; echo \共\.$pages.\页 \;

if ($page>1) echo \onclick=\\\.$first.\href='#'>首页 \;

if ($page>1) echo \onclick=\\\.$prev.\href='#'>上页 \;

if ($page<$pages) echo \.$next.\下页 \;

if ($page<$pages) echo \.$last.\尾页\;

echo \转到第 \; ?>

{

$page=1; //设置为第一页 }

mysql_free_result($result); $first = 1;

$prev = $page-1; //上一页 $next = $page+1; // 下一页 $last = $pages; //尾页

$offset = $pageSize*($page - 1); //计算记录偏移量

$sql = \$offset,$pageSize\;// SQL 查询语句

$result = mysql_query($sql,$link); //读取指定记录数

$row = mysql_fetch_row ($result ); // 从记录集中获取一行记录 do {

for ($i =0; $i < 5; $i++) printf (\, $row[$i]);

}while ($row = mysql_fetch_row($result)); mysql_free_result($result); //释放资源 echo \页次:\.$page.\.$pages; echo \共\.$pages.\页 \;

if ($page>1) echo \onclick=\\\.$first.\href='#'>首页 \;

if ($page>1) echo \onclick=\\\.$prev.\href='#'>上页 \;

if ($page<$pages) echo \.$next.\下页 \;

if ($page<$pages) echo \.$last.\尾页\;

echo \转到第 \; ?>

本文来源:https://www.bwwdw.com/article/mk56.html

Top