留言板功能介绍
用户利用留言板可以发表自己的留言,管理员可以在后台对留言进行回复或删除管理。

前台:

  • 从数据库中读出已有的留言信息,最新的留言显示在最前面。
  • 当留言数较多时,需要分页显示。
  • 留言表单留言者可以输入的信息为:昵称、电子邮箱(前台不显示)、及留言内容,并通过JAVASCRIPT脚本初步检测信息。
  • 留言处理部分需要对输入的信息再做长度限制级安全性处理,并将合法信息写入数据表中。
  • 如果留言成功,使用html meta的refresh属性自动返回留言显示页面。

后台:

  • 管理员输入管理密码,改密码与user便的信息进行比较验证,也可与配置文件中配置的密码比较
  • 验证通过后,回到留言管理界面,每一条留言都提供一个表单以便于回复留言。
  • 对于不巧当的留言,管理员可以直接删除。

PHP留言板页面布局
conn.php:数据库连接包含文件
config.php:系统配置文件,用于配置每页显示留言条数等
index.php:留言板主界面,用于留言数读取显示及用户留言表单(留言表单在留言显示下方)
submiting.php:助理留言者提交的留言信息
login.php:管理员登录及验证页面
admin.php:留言管理主界面,读取留言数据,提供回复表单及删除等操作界面
reply.php:用于留言回复,删除等具体操作

在phpmyadmin中需要创建两个表guestbook用于储存留言信息(包括昵称,日期,留言内容,电子邮箱,回复),user用于储存管理员信息(包括管理员编号,管理员名称,管理员密码)。

config.php:

<?php$pagesize = 3;$gb_password = 123456;
?>

index.php(核心代码)

<?phprequire("./conn.php");require("./config.php");//确定当前页面$p的参数$p = $_GET['p']?$_GET['p']:1;//数据指针$offset = ($p-1)*$pagesize;$query_sql = "SELECT * FROM guestbook1 ORDER BY id DESC LIMIT  $offset , $pagesize";$result = mysql_query($query_sql);//如果出现错误则退出if(!$result)exit("查询数据错误:".mysql_error());//循环输出while($gb_array = mysql_fetch_array($result)){$content = nl2br($gb_array['content']);$name = nl2br($gb_array['nickname']);echo $name;echo'发表于:'.date("Y-m-d H:i",$gb_array['createtime']).'<br/>';echo'内容:'.nl2br($gb_array['content']).'</br></br>';if(!empty($gb_array['replytime'])) {echo '----------------------------<br />';echo '管理员回复于:',date("Y-m-d H:i", $gb_array['replytime']),'<br />';echo nl2br($gb_array['reply']),'<br /><br />';}echo '<hr />';}//计算留言页数$count_result = mysql_query("select count(*) from guestbook");$count_array  =mysql_fetch_array($count_result);$pagesize = ceil($count_array['count(*)']/$pagesize);//向上舍入为最接近的整数echo'共 '.$count_array['count(*)'].' 条留言';if($pagenum > 1){for($i=1;$i<=pagenum;$i++){if($i == $p){echo'$nbsp;[',$i,']';}   else {echo'$nbsp;<a href="index.php?p=',$i,'">'.$i.'</a>';}}}?>

效果图:

submiting.php:

