php学习模块之分页的实现

所谓分页操作,就是利用get的传递值时带入的链接中值的变化来实现的,如果要想实现分页操作,要先求出以下几个信息

1.信息的总条数,可以是数据库中数据库中信息的行数,也可以是文件中的条数;

如果说用数据库实现的话,用count(*)来算出信息的总条数;

2.每页显示的信息数量,这个是自己设置的,可以根据个人喜好来设置,不多说;

3.判断当前在第几页,这个很关键,因为后边也要引用,所以如果值不为空的话,是要用改变后的值,可以用if判断当前的页数,如果为空,就设为初值1,否则就用get来获取改变之后的动态值;

4.每页显示的首条数据的编号和每页要显示的条数,同样是显示需要,如果每页显示为3条,总共有10条信息,那么求取是

第一页:0      3

第二页:3       6

第三页:6       9

第四页:9       10

所以求第一个数是:(page-1)*3;而第二个数据就是3,而页数的求值因为不能被整除,所以要多出来一页,就是ceil(总条数/每页显示数),其中ceil为向上取整。

除了数据之外还要做些其他的工作(因为我是用数据库实现的,所以如果不是可以借鉴下思路):

1.要在sql语句对输出的数据加以限制,在查询语句后加limit关键字+我们在4中求出的第一个数和第二个数,中间用逗号隔开;

2.上下页的实现,上下页对page值分别做减一和加一操作,所以要设置两个变量prev和next来保存变化后的量,而这两个变量的值并不是没有限制的,prev最小要为1,而next最大值不能超过总页数,所以还要有个判断过程。

好了,具体就这么多了,下边是我的源代码:

主页:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>留言板</title>
	</head>
	<body>
		<div><h1 align="center">我的留言板</h1></div>
		<hr>
		<div>
			<form action="insertdb.php" method="get">
				<table width="500" border="0" cellpadding="4">
				<tr>
				<td>标题:</td>
				<td><input type="text" id="title" name="title"><br></td>
				</tr>
				<tr>
				<td>内容:</td>
				<td><textarea name="content" rows="13" cols="80"></textarea></td>
				<tr>
				<td colspan="2" align= "center"><input type="submit" name="submit"  value="上传留言">
				<input type="reset" name="reset"  value="重置"></td>
				</tr>
				</table>
		</form>
		</div>
	</body>
	
</html>

数据库头文件mysqli.php 

<?php

$con=mysqli_connect("localhost","root","");
if(!$con){
	exit("连接错误!");
}
mysqli_set_charset($con,"utf8");
mysqli_select_db($con,"test");
?>

插入命令insertdb.php

<?php
	include 'mysqli.php';
	//写sql指令
	header('Content-type:text/html;charset=utf-8');
	$title=$_GET["title"];
	$content=$_GET["content"];
	$sql="insert into liuyan(title,content) values('$title','$content')";
	//如果插入成功
	if($content !="" && mysqli_query($con,$sql)){
		echo '插入成功吼吼吼!!!!<a href="lookdb.php">查看</a>';
	}else if($content !=""){
		echo '请输入内容!!!!!';
	}
	//关闭数据库
	mysqli_close($con);
?>

查看命令lookdb.php

<?php
include 'mysqli.php';
//------------分页-----
//求出数据库中的总数量
$sql="select count(*) as count from liuyan";
$res=mysqli_query($con,$sql);
$countnum=mysqli_fetch_assoc($res);
$count=$countnum["count"];
//设置page的值
$page=empty($_GET["page"]) ? 1 : $_GET["page"];
//设置pagesize的值
$pagesize=3;
//求出最大可以显示的页面
$maxPage=ceil($count/$pagesize);
//求出offset的值
$offset=($page-1)* $pagesize;

//-----------分页-------

$sql="select *from liuyan order by id  asc limit $offset ,$pagesize";
var_dump($sql);
$res=mysqli_query($con,$sql);
echo '<table width="400" border="1" cellpadding="4">';
echo '<tr>';
echo '<th align="center">id号</th>';
echo '<th align="center">内容</th>';
echo '<tr>';
while($obj=mysqli_fetch_assoc($res)){
echo '<tr>';
echo '<td align="center">'.$obj["id"].'</td>';
echo '<td align="center">'.$obj["title"].'</td>';
echo '</tr>';
}
echo'</table>';
$prev=$page-1;
$next=$page+1;
if($next>$maxPage){
	$next=$maxPage;
}

if($prev<1){
	$prev=1;
}

?>
<br/>
<a href="lookdb.php?page=1">首页</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="lookdb.php?page=<?php echo $prev; ?>">上一页</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="lookdb.php?page=<?php echo $next; ?>">下一页</a>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="lookdb.php?page=<?php echo $maxPage; ?>">尾页</a>

猜你喜欢

转载自blog.csdn.net/sinat_35161044/article/details/81810229
今日推荐