PHP实例——留言板
留言板功能介绍
用户利用留言板可以发表自己的留言,管理员可以在后台对留言进行回复或删除管理。
前台:
- 从数据库中读出已有的留言信息,最新的留言显示在最前面。
- 当留言数较多时,需要分页显示。
- 留言表单留言者可以输入的信息为:昵称、电子邮箱(前台不显示)、及留言内容,并通过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'],' ';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.客户端储存也称为浏览器存储 (sessionStorage) 2. 硬盘存储(localStorage)且两者用法一致 客户端存储缺点:为当用户关闭浏览器保存数据则消失硬盘存储则 ...
- php实现文件留言,PHP文件操作及实例:留言板
一.文件操作函数 1.创建文件:touch('./xxx.php'); bool touch ( string $filename [, int $time = time() [, int $atim ...
- php制作留言板的题_PHP实现留言板功能实例代码
本文实例为大家分享了php留言板的实现思路,供大家参考,具体内容如下: 1.创建一个存放留言信息的文件名 2.获取表单中的数据给一个变量 3.判断文件的时候存在 4.对文件执行写的操作,在这之前,注意 ...
- Vue实例-本地留言板
好久没有写新的笔记了,今天回想了一下之前学习的Vue知识,现在复习一遍,写写学习事的实例并加以修改一下: 本地记事本: 本地简单的留言板功能,后期其实可以添加盖楼功能的,但是目前先不考虑,大家也可以自 ...
- php实例之简单的留言板,PHP实例一之简单的留言板
注:参考兄弟连教学视频写的一个简单的留言板模块,获得更多内容请参考我的博文. 示例:文本式留言板 需要的知识点: 1.文件操作: file_put_contents();文件的写入函数 file_ge ...
- MVC框架简易留言板实例
MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),即为MVC. 首先创建一个数据库 use master -- ...
- java留言板_java实现留言板功能实例
Messages.html message board 留言板 姓名: E-mail: 主题: 留言: 查看留言 ? MessageData.java package message; public ...
- HTML5期末大作业:宠物网站设计——布偶猫(7页)带留言板 HTML+CSS+JavaScript web结课作业的源码 web网页设计实例作业 html大学生网站开发实践作业...
常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 军 ...
- mytag.class.php,织梦CMS/dedecms织梦模板留言板调用{dede:}标签的头部尾部的方法
织梦模板网站留言板调用网站的head.htm,footer.htm的方法二, 好多人都想在留言本guestbook.htm里实现dede的标签调用,问题是在plus里不支持dede标签的应用. 现在有 ...
最新文章
- UML类图符号 各种关系说明以及举例
- 用yacc编写的算术运算计算器_详细的mac计算器操作技巧+快捷键分享
- STL中的list详解
- 【PC工具】震精!这个云办公云平台好强大,UZERME云端超级应用平台
- 直播报名 | 官方解读NVIDIA黑科技:StyleGAN的架构与实现
- 网信金融 与 金银猫合作
- 关于移动端 1px 像素问题
- 深入理解javascript之原型和原型链
- bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
- 深度学习数据集制作_一篇文章搞定人工智能之深度学习创建训练数据集的方法
- 微信小程序在线考试系统 刷题考试小程序毕业设计 毕业论文 开题报告和效果图参考
- nacos is starting with cluster
- 用python计算邮费考虑是否加急,用python计算residuals
- switch更新找不到服务器,任天堂Switch最新系统更新 修复数字商店bug
- linux双系统重启卡光标,Ubuntu 16.04安装完重启后黑屏,光标一直闪
- 二项分布、泊松分布,正态分布(高斯分布)之间的联系与区别
- 无线Mesh网构建无线城市
- 写分配与写不分配的区别
- 计算机所有端口代号,端口类型
- 写写自己找工作的经历