删除留言信息
管理员信息经过MD5加密,只能在线修改用户名和密码
特色功能
聊天室,实时的信息交流平台
建立SOCKET会话,根据SMTP协议发送邮件
可在无GD库的空间中正常运行的验证码功能
运用大量PHP和JavaScript函数绘制网页特效
4.2数据表的设计
在着手开发一个Web项目时,数据库的设计通常是第一位要做的,基本上所有的操作都会涉及到数据表的操作。那么数据表的设计就关系到整个项目的设计和功能的实现。网上留言信息需要一个表来存储,另外聊天室也需要一个表来存储信息,因此整个系统需要两个表,具体设计如表2、表3所示:
表2留言信息存储表
字段名
类型
说明
id
Int(6)primrykey
留言id
tname
Varchar(6)
留言者姓名
tx
Int(3)
头像
dtime
Datetime
留言时间
title
Varchar(33)
留言标题
qq
Int(13)
留言者qq
email
Varchar(25)
留言者email
nei
Text
留言内容
htime
Datetime
回复时间
estate
Int(1)
留言状态
hnei
Text
回复内容
ip
Varchar(15)
留言者ip
send_mail
Bool
是否接收回复邮件
表3聊天室信息存储表
字段名
类型
说明
chtime
Datetime
信息发布时间
nick
Varchar(10)
用户名称
words
Varchar(100)
聊天内容
4.3添加功能与管理功能
4.3.1设计方案的介绍
在前面的文章中已经介绍了MVC编程架构的特点,本系统的添加功能与管理功能就是采用MVC编程架构开发的。具体的系统结构如图2所示:
图2添加与管理功能的MVC架构
对添加与管理功能的设计选用的是类似SmartTicket中使用的MVC模式。这种模式的特点是将Controller设计成一个巨大的事物处理器(即:Switch......Case语句),所有由UI收集到的用户需求都转发给Controller进行处理。其具体的工作流程是这样的:View通过"URL?变量名=变量值"的方式向Controller传递一个功能常量,Controller通过PHP系统变量"$_Get"接收到这个常量,然后将其放入Switch......Case语句中,Switch......Case语句根据比较不同的常量,来处理不同的请求,从而完成不同的功能。Controller主要是通过调用Model内的自定义函数、MYSQL数据库操作类以及邮件发送类来处理不同的请求。
下面总结一下这个设计方案的优点和缺点。从上文介绍的工作流程可以看到这种模式的优点是用户控制器提供一个控制和处理请求的集中入口点,它负责接收,截获并处理用户请求;并根据当前状态和业务操作的结果决定向客户呈现的视图。这样做能够控制和协调每个用户跨越多个请求的处理,从而达到了集中管理的目的。这种模式还具有多视图对应一个模型的能力,对多种不同方式的访问请求可以用一个模型来实现,减少了代码的重复和维护量,一旦模型改变也易于维护。其次由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。当然,这种模式也有一个缺陷,那就是随着功能的不断增加Controller将变得过于庞大,这样将影响系统的运行速度,增加用户等待响应的时间。但就本系统的功能而言,用Controller来完成还是绰绰有余的。
4.3.2各部分实现过程的介绍
首先介绍View部分的实现过程。就添加功能而言设计了一个界面优美的视图如图3所示,用户主要是通过填写Html表单完成个人信息以及留言信息的录入,这些数据通过POST方式传递给Controller。另外还用JavaScript的"document.getElementById()"函数在客户端即时获取用户输入的数据,然后再用if判断语句检查用户输入的数据是否标准,如果不标准系统就会通过"document.getElementById(obj_name).innerHTML"变量显示提示语句,明确地告诉用户如何输入正确的数据。
图3留言信息添加界面
就管理功能而言,将视图分为两级,一级是身份验证界面,当用户正确输入用户名、密码以及验证码之后才能进入下一级的管理界面。在管理界面中,每一个功能都对应了一个视图,这样方便了管理员区分和使用不同的功能。
接着介绍Controller部分的实现过程。前文已经介绍了Controller是通过判断视图传递的功能常量来选择相应的功能,下面的表4就给出了不同常量与不同功能的对应关系:
表4常量与功能对应表
常量
功能
add
添加数据
edit
编辑留言信息
huifu
回复留言信息
del
删除留言信息
pldel
批量删除留言信息
admin
确认管理员身份
editadmin
在线修改管理员信息
editgonggao
在线修改公告内容
out
管理员退出
就添加功能而言,Controller会接收到View传递的"add"功能常量,于是Controller会先通过PHP的系统变量"$_POST"来接收用户输入的数据,然后再应用Model内的自定义函数对用户输入的数据进行鉴定和过滤,最后Controller就调用Model内的数据库操作类,通过使用对象的成员函数将数据保存到数据库里。在录入数据的同时,用户还可以选择是否通过邮件接收管理员回复,以及所发的留言是正常显示,还是仅管理员可见。
就管理功能而言,首先要明确的是身份认证的归属,它似乎是应用逻辑的一部分,因此是属于Model。但是如果要限制只有通过验证的用户才能执行特定动作,那么这一要求只能由Controller来完成,因为这些特定的动作必须在Controller内定义,而且只有Controller可以进入Model,所以身份认证归入Controller才是最合理的划分。对身份验证的安全性在Controller内采用了双保险:第一是使用PHP的系统函数"MD5()"对管理员密码进行加密,使得用户只能在网上修改管理员的用户名和密码;第二是使用特色功能里的验证码功能来防止某些用户采用暴力破解方式进行不断的登陆尝试。
当管理员成功登入系统后又面临了一个问题,那就是网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。要解决这个问题就会用到PHP的Session功能,我们通过Session记录用户的有关信息,以供用户再次以此身份对Web服务器提供要求时作确认。具体的实现是这样的:当用户进入网站我们就调用"SESSION_START()"函数打开一个会话期,当管理员成功登入系统后,我们用"$_SESSION[admin]"这个全局变量保存下管理员密码,那么服务器就记录下了管理员的信息,以后在使用其他功能时就不需要用户输入用户名和密码了。当管理员退出系统时,我们可以使用"UNSET($_SESSION[admin])"来销毁保存在服务器端的管理员信息。当然SESSION也存在一些不足之处,如它会占用少许服务器资源以及关闭浏览器即会失效。但换一种角度去思考,"关闭浏览器即会失效"其实是从安全的角度设计的。在整个管理员的会话期里,Controller是通过PHP的系统变量"$_Get"来接收管理员选择的功能常量,然后再让Switch......Case语句根据比较不同的常量,来处理不同的请求,从而完成管理员要求的功能。
最后介绍Model部分的实现过程。Web开发归根结底就是与数据库打交道,对数据操作的封装是最基本的,在设计时应当充分考虑到未来的需要和可扩展性,如果在开发业务逻辑模型期间再对数据操作的封装进行修改,往往可能会伤筋动骨,牵连的内容会较多。本系统涉及的数据表比较单一,即每次操作主要针对一个数据表。因此,在Model内使用PHP语言设计了一个通用的类,只更换数据表即可完成对数据库的操作。在这个类中,成员函数主要实现的功能包括:
(1)初始化成员变量;
(2)连接数据库;
(3)执行SQL语句;
(4)返回当前查寻数据的数据行数;
(5)返回数据总行数;
(6)读取数据;
(7)关闭连接。
通过
上一篇:
基于PHP实现的WEB图片共享系统(论文和程序)
下一篇:
试析影响公路路面平整度的因素及应采取的施工措施