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];
?>


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的JSP和MySQL数据库的留言实现示例。 1. 创建一个数据库和表来存储留言信息 首先,我们需要创建一个MySQL数据库和一个表来存储留言信息。可以使用以下SQL语句来创建一个名为“message_board”的数据库和一个名为“messages”的表: ``` CREATE DATABASE message_board; USE message_board; CREATE TABLE messages ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, message TEXT NOT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id) ); ``` 2. 创建一个JSP页面来显示留言 接下来,我们将创建一个名为“index.jsp”的JSP页面,该页面将显示留言。在此页面中,我们将使用JSTL标签库来从数据库中检索并显示留言。 ``` <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>留言</title> </head> <body> <h1>留言</h1> <form action="add_message.jsp" method="post"> <label for="name">姓名:</label> <input type="text" name="name" required><br> <label for="email">邮箱:</label> <input type="email" name="email" required><br> <label for="message">留言:</label> <textarea name="message" required></textarea><br> <input type="submit" value="提交留言"> </form> <hr> <c:forEach var="message" items="${messages}"> <h3>${message.name}</h3> <p>时间:${message.created_at}</p> <p>${message.message}</p> <hr> </c:forEach> </body> </html> ``` 在此页面中,我们创建了一个表单,使用户可以输入姓名、电子邮件和留言,并将其提交到“add_message.jsp”页面。我们还使用了JSTL的“forEach”标签来循环遍历从数据库中检索到的留言,并将它们显示在页面上。 3. 创建一个JSP页面来添加新留言 接下来,我们将创建一个名为“add_message.jsp”的JSP页面,该页面将处理提交的表单并将新留言添加到数据库中。 ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.sql.*" %> <% // 获取表单数据 String name = request.getParameter("name"); String email = request.getParameter("email"); String message = request.getParameter("message"); // 连接MySQL数据库 String url = "jdbc:mysql://localhost:3306/message_board"; String username = "root"; String password = "password"; Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, username, password); // 插入新留言 PreparedStatement stmt = conn.prepareStatement("INSERT INTO messages (name, email, message, created_at) VALUES (?, ?, ?, NOW())"); stmt.setString(1, name); stmt.setString(2, email); stmt.setString(3, message); stmt.executeUpdate(); // 关闭连接 stmt.close(); conn.close(); // 重定向到留言页面 response.sendRedirect("index.jsp"); %> ``` 在此页面中,我们获取提交的表单数据,连接到MySQL数据库,并将新留言插入到“messages”表中。然后,我们关闭连接并重定向到留言页面。 4. 测试留言 现在,我们已经创建了留言,可以在浏览器中运行它并测试它。在浏览器中打开“index.jsp”页面,您应该看到一个表单,可以输入姓名、电子邮件和留言。在提交表单后,您应该能够看到新留言留言上的列表中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值