2022年PHP分页技术 .pdf
分页技术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 从数据库内获取数据并显示了。以下我将用具体代码加以说明。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 3、简单代码3.1 面向过程:?php/ 建立数据库连接$link = mysql_connect(localhost, root, 123456) or die ( Could not connect: . mysql_error(); mysql_query (SET NAMES utf8); /设置 utf8字符集,以正确显示中文信息mysql_select_db(basic_inform,$link) or die ( 不能选择指定的MySQL数据库 : . mysql_error(); / 获取当前页数if( isset($_GETpage) ) $page = intval( $_GETpage ); else $page = 1; / 每页数量$page_size = 1; / 获取总数据量$sql = select count(*) as amount from warn_staff; $result = mysql_query($sql); $row = mysql_fetch_row($result); /var_dump($row);$amount = $row0; / 记算总共有多少页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; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - / 翻页链接$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 = select * from warn_staff order by warnStaffID desc limit . ($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) ? 总共页 3.2 引入 ajax 技术:tempt.php: 分页测试 var xmlHttp; function viewpage(p) /*创建 xmlHttp对象的方法 */if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); / Firefox, Opera 等浏览器 elseif(window.ActiveXObject) / Internet Explorer浏览器 xmlHttp = new ActiveXObject(Microsoft.XMLHTTP); var formData; if(p = 0) formData = userName=+$( EdtUserName).value; else formData = page=+p; var url = tempt2.php; /请求的页面 xmlHttp.open(POST ,url, true); xmlHttp.setRequestHeader(Content-Type, application/x-www-form- urlencoded); xmlHttp.onreadystatechange = handle; /定义回调函数 xmlHttp.send(formData); /*获取编程框(节点)*/function $(id) return document.getElementById(id); /*回调函数 */名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - function handle() if( xmlHttp.readyState = 4) if(xmlHttp.status = 200) /如果服务器返回OK document.getElementById(result).innerHTML = xmlHttp.responseText; else/如果服务器没有返回200 alert( 执行过程中出现问题,服务器返回: +xmlHttp.statusText); temp2.php: ?phpheader(content-type:text/html; charset=UTF-8); $link = mysql_connect (localhost, root, 123456) /建立数据库连接 or die ( 不能连接 MySQL 服务器 : . mysql_error(); mysql_query (SET NAMES utf8); /设置 utf8字符集,以正确显示中文信息mysql_select_db(userlogin,$link) /选择 MySQL服务器下的 userlogin数据库 or die ( 不能选择指定的MySQL数据库 : . mysql_error(); $pageSize = 1;/设置每页显示的记录数$sql = SELECT count(userID) FROM tb_login_info; / SQL 查询语句$result = mysql_query($sql,$link); / 进行查询,获取数据库总的记录数$allPage = mysql_fetch_row($result); $numPage = $allPage0; /总的数据记录数$pages = intval($numPage/$pageSize); / 计算页数if ( isset($_POSTpage)/ 获取客户端传递页码数 $page=intval($_POSTpage); else名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - $page=1; /设置为第一页 mysql_free_result($result); $first = 1; $prev = $page-1; /上一页$next = $page+1; / 下一页$last = $pages; /尾页$offset = $pageSize*($page - 1); /计算记录偏移量$sql = SELECT * FROM tb_login_info ORDER BY userId limit $offset, $pageSize ; / SQL 查询语句$result = mysql_query($sql,$link); /读取指定记录数$row = mysql_fetch_row ($result ); / 从记录集中获取一行记录do for ($i =0; $i 5; $i+) printf (%sn, $row$i); while ($row = mysql_fetch_row($result); mysql_free_result($result); /释放资源echo 页次: .$page./.$pages; echo n共 .$pages. 页 ; if ($page1) echo 首页 ; if ($page1) echo 上页 ; if ($page$pages) echo 下页 ; if ($page$pages) echo 尾页; echo 转到第 页 ; ?名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -