查看: 120|回复: 0

PHP分页显示制作详细讲解

[复制链接]
发表于 2009-5-10 02:06:50 | 显示全部楼层 |阅读模式
所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数每页多少条记录($PageSize)? <br />当前是第几页($CurrentPageID)? <br />现在只要再给我一个结果集,我就可以显示某段特定的结果出来。 <br />至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。 <br />  以mysql数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。 <br />  前10条记录:select * from table limit 0,10 <br />  第11至20条记录:select * from table limit 10,10 <br />  第21至30条记录:select * from table limit 20,10 <br />  …… <br />  这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板: <br />select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize <br />  拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。 <br />  3、简单代码 <br />  请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。 <br />&lt;?php <br />// 建立数据库连接 <br />$link = mysql_connect(&quot;localhost&quot;, &quot;mysql_user&quot;, &quot;mysql_password&quot;) <br />   or die(&quot;Could not connect: &quot; . mysql_error()); <br />// 获取当前页数 <br />if( isset($_GET[&#39;page&#39;]) ){ <br />  $page = intval( $_GET[&#39;page&#39;] ); <br />} <br />else{ <br />  $page = 1; <br />} <br />// 每页数量 <br />$PageSize = 10; <br />// 获取总数据量 <br />$sql = &quot;select count(*) as amount from table&quot;; <br />$result = mysql_query($sql); <br />$row = mysql_fetch_row($result); <br />$amount = $row[&#39;amount&#39;]; <br />// 记算总共有多少页 <br />if( $amount ){ <br />  if( $amount &lt; $page_size ){ $page_count = 1; }        //如果总数据量小于$PageSize,那么只有一页 <br />  if( $amount % $page_size ){                 //取总数据量除以每页数的余数 <br />    $page_count = (int)($amount / $page_size) + 1;      //如果有余数,则页数等于总数据量除以每页数的结果取整再加一 <br />  }else{ <br />    $page_count = $amount / $page_size;           //如果没有余数,则页数等于总数据量除以每页数的结果 <br />  } <br />} <br />else{ <br />  $page_count = 0; <br />} <br />// 翻页链接 <br />$page_string = &#39;&#39;; <br />if( $page == 1 ){ <br />  $page_string .= &#39;第一页|上一页|&#39;; <br />} <br />else{ <br />  $page_string .= &#39;&lt;a href=?page=1&gt;第一页&lt;/a&gt;|&lt;a href=?page=&#39;.($page-1).&#39;&gt;上一页&lt;/a&gt;|&#39;; <br />} <br />if( ($page == $page_count) || ($page_count == 0) ){ <br />  $page_string .= &#39;下一页|尾页&#39;; <br />} <br />else{ <br />  $page_string .= &#39;&lt;a href=?page=&#39;.($page+1).&#39;&gt;下一页&lt;/a&gt;|&lt;a href=?page=&#39;.$page_count.&#39;&gt;尾页&lt;/a&gt;&#39;; <br />} <br />// 获取数据,以二维数组格式返回结果 <br />if( $amount ){ <br />  $sql = &quot;select * from table order by id desc limit &quot;. ($page-1)*$page_size .&quot;, $page_size&quot;; <br />  $result = mysql_query($sql); <br />  <br />  while ( $row = mysql_fetch_row($result) ){ <br />    $rowset[] = $row; <br />  } <br />}else{ <br />  $rowset = array(); <br />} <br />// 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果 <br />?&gt; <br /><br /><br /><br /><blockquote class="blockquote">From: http://www.lantuz.com/read.php?tid=4141&page=e&newreply=1&  Powered by PHPWind.com</blockquote>
回复

使用道具 举报

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
QQ客服返回顶部