分页原理的最核心的内容是:把数据库中某一段的信息分 段的显示在
web页面上,实现这样的功能必须弄清楚以 下
1.
分段显示在不同的页面上,那么页面如何确定 呢?要解决这个问题主要是明白url的结构,使 用parse_url()函数可以解析URL地址得到有 固定键值的数组。实际上,在url中,可以使用 hostname/path?page=value来确定上下页 面,这样问题转化为如何取得page,即当前页 面的值?我们可以使用$_GET['page']解决这个 问题。
2.
解决页面
问题之后,剩下的核心问题是如何去分段?使用limit
查询条件,可以把信息分段出来,关键是如何确定limit后面的 2个变量的值,一个是offset初始值,一个是pagesize,每页 要显示多少内容。假如当前页的值为page,那么offset= (page-1)*pagesize, 例如:select * from ` message` limit 10,5表示的是显示第11-15个信息,共显示5个,当前 页为第3页,(3-1)*5=10。
3.
使用$_SERVER[REQUEST_URL]可以取得当前URL的除去 hostname的部分,当点击下一页或上一页的时候,实际上又 载入了一次页面,那么当前URL就会保留上一个页面的URL信 息导致URL有问题,无法实现分页功能,因此,必须取得当前 URL之后,使用URL解析函数,取得path部分,才能保证 URL不会被更新。
4.
链接数据库以及取得数据库信息的方法不再赘述。只提供可能使 用到的函数以供复习。mysql_connect() die() mysql_error() mysql_select_db() mysql_query() mysql_fetch_array() mysql_num_rows()
以下是一个简单的分页代码(只实现了共?条 ? 页和上一页 下一页 功能): $conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误".
mysql_error()); my
sql_select_db("test", $conn); mysql_query("set names 'GBK'"); //使用GBK中文编码;
$pagesize=5; $numq=mysql_query("SELECT * FROM `message`"); $num = mysql_num_rows($numq);//取得信息总数 if($num>$pagesize){ if($num%$pagesize){ $numpage=(int)($num/$pagesize)+1; }else{$numpage=$num/$pagesize;} }else{$numpage=1;} //计算一共有多少页的信息
$url=$_SERVER[REQUEST_URI]; $url=parse_url($url); $url=$url[path];//取得不会被更新的URL地址的path部分
if(isset($_GET['page'])){ $page=intval($_GET['page']); } //取得当前页page的值
if($page<=0){ $page=1; } //防止page为负数,数据库无法取得信息而报错。
if($page>$numpage){ $page=$numpage; } $offset=($page-1)*$pagesize;//分页的核心原理
echo "共 $num 条 $numpage 页:". "
上一页 下一页"; //上下页的设 计
$sql="select * FROM `message` limit $offset,$pagesize"; $result=mysql_query($sql); while($row=mysql_fetch_array($result)){ echo "
".$row[uid]." | ".$row[remark]; }
?>