php mysql分页原理

我们还是用上次简易留言板的例子来做示范。

1、首先我们来了解下mysql的limit

limit是限定了一个查询范围,语法规则select * from table limit n,m;其中n可以省略变成select * from table limit m;这种写法等价于select * from table limit 0,m;其中,n表示的是从哪里开始,m表示的是查询几个。

假设我们一页显示10条那么,

第一页的内容就select * from table limit 0,10;

第二页的内容就是select * from table limit 10,10

第三页的内容就是select * from table limit 20,10;

所以第n页的内容就是 select * from table limit (n-1)*10,10;又因为10是固定的可以在前面定义一下,方便修改,比如$pagesize = 10;select * from table limit (n-1)$pagesize,$pagesize;

在我们的例子中就是select * from message limit ($page-1)*$pagesize,$pagesize;

2、然后我们来了解下count

既然我们每一页的内容都有了,然后我们要知道到底有多少个这样的页面,如果有100条我们很清楚将有100/10=10页,如果是101条呢,101/10=10还余1条,这一条也要弄个页面,所以我们要$total/$pagesize向上取整。$total怎么来呢,mysql提供了count()方法。在我们的例子中就是select count(*) from message;

3、现在页数知道了,单前页的数据也有了,我们就可以组织页面了好了看下完整代码吧

 

<?php
//qaforcode.net
$name= $_POST['name'];
$message=htmlspecialchars( $_POST['message']);
$date = date("Y-m-d H:i:s",time());

// 链接数据库
$link = mysql_connect('localhost', 'root', '7088006146') /* 这三个值分别是主机,mysql用户名,mysql密码 因为我们在本地所以主机地址是localhost*/
  or die('无法链接: ' . mysql_error());
mysql_query("set names utf8;");
mysql_select_db('test') or die('无法选择数据库@'); /* 选择数据库 */

if($name && $message){
  if(!get_magic_quotes_gpc()){
    $message = addslashes($message);
  }else{}

  //保存到数据库
  $query = "INSERT INTO message (`name`,`message`,`date`) values ('$name','$message','$date')";
  mysql_query($query) or die('操作失败: ' . mysql_error());

}

$pagesize = 5;
$page = $_GET['page'];
if($page<=0)
  $page = 1;

$result = mysql_query("select count(*) from message");
$total = mysql_result($result,0,0);

// 查询所有的留言
$query = sprintf("SELECT * FROM message order by id desc limit %s,%s",($page-1)*$pagesize,$pagesize);

$result = mysql_query($query) or die('查询失败: ' . mysql_error());

$message = array();
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

  $messages[] = $line;//取出数据
}

// 释放数据库资源
mysql_free_result($result);

// 关闭数据库链接
mysql_close($link);

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php留言板qaforcode.net</title>
</head>
<style>
  a{padding:5px;display:inline-block;border:1px solid #ccc;background:#ccc;color:#fff;}
.cur{background:white;color:#000;}
</style>
<body>
 <table cellpadding="0" cellspacing="0" width="400px;" border="1">
<tr><td style="width:30px;">ID</td><td style="width:50px;">姓名</td><td>留言</td><td style="width:70px;">留言时间</td></tr>
  <?php foreach($messages as $m){?>
  <tr><td><?php echo $m['id']?></td><td><?php echo $m['name']?></td><td><?php echo strip_tags($m['message'])?></td><td><?php echo $m['date']?></td></tr>
<?php }?>
</table>
<div >
  <?php for($i=1;$i<= ceil($total/$pagesize);$i++){?>
<a class="<?php echo $i==$page?'cur':''?>" href="message.php?page=<?php echo $i?>"><?php echo $i;?></a>
<?php }?>
</div>
<form action="" method="post">
   <ul>
   <li><span>姓名:</span><input type="text" name="name" value=""></li>
   <li><span>留言:</span><textarea name="message"></textarea></li> 
   <li><input type="submit" value="提交"></li>

   </ul>
</form>
</body>
</html>

本文固定链接: http://www.qaforcode.net/archives/383 | 猪哥每日一贴

该日志由 趴在树上的猪 于2012年11月29日发表在 mysql, php 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: php mysql分页原理 | 猪哥每日一贴
关键字: , , , , ,

php mysql分页原理:目前有3 条留言

  1. 板凳
    菜鸟学习:

    Notice: Undefined index: name in E:\www\test\message.php on line 3
    Notice: Undefined index: message in E:\www\test\message.php on line 4
    Notice: Undefined index: page in E:\www\test\message.php on line 25
    Notice: Undefined variable: messages in E:\www\test\message.php on line 62
    Warning: Invalid argument supplied for foreach() in E:\www\test\message.php on line 62
    神马意思? :roll:

    2012-12-01 下午 3:18 [回复]
    • 趴在树上的猪:

      notice是小问题,说没有这个下标的内容。worning是严重问题,说foreach的参数不对,foreach必须是数组

      2012-12-03 下午 5:41 [回复]
  2. 沙发
    菜鸟学习:

    😛 大神显灵了,问题解决了

    2012-12-04 下午 8:25 [回复]

发表评论


快捷键:Ctrl+Enter

浙公网安备 33010602001905号