PHP从零单排(十四)数据分页显示的原理及实现
2014-05-01 22:05
671 查看
分页显示是WEB编程中最频繁处理的环节之一。所谓分页显示,就是通过程序将结果集一段一段的来显示。实现分页显示,需要两个初始参数:每页显示多少记录和当前是第几页。再加上完整的结果集,就可以实现数据的分页显示。至于其他功能,比如上一页、下一页等均可以根据以上信息加以处理得到。
要取得某表中的前10条记录,可以使用如下SQL语句:
SELECT * FROM a_table LIMIT 0,10
要查找第11到第20条记录,使用的SQL语句如下所示:
SELECT * FROM a_table LIMIT 10,10
如要查找第21条到第30条记录,使用的SQL语句如下所示:
SELECT * FROM a_table LIMIT 20,10
以上SQL语句可以看出,每次取10条记录,相当于每个页面显示10条数据,而每次所要取得记录的起始位置和当期页数之间存在着这样的关系:起始位置=(当前页数-1)*每页要显示的记录数。如果以变量$page_size表示每页显示的记录数,以变量$cur_page表示当前页数,那么上述可以用下面所示的SQL语句模板归纳:
select * from table limit ($cur_page-1)*$page_size,$page_size;
这样,就得到了分页情况下获取数据的SQL语句。其中$page_size可以根据实际情况制定为一个定值,实际开发中,当前页面$cur_page可以由参数传入。另外,数据要显示的总页数,可以在记录总数和每页显示的记录数之间通过计算获得。比如,如果总记录数除以每页显示的记录数后,没有余数,那么总页数就是这二者之商。
<?php
$host='localhost';
$user_name='root';
$password='helloworld';
$conn=mysql_connect($host,$user_name,$password);
if(!$conn)
{
die('FAIL!'.mysql_error());
}
mysql_select_db('test');
if(isset($_GET['page']))
{
$page=$_GET['page'];
}
else
{
$page=1;
}
$page_size=2;
$sql='select * from users';
$result=mysql_query($sql);
$total=mysql_num_rows($result);
if($total)
{
if($total<$page_size)
$page_count=1;
if($total%$page_size)
{
$page_count=(int)($total/$page_size)+1;
}
else
{
$page_count=$total/$page_size;
}
}
else
{
$page_count=0;
}
$turn_page='';
if($page==1)
{
$turn_page.='Index | Before |';
}
else
{
$turn_page.='<a href=13-8.php?page=1>Index</a> | <a href=13-8.php?page='.($page-1).'>Before</a> |';
}
if($page==$page_count || $page_count==0)
{
$turn_page.='Next | Last';
}
else
{
$turn_page.='<a href=13-8.php?page='.($page+1).'> Next </a> | <a href=13-8.php?page='.$page_count.'> Last </a>';
}
$sql='select id,name,sex,age from users limit '.($page-1)*$page_size.','.$page_size;
$result=mysql_query($sql) OR die ("<br/>ERROR:<b>".mysql_error()."</b><br/>SQL:".$sql);
?>
<html>
<head>
<title>13-8.php</title>
</head>
<body>
<table width="75%" border="0" cellpadding="0" cellspacing="1" bgcolor="#7b7b84">
<tr bgcolor="#8bbcc7">
<td height="33"><div align="center"><strong>ID</strong></div></td>
<td><div align="center"><strong>Name</strong></div></td>
<td><div align="center"><strong>Sex</strong></div></td>
<td><div align="center"><strong>Age</strong></div></td>
</tr>
<?php
if($num=mysql_num_rows($result))
{
while($row=mysql_fetch_array($result,MYSQL_ASSOC))
{
?>
<tr bgcolor="#FFFFFF">
<td height="22" align="right"><?php echo $row['id']; ?> </td>
<td height="22"> <?php echo $row['name']; ?> </td>
<td height="22"> <?php echo $row['sex']; ?> </td>
<td height="22"> <?php echo $row['age']; ?> </td>
</tr>
<?php
}
}
echo $turn_page;
mysql_close($conn);
?>
</body>
</html>
**********************
POST GET ,是提交表单的两种方式,GET传值就用$_GET获取,POST提交表单就用$_POST
post与get的区别是一个在地址栏显示参数,另一个不显示
举个例子,如果你登录的时候用get方式,那么你的值就会在地址栏上显示,这样就无安全性可言
而你在搜索或者有页码的时候 用post把参数在地址栏上隐藏起来,这样就毫无意义
而用$_GET可以获得浏览器地址栏上的参数的值(?问号后面的一串字符),比如www.baidu.com/s?wd=123,那么你用$_GET,就可以获取参数(你可以理解为事件,动作,或者参数,该值在传递表单时与input的name一致)为wd的值123,多个参数用&符连接,比如?an=0&si=5理解为an参数的值为0与si参数的值为5。
**********************
打个比方说,你输入一个地址叫 www.iron-feet.cn/?page=2
$_GET["page"]就是获得地址上这个page的值,即得到2
要取得某表中的前10条记录,可以使用如下SQL语句:
SELECT * FROM a_table LIMIT 0,10
要查找第11到第20条记录,使用的SQL语句如下所示:
SELECT * FROM a_table LIMIT 10,10
如要查找第21条到第30条记录,使用的SQL语句如下所示:
SELECT * FROM a_table LIMIT 20,10
以上SQL语句可以看出,每次取10条记录,相当于每个页面显示10条数据,而每次所要取得记录的起始位置和当期页数之间存在着这样的关系:起始位置=(当前页数-1)*每页要显示的记录数。如果以变量$page_size表示每页显示的记录数,以变量$cur_page表示当前页数,那么上述可以用下面所示的SQL语句模板归纳:
select * from table limit ($cur_page-1)*$page_size,$page_size;
这样,就得到了分页情况下获取数据的SQL语句。其中$page_size可以根据实际情况制定为一个定值,实际开发中,当前页面$cur_page可以由参数传入。另外,数据要显示的总页数,可以在记录总数和每页显示的记录数之间通过计算获得。比如,如果总记录数除以每页显示的记录数后,没有余数,那么总页数就是这二者之商。
<?php
$host='localhost';
$user_name='root';
$password='helloworld';
$conn=mysql_connect($host,$user_name,$password);
if(!$conn)
{
die('FAIL!'.mysql_error());
}
mysql_select_db('test');
if(isset($_GET['page']))
{
$page=$_GET['page'];
}
else
{
$page=1;
}
$page_size=2;
$sql='select * from users';
$result=mysql_query($sql);
$total=mysql_num_rows($result);
if($total)
{
if($total<$page_size)
$page_count=1;
if($total%$page_size)
{
$page_count=(int)($total/$page_size)+1;
}
else
{
$page_count=$total/$page_size;
}
}
else
{
$page_count=0;
}
$turn_page='';
if($page==1)
{
$turn_page.='Index | Before |';
}
else
{
$turn_page.='<a href=13-8.php?page=1>Index</a> | <a href=13-8.php?page='.($page-1).'>Before</a> |';
}
if($page==$page_count || $page_count==0)
{
$turn_page.='Next | Last';
}
else
{
$turn_page.='<a href=13-8.php?page='.($page+1).'> Next </a> | <a href=13-8.php?page='.$page_count.'> Last </a>';
}
$sql='select id,name,sex,age from users limit '.($page-1)*$page_size.','.$page_size;
$result=mysql_query($sql) OR die ("<br/>ERROR:<b>".mysql_error()."</b><br/>SQL:".$sql);
?>
<html>
<head>
<title>13-8.php</title>
</head>
<body>
<table width="75%" border="0" cellpadding="0" cellspacing="1" bgcolor="#7b7b84">
<tr bgcolor="#8bbcc7">
<td height="33"><div align="center"><strong>ID</strong></div></td>
<td><div align="center"><strong>Name</strong></div></td>
<td><div align="center"><strong>Sex</strong></div></td>
<td><div align="center"><strong>Age</strong></div></td>
</tr>
<?php
if($num=mysql_num_rows($result))
{
while($row=mysql_fetch_array($result,MYSQL_ASSOC))
{
?>
<tr bgcolor="#FFFFFF">
<td height="22" align="right"><?php echo $row['id']; ?> </td>
<td height="22"> <?php echo $row['name']; ?> </td>
<td height="22"> <?php echo $row['sex']; ?> </td>
<td height="22"> <?php echo $row['age']; ?> </td>
</tr>
<?php
}
}
echo $turn_page;
mysql_close($conn);
?>
</body>
</html>
**********************
POST GET ,是提交表单的两种方式,GET传值就用$_GET获取,POST提交表单就用$_POST
post与get的区别是一个在地址栏显示参数,另一个不显示
举个例子,如果你登录的时候用get方式,那么你的值就会在地址栏上显示,这样就无安全性可言
而你在搜索或者有页码的时候 用post把参数在地址栏上隐藏起来,这样就毫无意义
而用$_GET可以获得浏览器地址栏上的参数的值(?问号后面的一串字符),比如www.baidu.com/s?wd=123,那么你用$_GET,就可以获取参数(你可以理解为事件,动作,或者参数,该值在传递表单时与input的name一致)为wd的值123,多个参数用&符连接,比如?an=0&si=5理解为an参数的值为0与si参数的值为5。
**********************
打个比方说,你输入一个地址叫 www.iron-feet.cn/?page=2
$_GET["page"]就是获得地址上这个page的值,即得到2
相关文章推荐
- PHP从零单排(十四)数据分页显示的原理及实现 分类: PHP 2014-05-01 22:05 325人阅读 评论(0) 收藏
- jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
- jQuery+Ajax+PHP+Mysql实现分页显示数据
- jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
- jQuery+Ajax+PHP+Mysql实现分页显示数据
- jQuery+Ajax+PHP实现异步分页数据显示
- jQuery+Ajax+PHP+Mysql实现分页显示数据
- 纯js实现分页 原理:所有数据已加载好 js通过遍历部分显示 实现分页效果
- jQuery+Ajax+PHP+Mysql实现分页显示数据
- 用PHP实现ODBC数据分页显示一例
- 基于PHP实现数据分页显示功能
- php实现面向对象的数据分页显示
- jQuery+Ajax+PHP+Mysql实现分页显示数据
- jq.ajax+php+mysql实现分页显示数据
- 用PHP实现ODBC数据分页显示一例
- 用PHP实现ODBC数据分页显示一例
- jQuery+Ajax+PHP+Mysql实现分页显示数据
- 06-php雇员管理系统-实现显示雇员信息列表分页改进(可以处理大数据100000条)
- PHP实现数据分页显示的简单实例
- PHP实现数据分页显示的简单实例