PHP+MySQL实现留言板分页功能

一个经典的测试例子,我建立的数据库名为testdb,数据表名为sktb与testmsg。testmsg表包括7个字段:id,email,title,content,ip,time,other。


<?php
	$mysql_host = 'localhost';
	$mysql_user = 'root';
	$mysql_password = '';
	$mysql_database = 'testdb';
	///*Connect to the local server,可以在函数名前加上 @ 来抑制失败时产生的错误信息。 
	$link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die(mysql_error());
	mysql_select_db($mysql_database) or die(mysql_error());
	//set charset  设定字符集解决汉字问题
	mysql_query("set names 'gbk'");
	
	$rowsPerPage = 3;	//定义每页的行数
	$row = mysql_fetch_assoc(mysql_query("SELECT count(*) AS c FROM testmsg"));	//查询表中的总记录数
	$rows = $row['c'];	//得到表中总记录数

	$pages = ceil($rows / $rowsPerPage);	//计算出页数 
	$curPage = 1;						//当前要显示第几页,默认显示第1页
	//$_REQUEST变量比较大,一般不用。常用的是$_POST,$_GET,二者与form表单method保持一致。$_GET还支持url传值
	if(isset($_GET['curPage']))	//假如用户提交了指定的页数
		$curPage = $_GET['curPage'];	// 就将欲显示的页数设定为用户指定的值
	//倒序查询
	//echo $curPage;
	$sql = "SELECT * FROM testmsg ORDER BY id DESC"." LIMIT ".($curPage -1)*$rowsPerPage.", $rowsPerPage";		//修改sql语句,使得可以查询出指定的结果集
	//echo $sql;
	$result = mysql_query($sql) or die(mysql_error());
	//列表显示----------显示部分内容不变
	while($row = mysql_fetch_assoc($result)){
		echo "<table width = '90%' align = 'center' cellpadding = '1' cellspacing = '1' bgcolor = 'blue'> ";
		echo "	<tr>";
		echo "		<td rowspan='2' width = '25%' bgcolor = 'white'>";
		echo "			<li><span style='color:red;'>编号:</span>{$row['id']}</li>";
		echo "			<li><span style='color:red;'>用户:</span>{$row['email']}</li>";
		echo "			<li><span style='color:red;'>地址:</span>{$row['ip']}</li>";
		echo "			<li><span style='color:red;'>时间:</span>{$row['time']}</li>";
		echo "			<li><font color = 'red'>其他:</font>{$row['other']}";	//html旧式写法
		echo "		</td>";
		echo "		<td bgcolor = 'yellow' ><font color = 'red'>标题:</font><a href = modifyMsg.php?id={$row['id']}>{$row['title']}</td>";
		echo "	</tr>";
		echo "	<tr>";
		echo "	<td bgcolor = 'white' >{$row['content']}</td>";
		echo "	</tr>";
		echo "</table>";
		echo "<br />";
	}
	//显示全部分页的链接
	echo "<div align = 'center'>";
	for($i=1;$i<=$pages;$i++){	//循环显示,每个链接指定curPage属性为其指向的页数就可以了
		echo "<a href='testpage201.php?curPage=$i'>$i</a>  ";
	
	}
	//下拉框分页
	echo "<form name = 'form1' action = 'testpage201.php?curPage=$curPage' method = 'GET'>";
	echo "	<select name= 'curPage' onchange = 'document.form1.submit();'>";
	for($i = 1; $i <=$pages; $i++){
		if($i == $curPage)
			echo "<option selected>$i</option>";
		else
			echo "<option>$i</option>";
	
	}
	echo "	</select>";
	echo "	</form>";
	//首页、前页、后页、末页的链接
	if($curPage>1){
		echo "<a href = 'testpage201.php?curPage=1'>首页</a>  ";
		echo "<a href = 'testpage201.php?curPage=".($curPage-1)."'>前页</a>  ";
	
	}
	if($curPage<$pages){
		echo "<a href='testpage201.php?curPage=".($curPage+1)."'>后页</a>  ";
		echo "<a href = 'testpage201.php?curPage=$pages'>末页</a>  ";
	}
	echo "</div>";
	//列表显示完毕
	
	
	mysql_free_result($result);
	mysql_close($link);
	
	
	//$link->close()等同于mysql_close($link);
	//$result->free()等同于mysql_free_result($result);
	//$link->query($sql)等同于mysql_query($sql,$link);
	
	
	
	
	/*
	MySQL limit的实际用法的详细解析,在我们使用相关的查询语句的时候,一般都要返回前几条或是中间的某几行数据,这时你应如何处理呢?不必担心,MySQL数据库已经为我们提供了这样一个功能。

    SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。MySQL LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

    MySQL> SELECT * FROM table LIMIT 5,10;  

检索记录行 6-15

为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:

    MySQL> SELECT * FROM table LIMIT 95,-1;   

检索记录行 96-last.

如果只给定一个参数,它表示返回最大的记录行数目:

    MySQL> SELECT * FROM table LIMIT 5;  

检索前 5 个记录行。换句话说,LIMIT n 等价于 MySQL LIMIT 0,n。以上的相关内容就是对MySQL limit的用法详解的介绍,望你能有所收获。	*/
?>

<?php
	$link = mysql_connect("localhost","root","");
	$sqlstr = "SELECT * FROM testmsg";
	$send = mysql_db_query("testdb",$sqlstr);
	$fdat = mysql_fetch_row($send);
	$fdat = mysql_fetch_row($send);	//试试调用两次的结果?
	//mysql_fetch_row() 从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。 
	//依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。 

	//print_r($fdat);
	//foreach的两种写法
	//foreach($fdat as $value){
	foreach($fdat as $key => $value){	
		echo "$key:$value<br />";
	}
	
	mysql_data_seek($send,0);	//指针所在位置回到第一条记录上
	$fdat = mysql_fetch_row($send);
	foreach($fdat as $name => $valu){	//key => value 可以换写法命名
		echo "$name:$valu<br />";
	}
	mysql_free_result($send);
	mysql_close($link);
/*
foreach
PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。 

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。 
自PHP 5 起,还可能遍历对象。 

Note: 
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。 

Note: 
除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。 

自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。 

*/

?>

<?php
	$link1 = mysql_connect("localhost","root","");
	$link2 = mysql_connect("localhost","root","");;
	//mysql_close();
	//如果关闭连接,则无输出并报错。
	/*
	bool mysql_close ([ resource $link_identifier ] )
	mysql_close() 关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。如果没有指定 link_identifier,则关闭上一个打开的连接。 
	*/
	$result = mysql_query("select count(*) from testdb.testmsg");	//查询结果集
	$row = mysql_fetch_row($result);	//从结果集中取出一行作为枚举数组返回
	print_r($row);	//输出数据表的总行数的数组信息
	echo $row[0];
?>


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值