<?php
error_reporting(E_ALL^E_NOTICE^E_WARNING);//禁止非POST方式访问
if(!isset($_POST['submit'])){exit('非法访问!');
}
//表单信息处理
if(get_magic_quotes_gpc()){$nickname = htmlspecialchars(trim($_POST['nickname']));$email = htmlspecialchars(trim($_POST['email']));$content = htmlspecialchars(trim($_POST['content']));
}   else{$nickname = addslashes(htmlspecialchars(trim($_POST['nickname'])));//addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。$email = addslashes(htmlspecialchars(trim($_POST['email'])));$content = addslashes(htmlspecialchars(trim($_POST['content'])));}
if(strlen($nickname)>16){exit('错误:昵称不得超过16个字符串 [ <a href="javascript:history.back()">返 回</a> ]');
}
if(strlen($nickname)>60){exit('错误:邮箱不得超过60个字符串 [ <a href="javascript:history.back()">返 回</a> ]');
}// 数据写入库表
require("./conn.php");
$createtime = time();
$insert_sql = "INSERT INTO guestbook1(nickname,email,content,createtime)VALUES";
$insert_sql .= "('$nickname','$email','$content',$createtime)";if(mysql_query($insert_sql)){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm
l1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Refresh" content="2;url=index.php">
<title>留言成功</title>
</head>
<body>
<div class="refresh">
<p>留言成功!非常感谢您的留言。<br />请稍后,页面正在返回...</p>
</div>
</body>
</html>
<?php
} else {echo '留言失败:',mysql_error(),'[ <a href="javascript:history.back()">返 回</a> ]';
}?>

效果图:

login.php(略)

效果图:

admin.php(核心代码):

<?php
require("./conn.php");
require("./config.php");$p = $_GET['p']?$_GET['p']:1;
$offset = ($p-1)*$pagesize;
$query_sql = "SELECT * FROM guestbook1 ORDER BY id DESC LIMIT  $offset , $pagesize";
$result = mysql_query($query_sql);
if(!$result) exit('查询数据错误:'.mysql_error());// 循环输出当前页显示数据
while($gb_array = mysql_fetch_array($result)){echo $gb_array['nickname'],'&nbsp;';echo '发表于:',date("Y-m-d H:i:s", $gb_array['createtime']);echo ' ID号:',$gb_array['id'],'<br />';echo '内容:',nl2br($gb_array['content']),'<br />';?>

效果图:

reply.php:

<?php
error_reporting(E_ALL^E_NOTICE^E_WARNING);
session_start();
if(!isset($_SESSION['username'])){header("Location: http://".$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/\\'
)."/login.php");exit;
}
require("./conn.php");
if($_POST){if(get_magic_quotes_gpc()){$reply = htmlspecialchars(trim($_POST['reply']));} else {$reply = addslashes(htmlspecialchars(trim($_POST['reply'])));}// 回复为空时,将回复时间置为空$replytime = $reply?time():'NULL';$update_sql = "UPDATE guestbook1 SET reply = '$reply',replytime = $replytime WHERE id = $_POST[id]";if(mysql_query($update_sql)){exit('<script language="javascript">alert("回复成功!");self.location="admin.php";</script>');} else {exit('留言失败:'.mysql_error().'[ <a href="javascript:history.back()">返 回</a> ]');}
}// 删除留言
if($_GET['action'] == 'delete'){$delete_sql = "DELETE FROM guestbook1 WHERE id = $_GET[id]";if(mysql_query($delete_sql)){exit('<script language="javascript">alert("删除成功!");self.location = "admin.php";</script>');} else {exit('留言失败:'.mysql_error().'[ <a href="javascript:history.back()">返 回</a> ]');}
}
?>

更新线
———————————————————————————————————————————
正常留言后发现显示的留言时间与当前时间相差八个小时整,找到的原因是php.ini文件配置里的时区不对。
1、打开php.ini文件,ctrl+f查找到DATE如下:

将其中的date.timezone 后面的改为GMT-8。

2、date_defalut_timezone_set方法
在使用date()函数前加入如下代码:
date_defalut_timezone_set(“Etc/GMT-8”)

3、直接加上八小时的秒数

<?php
echo date("Y-m-d H:i:s",time()+8*60*60);
?>

PHP实例——留言板相关推荐

  1. 离线存储及实例留言板

    离线存储分为两种:1.客户端储存也称为浏览器存储 (sessionStorage) 2. 硬盘存储(localStorage)且两者用法一致 客户端存储缺点:为当用户关闭浏览器保存数据则消失硬盘存储则 ...

  2. php实现文件留言,PHP文件操作及实例:留言板

    一.文件操作函数 1.创建文件:touch('./xxx.php'); bool touch ( string $filename [, int $time = time() [, int $atim ...

  3. php制作留言板的题_PHP实现留言板功能实例代码

    本文实例为大家分享了php留言板的实现思路,供大家参考,具体内容如下: 1.创建一个存放留言信息的文件名 2.获取表单中的数据给一个变量 3.判断文件的时候存在 4.对文件执行写的操作,在这之前,注意 ...

  4. Vue实例-本地留言板

    好久没有写新的笔记了,今天回想了一下之前学习的Vue知识,现在复习一遍,写写学习事的实例并加以修改一下: 本地记事本: 本地简单的留言板功能,后期其实可以添加盖楼功能的,但是目前先不考虑,大家也可以自 ...

  5. php实例之简单的留言板,PHP实例一之简单的留言板

    注:参考兄弟连教学视频写的一个简单的留言板模块,获得更多内容请参考我的博文. 示例:文本式留言板 需要的知识点: 1.文件操作: file_put_contents();文件的写入函数 file_ge ...

  6. MVC框架简易留言板实例

    MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),即为MVC. 首先创建一个数据库 use master -- ...

  7. java留言板_java实现留言板功能实例

    Messages.html message board 留言板 姓名: E-mail: 主题: 留言: 查看留言 ? MessageData.java package message; public ...

  8. HTML5期末大作业:宠物网站设计——布偶猫(7页)带留言板 HTML+CSS+JavaScript web结课作业的源码 web网页设计实例作业 html大学生网站开发实践作业...

    常见网页设计作业题材有 ​​个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 军 ...

  9. mytag.class.php,织梦CMS/dedecms织梦模板留言板调用{dede:}标签的头部尾部的方法

    织梦模板网站留言板调用网站的head.htm,footer.htm的方法二, 好多人都想在留言本guestbook.htm里实现dede的标签调用,问题是在plus里不支持dede标签的应用. 现在有 ...

最新文章

  1. UML类图符号 各种关系说明以及举例
  2. 用yacc编写的算术运算计算器_详细的mac计算器操作技巧+快捷键分享
  3. STL中的list详解
  4. 【PC工具】震精!这个云办公云平台好强大,UZERME云端超级应用平台
  5. 直播报名 | 官方解读NVIDIA黑科技:StyleGAN的架构与实现
  6. 网信金融 与 金银猫合作
  7. 关于移动端 1px 像素问题
  8. 深入理解javascript之原型和原型链
  9. bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
  10. 深度学习数据集制作_一篇文章搞定人工智能之深度学习创建训练数据集的方法
  11. 微信小程序在线考试系统 刷题考试小程序毕业设计 毕业论文 开题报告和效果图参考
  12. nacos is starting with cluster
  13. 用python计算邮费考虑是否加急,用python计算residuals
  14. switch更新找不到服务器,任天堂Switch最新系统更新 修复数字商店bug
  15. linux双系统重启卡光标,Ubuntu 16.04安装完重启后黑屏,光标一直闪
  16. 二项分布、泊松分布,正态分布(高斯分布)之间的联系与区别
  17. 无线Mesh网构建无线城市
  18. 写分配与写不分配的区别
  19. 计算机所有端口代号,端口类型
  20. 写写自己找工作的经历

热门文章

  1. 安装EA后win10提示系统资源不足,无法完成请求服务的解决方法
  2. 高等数学:第二章 导数与微分(5)隐函数的导数,由参数方程所确定的函数的导数
  3. Linux环境强制删除文件
  4. qlabel显示两行_QLabel 类(老九学堂C++会员友情翻译,不喜勿喷)
  5. 大数据前端可视化大屏--前端开发之路
  6. java开发调用C语言的DLL
  7. 正确启动从GitHub上下载的vue项目:vueAdmin-template
  8. SQL Server2000配远程连接配置
  9. Java学习笔记07-面向对象
  10. Flutter优化加载网络图片及异常捕获