PHP案例留言板设计.docx
《PHP案例留言板设计.docx》由会员分享,可在线阅读,更多相关《PHP案例留言板设计.docx(19页珍藏版)》请在冰豆网上搜索。
PHP案例留言板设计
案例留言板设计
一、概述
现在很多网站都考虑到了与用户之间的互动交流,于是出现了各种各样的留言板。
在留言板中,用户可以看到前面使用者的留言,也可以留下自己的言论。
对商务网站,用留言板可以了解用户的需求和意见。
现在,网上也有很多免费的留言板程序,但亲自动手做一个,能体会其中的奥秘,应该是一个不错的主意。
二、系统架构
留言板的功能可大可小,小则简单地让用户浏览留言和写一个短篇留言,具有回复的功能;大则可以做到能按不同讨论分门别类的WebBBS系统,再大就是Web社区系统了。
本案例留言板功能具有:
1.浏览留言。
以一个主页形式,显示留言具有分页浏览功能。
2.回复留言。
通过主页的“回复留言”超级链接,进入写留言页面。
3.隐藏留言。
具有管理员身份的用户具有屏蔽不适宜公布留言的功能,也是在通过主页的“隐藏留言”超级链接,进入留言管理页面。
工作流程图如图1所示:
图1
说明:
1.用户向服务器发出访问请求;
2.服务器根据用户的角色显示主页面的功能
1)一般用户,在留言板的主页面中有浏览和回复功能;
2)管理员,在留言板的主页面中有浏览、回复和屏蔽功能;
3.留言信息记录在数据库中;
4.服务器从数据库中读取留言信息显示在页面上,也把用户的留言存储在数据库中。
三、系统设计
1.逻辑结构设计
根据对系统架构的描述,可得系统的逻辑结构,如图2所示。
主页:
浏览留言
Index.php
链接:
回复留言
链接:
隐藏留言
屏蔽留言:
回复留言
hide.php
链接:
提交
写留言:
回复留言
write.php
链接:
提交
图2
2.数据库设计
在MySQL数据库服务器上建立名为guest数据库,其中包含数据表guestbook,各字段的定义和说明如表1:
表1guest数据库中的数据表guestbook结构
字段
类型
NULL
说明
备注
serial
int(5)
否
留言序列表
auto_increment
name
char(20)
否
使用者姓名
time
timestamp(14)
是
留言时间
msg
text
否
留言内容
email
char(30)
是
使用者邮箱地址
flag
char
(1)
是
显示标志Y/N
缺省为Y
注:
通过phpMyadmin建立,在MySQL的data文件夹中会自动创建以此数据库为名的文件夹,包含相关数据。
本案例用到的SQL命令如表2。
表2本案例用到的SQL命令
命令格式
含义
SELECT*FROMguestbookWHEREflag='Y'ORDERBYtimeDESC
按字段的逆序取回数据表guestbook里的标记flag=’y’的记录信息
INSERTINTOguestbook(name,time,msg,email)values('$name',now(),'$msg','$email')
向数据表guestbook的表尾追加记录
UPDATEguestbookSETflag='N'WHEREserial=$serial
向新数据表guestbook的字段flag信息
3.界面设计
主页界面
标题行
说明行
导航条
留言信息区
留言内容
留言信息区
留言内容
写留言页界面
标题行
昵称文本框
Email文本框
控制按钮:
写好了、重写、放弃
屏蔽留言页
信息操作成功提示行,返回主页。
四、编码实现
1.主页
代码文件:
index.php
//输出HTML头
echo"
留言板
--
a{text-decoration:
none;background-color:
#8080FF;color:
#FFFF80;}
a:
hover{background-color:
#FF80FF;color:
#FFFF80;}
-->
留言板
";
//判断来者是否为管理员----[mark1]
$webmasteIP=array("127.0.0.1");
$isMaster=false;
for($i=0;$i{
if($REMOTE_ADDR==$webmasteIP[$i])
{
$isMaster=true;
break;
}
}
//连接数据库服务器----[mark2]
$connection=@mysql_connect("localhost","root","")ordie("无法连接数据库!
");
@mysql_query("setnames'gb2312'");
@mysql_select_db("guest")ordie("无法选择数据库!
");
//向服务器发送查询请求
$query="SELECT*FROMguestbookWHEREflag='Y'ORDERBYtimeDESC";
$result=mysql_query("$query",$connection)ordie("浏览失败");
//取回留言
$count=0;
while($row=mysql_fetch_array($result))
{
$gb[$count][serial]=$row[serial];
$gb[$count][name]=$row[name];
$gb[$count][time]=$row[time];
$gb[$count][msg]=$row[msg];
$gb[$count][email]=$row[email];
$gb[$count][flag]=$row[falg];
$count++;
}
mysql_close($connection)ordie("无法断开与数据库的连接");
//制作导航条----[mark3]
$indexstr="我要留言|";
//当用户进来时把$page设为0
if(SQUERY_STRING=="")
$page=0;
//计算页数
$count=count($gb);
$msgPerPage=10;
$start=$page*$msgPerPage;
$end=$start+$msgPerPage;
if($end>$count)
$end=$count;
$totalpage=ceil($count/$msgPerPage);
echo"目前留言板共有".$count."条留言,本页列出了第".($start+1)."至".$end."条\n";
//制作页导航
if($page>0)
$indexstr=$indexstr."page=".($page-1).">上一页|";
for($i=0;$i<$totalpage;$i++)
{
if($i!
=$page)
$indexstr=$indexstr."page=$i>第".($i+1)."页";
else
$indexstr=$indexstr."第".($i+1)."页";
if($i!
=($totalpage-1))
$indexstr=$indexstr."|";
}
if($page<$totalpage-1)
$indexstr=$indexstr."page=".($page+1).">下一页";
//输出导航条
echo"
$indexstr
\n";
//输出留言----[mark4]
for($i=$start;$i<$end;$i++)
{
//把换行符转换成
$msg=nl2br($gb[$i][msg]);
//格式化时间输出
$dbdate=$gb[$i][time];
$year=substr($dbdate,0,4);
$month=substr($dbdate,5,2);
$day=substr($dbdate,8,2);
$hour=substr($dbdate,11,2);
$min=substr($dbdate,14,2);
$sec=substr($dbdate,17,2);
$time=$month."".$day."".$year."".$hour.":
".$min.":
".$sec;
//输出一条留言的所有信息
echo"
\n";
echo"";
echo"\n";
echo"";
echo"序列号:
".$gb[$i][serial];
echo"
昵 称:
";
if(trim($gb[$i][email])!
="")
{
echo"".$gb[$i][email].">";
echo"".$gb[$i][name]."";
echo"";
}
echo"
时 间:
".$time;
echo"
action=reply&serial=".$gb[$i][serial].">回复作者";
if($isMaster)
{
echo"|serial=".$gb[$i][serial].">屏蔽这一篇";
}
echo"\n";
echo"[正文]
";
echo$msg;
echo"\n";
echo"\n";
}
echo"
\n";
echo$indexstr;
echo"";
?
>
--index.php--
代码解读
1)输出HTML头
用echo语句把HTML标记作为字符串引入。
2)判断来者是否为管理员----[mark1]
定义了一个数组$webmasteIP,记录留言管理员的IP;
然后检查进来的是不是管理员,记录在$IsMaster;
使用系统变量$REMOTE_ADDR来获取用户的IP。
3)连接数据库服务器----[mark2]
连接数据库服务器;
设置数据库服务器处理的字符集,以处理汉字在浏览器上的显示;
打开数据库guest
按字段time的逆序取回数据表gu