基于php+mysql+mvc的网上留言管理系统设计与实现(毕业论文+程序源码)
大家好,今天给大家介绍基于php+mysql+mvc的网上留言管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
1、项目简介
- 基于PHP实现的网上留言管理系统采用 B/S(Browser/Server)应用架构以及MVC(Model View Controller)编程架构设计开发。具体的开发细节是使用PHP语言完成系统的开发。整个系统不仅能够对网上留言信息进行录入、发布、查询与管理,而且还增加了如:验证码、邮件发送、聊天室、密码管理等功能。这样使得网上留言系统真正成为功能丰富、高效实用的网上信息交流平台。
- 添加功能:
支持心情图片插入
支持输入内容时插入图片
用户基本信息以及留言内容的录入
选择留言信息正常显示或仅管理员可见
选择管理员回复是否另外发送email给自己
发布功能:
显示留言者IP
显示滚动的系统公告
显示留言以及回复信息
屏蔽只有管理员可见的留言信息
显示页面处理时间以及PHP运行时间
支持标题搜索,数据库对标题建有索引
管理功能:
支持在线公告修改
支持批量删除数据
支持回复,编辑,删除留言信息
管理员信息经过MD5加密,只能在线修改用户名和密码
特色功能:
聊天室,实时的信息交流平台
建立SOCKET会话,根据SMTP协议发送邮件
可在无GD库的空间中正常运行的验证码功能
运用大量PHP和JavaScript函数绘制网页特效
2、资源详情
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:12890个字23页
包含内容:整套源码+完整毕业论文
3、关键词:
PHP;B/S;MVC;面向对象;留言系统4、毕设简介
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
1 引言
1.1 课题背景
随着互联网技术的迅猛发展,网络给人们带来了很多便利,我们在很多网站上都能看到各式各样的留言板,它是网站与访客之间进行交流的主要手段之一。一个设计合理,界面优美的网上留言程序能从侧面体现网站良好的服务,给来访用户留下美好的印象,增强用户对网站的信心。
1.2 本课题研究的意义
网上留言系统利用网络一定的时效性和广泛的传播面,可以方便人与人之间的信息交流和互动。对于一般企业而言,网上留言系统能够通过网络提供方便的日常信息管理和交互,同时只需要相对低廉的建设和维护成本。另外,企业还可以通过网上留言系统,为客户提供一个跨地域的交流平台,以便及时了解和掌握客户的需求,加强企业与客户之间的沟通,提高企业的市场竞争力。因此,该课题具有一定的实用价值。
1.3 本课题的研究方法
网上留言系统的整体结构采用的是B/S(Browser/Server)应用架构,在这种架构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在Web服务器实现,客户端只需要浏览器即可进行业务处理。整个系统的设计采用的是MVC(Model View Controller)编程架构,使得功能模块和显示模块能够分离,提高应用系统的可维护性、可扩展性、可移植性和组件的可复用性。留言系统的具体实现是采用服务器端脚本语言PHP来完成对系统后台的开发以及使用Html语言和JavaScript脚本语言来完成对系统前台的开发。
2 留言系统开发语言的介绍
2.1 PHP语言概述
PHP是能让你生成动态网页的工具之一。PHP代表:超文本预处理器 (PHP:Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。PHP很容易学习,但是速度上比Mod_Perl(植入Web服务器的Perl模块)慢。现在有了可以与Mod_Perl速度想媲美的被称作Zend的新引擎,而PHP5就可以充分利用这个引擎。PHP5还引入了新的对象模型(Object Model)。完全重写了PHP处理对象的方式,这样可以提高程序的抽象程度,更接近人的思维方式,使程序结构更清晰并降低编码和维护的工作量。当前PHP与Linux、Apache、MYSQL、Zend构成了性价比最高的Web系统。
应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,对于小项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。PHP是一个不断发展的语言,相信这些问题在不久的将来会得到很好地解决。
2.2 PHP对MYSQL数据库的访问
MYSQL是一个快速、健壮和易用,且支持多线程、多用户的SQL数据库服务器。虽然PHP通过ODBC支持几乎所有的数据库。但对于开发数据驱动的网站而言,选择MYSQL应该说是最佳组合,这不仅因为MYSQL是免费的,更在于它具有与同类大型数据库相媲美甚至超过它们的优良性能。PHP实现对MYSQL数据库的访问有两种方法:
(1)利用PHP的数据库函数连接:
创建MYSQL连接:MYSQL_CONNECT(数据库所在位置,数据库账号,数据库密码)。
数据库选用:MYSQL_SELECT_DB(数据库名)。
执行SQL指令:MYSQL_QUERY(SQL语句,
l
i
n
k
)
。分析表身:
M
Y
S
Q
L
F
E
T
C
H
R
O
W
(
)
函数,必须传入
link)。 分析表身:MYSQL_FETCH_ROW()函数,必须传入
link)。分析表身:MYSQLFETCHROW()函数,必须传入result查询结果变量,再通过for循环,并配合count()函数计算数据行中的列数,将
r
o
w
数组中每一元素显示出来。释放资源:
M
Y
S
Q
L
F
R
E
E
R
E
S
U
L
T
(
row数组中每一元素显示出来。 释放资源:MYSQL_FREE_RESULT(
row数组中每一元素显示出来。释放资源:MYSQLFREERESULT(result)或MYSQL_CLOSE($link)。
(2)通过ODBC连接:
PHP通过ODBC连接MYSQL数据库主要用到四个函数:
ODBC_CONNECT():用来同ODBC数据源建立连接。
ODBC_DO():用来在建立连接之后执行数据库查询。
ODBC_RESULT():用于取得当前记录行中某个字段的值。
ODBC_FETCH_ROW():用来把查询结果保存到数组,每个数组元素对应一条记录。
上述两种方法在与数据库建立连接的语法上,并没有太大差别。不过在相比较之下,通过ODBC方式存取数据库比PHP直接存取MYSQL耗时间,但通过ODBC接口存取数据库不必担心使用何种数据库,如Oracle,Informix,Sybase等。结合网上留言系统在实际当中的应用,还是决定选择PHP直接存取MYSQL的方式来管理数据库。另外以上两种方式都支持ODBC接口,这样可减少更换数据库时需要更改程序的问题。
2.3 JavaScript语言概述
JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、PHP脚本语言一起实现在一个Web页面中链接多个对象,与Web客户交互作用,从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷。
省略
3 留言系统开发架构的介绍
3.1 B/S应用架构的介绍
3.1.1 B/S架构概述
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S(Client/Server)结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,主要的事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑负荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。
以目前的技术看,局域网建立B/S结构的网络应用,并通过 Internet/Intranet模式下建立的数据库应用,相对易于把握,成本也是较低的。B/S结构是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在PHP这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
3.1.2 B/S架构的优点
B/S结构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。
其次是维护和升级方式简单。目前,软件系统的改进和升级越来越频繁, B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点的单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。
最后是成本降低,选择更多。大家都知道Windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上Windows并不是处于绝对的统治地位。现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用哪种操作系统都可以让大部分人使用Windows作为桌面操作系统的电脑不受影响,这就使得最流行Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择是非常盛行的。
比如说很多人每天上“新浪”网,只要安装了浏览器就可以了,并不需要了解“新浪”的服务器用的是什么操作系统,而事实上大部分网站服务器是没有使用Windows操作系统的,但用户的电脑本身安装的大部分是Windows操作系统。
省略
3.2 MVC编程架构的介绍
3.2.1 MVC架构概述
MVC英文即Model,View,Controller,即把一个应用的输入、处理、输出流程按照Model,View,Controller的方式进行分离,这样一个应用层被分为三个层—模型层,视图层、控制层。
视图(View)代表用户交互界面,对于Web来说,可以概括为HTML界面,但也有可能为XHTML、XML、Applet和Flash等。随着应用的复杂性和规模性的提高,界面的处理也变得具有挑战性,一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给Controller和Model。
模型(Model)就是业务流程和状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是暗箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型作了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按照模型设计就可以利用某些技术组件,从而减轻了技术上的困难。对一个开者来说,就可以专注于业务模型的设计。MVC设计模型告诉我们,把应用的模型按照一定的规划抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。
业务模型还有一个很重要的模型那就是数据模型。数据模型主要是指实体对象的数据保存。比如将一张订单保存到数据库中,从数据库获取订单。我们可以将这个模型单独列出,所有有关的数据库的操作只限在该模型中。
控制(Controller)可以理解为从用户接受请求,将模型与视图匹配在一起,共同完成用户的请求,划分控制层的作用很明显,它清楚地告诉开发者,它仅是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层不作任何的数据处理。例如,用户点击一个链接,控制层接收请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,把符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。
总之,模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都能反映这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化与传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如下图(图1)所示:
图1 模型、视图、控制器的关系和功能
3.2.2 MVC架构的优点
当前有相当一部分Web应用程序都是用过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起,直接向数据库发送请求并用HTML显示,开发速度往往比较快,但由于数据页面的分离不是很直接,因而很难体现出业务模型的样子或者模型的重用性。产品设计弹性力度很小,很难满足用户的变化性需求。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC的出现很好地解决了以上问题,它要求对应用分层,虽然要花费额外的工作,但产品的结构清晰,产品的应用通过模型可以得到更好地体现。
首先,MVC最重要的一点是多个视图能共享一个模型。在目前用户需求的快速变化下,可能有多种方式访问应用的要求。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,但对于订单的处理都是一样,也就是说订单的处理是一致的。按MVC设计模式,一个订单模型以及多个视图即可解决问题。这样即减少了代码的复制,又减少了代码的维护量,一旦模型发生改变,也易于维护。并且由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。
其次,将MVC分离可以让不同的专家负责不同的模块,一般情况下,Model部分由熟悉数据库,网络传输的专家来负责;View则交给对UI(User Interface)有研究的专家。这对于项目的管理者而言是多么的诱人,分工意味着可以提高效率并可以按照传统的责任划分来处理软件开发过程。对开发者而言也可以专心于一个领域。这样做的前提是接口要明确,MVC的分离思想正为其提供了基础。
最后,控制器也提供了一个好处,就是可以使用控制器来连接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。总的来说MVC编程架构是有利于软件工程化管理的,因为不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。
省略
4 基于PHP的网上留言管理系统的设计与实现
4.1 功能的确定
网上留言管理系统把用户分成两类,一类是管理员,另一类是客户。管理员负责维护整个留言系统,在对其身份进行确认后,能够对网上留言进行回复、修改以及删除。客户则可以直接录入、查看和查询网上留言信息。具体要实现的内容如表1所示:
表1 系统详细功能介绍
4.2 数据表的设计
在着手开发一个Web项目时,数据库的设计通常是第一位要做的,基本上所有的操作都会涉及到数据表的操作。那么数据表的设计就关系到整个项目的设计和功能的实现。网上留言信息需要一个表来存储,另外聊天室也需要一个表来存储信息,因此整个系统需要两个表,具体设计如表2、表3所示:
4.3 添加功能与管理功能的设计与实现
4.3.1 设计方案的介绍
在前面的文章中已经介绍了MVC编程架构的特点,本系统的添加功能与管理功能就是采用MVC编程架构开发的。具体的系统结构如图2所示:
图2 添加与管理功能的MVC架构
对添加与管理功能的设计选用的是类似Smart Ticket中使用的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 常量与功能对应表
就添加功能而言,Controller会接收到View传递的“add”功能常量,于是Controller会先通过PHP的系统变量“$_POST”来接收用户输入的数据,然后再应用Model内的自定义函数对用户输入的数据进行鉴定和过滤,最后Controller就调用Model内的数据库操作类,通过使用对象的成员函数将数据保存到数据库里。在录入数据的同时,用户还可以选择是否通过邮件接收管理员回复,以及所发的留言是正常显示,还是仅管理员可见。
就管理功能而言,首先要明确的是身份认证的归属,它似乎是应用逻辑的一部分,因此是属于Model。但是如果要限制只有通过验证的用户才能执行特定动作,那么这一要求只能由Controller来完成,因为这些特定的动作必须在Controller内定义,而且只有Controller可以进入Model,所以身份认证归入Controller才是最合理的划分。对身份验证的安全性在Controller内采用了双保险:第一是使用PHP的系统函数“MD5()”对管理员密码进行加密,使得用户只能在网上修改管理员的用户名和密码;第二是使用特色功能里的验证码功能来防止某些用户采用暴力破解方式进行不断的登陆尝试。
当管理员成功登入系统后又面临了一个问题,那就是网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。要解决这个问题就会用到PHP的Session功能,我们通过Session记录用户的有关信息,以供用户再次以此身份对Web服务器提供要求时作确认。具体的实现是这样的:当用户进入网站我们就调用“SESSION_START()”函数打开一个会话期,当管理员成功登入系统后,我们用“ S E S S I O N [ a d m i n ] ”这个全局变量保存下管理员密码,那么服务器就记录下了管理员的信息,以后在使用其他功能时就不需要用户输入用户名和密码了。当管理员退出系统时,我们可以使用“ U N S E T ( _SESSION[admin]”这个全局变量保存下管理员密码,那么服务器就记录下了管理员的信息,以后在使用其他功能时就不需要用户输入用户名和密码了。当管理员退出系统时,我们可以使用“UNSET( SESSION[admin]”这个全局变量保存下管理员密码,那么服务器就记录下了管理员的信息,以后在使用其他功能时就不需要用户输入用户名和密码了。当管理员退出系统时,我们可以使用“UNSET(_SESSION[admin])”来销毁保存在服务器端的管理员信息。当然SESSION也存在一些不足之处,如它会占用少许服务器资源以及关闭浏览器即会失效。但换一种角度去思考,“关闭浏览器即会失效”其实是从安全的角度设计的。在整个管理员的会话期里,Controller是通过PHP的系统变量“$_Get”来接收管理员选择的功能常量,然后再让 Switch……Case语句根据比较不同的常量,来处理不同的请求,从而完成管理员要求的功能。
最后介绍Model部分的实现过程。Web开发归根结底就是与数据库打交道,对数据操作的封装是最基本的,在设计时应当充分考虑到未来的需要和可扩展性,如果在开发业务逻辑模型期间再对数据操作的封装进行修改,往往可能会伤筋动骨,牵连的内容会较多。本系统涉及的数据表比较单一,即每次操作主要针对一个数据表。因此,在Model内使用PHP语言设计了一个通用的类,只更换数据表即可完成对数据库的操作。在这个类中,成员函数主要实现的功能包括:
(1)初始化成员变量;
(2)连接数据库;
(3)执行SQL语句;
(4)返回当前查寻数据的数据行数;
(5)返回数据总行数;
(6)读取数据;
(7)关闭连接。
通过这个类就将系统对数据库的操作封装起来,方便Controller的操作,同时也使系统更安全了。
另外还设计了一个邮件发送类。开发这个类的目的在于满足一些用户希望通过Email接收管理员回复的要求。这个类支持两种发送Email的方法:第一种,使用PHP自带的“MAIL()”函数来发送;第二种,使用SMTP协议的SOCKET发送。由于PHP没有提供现成的SMTP函数,只提供了一个功能不甚灵活的“MAIL()”函数,这个函数需要服务器配置上的支持,并且不支持SMTP验证,在很多场合无法正常的工作,因此才开发了第二种发送Email的方法来弥补第一种方式的不足。第二种发送方式实际上是利用PHP的SOCKET函数来和SMTP服务器建立一个连接,然后发送文本的命令给服务器,一封内容简单的邮件就发送出去了。第二种方式的好处在于PHP中已经存在很多现成的封装得很好的类或者函数替我们完成底层的SOCKET级操作,只需要直接拿来用就好,而不用在本文里去讨论底层的代码。下面就给出通过SOCKET发送Email的具体实现过程:
(1)创建SOCK,并打开连接;
(2)设置为阻塞模式;
(3)测试SMTP应答码是否为220,220代表邮件服务就绪;
(4)发送用户身份验证,然后读取服务器端发送给客户端的返回数据;
(5)发送AUTH LOGIN命令;
(6)发送用户名以及密码;
(7)身份验证成功过后,向服务器添加From以及To;
(8)发送DATA命令,开始输入Email数据,以“.”号结束;
(9)书写邮件内容,将邮件内容发送到SMTP服务器;
(10)发送QUIT命令,结束会话。
在Model中还包含了一个自定义函数文件,这些函数主要是被Controller调用,起到对用户输入数据进行鉴定和过滤的作用。这些函数的具体功能包括:
(1)接收功能常量;
(2)接收用户在前台输入的数据;
(3)限制用户信息输入的范围;
(4)过滤用户输入的错误数据;
(5)显示页面跳转窗口。
4.4 发布功能的设计与实现
发布功能主要是将留言信息显示给用户查看,其中发布的界面主要对应了三种使用功能:留言发布界面、管理员界面、用户信息的搜索界面。由于发布功能不是很复杂,因此所采用的MVC的架构也有所不同。具体的系统结构如下图4所示:
图4 发布功能的MVC架构
首先介绍View部分。在这里我用Html语言编写了一个留言框模板,这个模板主要用于定义留言信息的显示格式。它由Form表单组成,其中用 “[%标签名称%]”标记出要动态显示的内容所在的位置,同时给Form表单的ID赋一个值,以便Controller调用。另外还使用JavaScript制作了一些实用的前台动态效果,它们包括:
(1)建立一些主要链接上的中文提示框;
(2)支持在新的窗口打开用户插入的图片;
(3)输出滚动显示的公告;
(4)屏蔽脚本错误;
(5)显示页面处理时间以及PHP运行时间等。
下面就给出留言发布界面的效果图(图5):
图5 留言发布界面
接着介绍Controller部分。在这里ID是JavaScript标签容器命名属性,innerHTML表示一个容器内所包含的所有代码,通过“ID.innerHTML”就能够在JavaScript中取得View部分所定义的留言框模板的代码。然后再通过JavaScript的replace方法与正则表达式结合应用,从而替换模板中的标签内容,将留言信息插入到留言框模板中去。这种设计方法的好处在于客户端不用刷新页面就能看到动态更新的内容,并且利用JavaScript语言将处理静态页面的代码与处理动态页面的代码分离开,方便了程序员查找和修改程序。
最后介绍Model部分。在这里主要还是用PHP语言调用MYSQL数据库操作类去实现四个功能:读取数据、搜索、分页和统计。要实现前三个功能就必须执行不同的SQL语句。读取功能使用常规的“SELECT……FROM”语句就能解决。搜索功能需要在“SELECT……FROM”语句后面再加上“WHERE……LIKE”语句,通过判断前台表单所返回的搜索条件,从而筛选出要搜索的数据。分页功能学要在 “SELECT……FROM”语句后面加上“ORDER BY……LIMIT”限制每页输出固定条数的留言信息。统计功能只需要调用数据库操作类的成员函数就能实现。
4.5 特色功能的设计与实现
首先介绍验证码功能。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。使用这项功能的好处还在于防止用户利用机器人自动灌水以及防止某些用户采用暴力破解方式对管理员密码进行不断的登陆尝试。因此这项功能被应用在管理员登入界面以及用户输入留言信息界面。
在本系统中实现了两种输出验证码的方法,在介绍这两种方法之前必需介绍一下GD库。GD库是PHP处理图形的扩展库,它提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。因此第一种方法就是对于那些支持GD库的空间,调用PHP的GD库函数来生成图像再搭配PHP的“RAND()”函数来生成随机数最终制作出验证码。第二种方法就是对于不支持GD库的空间,系统判别后将自动调用编写的256色BMP图像输出函数,自定义生成256色BMP图片。然后在配合一个图像输出文件生成验证码。下面具体介绍一下第二种方法的实现过程。
我们要让系统输出BMP图片就必需了解BMP文件的结构。BMP文件主要是由文件头、位图信息头、颜色信息和图形数据四部分组成。在合理配置了文件头、位图信息头、颜色信息后,将本系统要显示的验证码数据,即0到9和a到z共36个字符的图形数据录入到BMP图像输出函数中,最后再使用三个嵌套的for语句逐行、逐字、逐像素地输出图像数据,这样就实现了BMP图片的输出。当然这其中还要用到PHP的“RAND()”函数来保证输出的验证码是一串随机数。下面就给出100象素的字符在400象素的方框内随机定位的256色BMP图片生成函数的核心代码:
$ra_sj=rand(0,3); //随机产生背景色
$li = 0;
// 逐行,逐字,逐像素地输出图像数据
for($i = 19; $i >= 0; $i--) // 历经所有行
{
$li++;
for($ii = 0; $ii < $num; $ii++) //历经所有字
{
for($iii = 0; $iii < 20; $iii++) //历经所有像素,一个字20个像素
{
$ra_sjs=rand(0,7); //随机杂色
if(rand(0,100) < $cOdds) //杂点出现的机率
{
$imgnei=$imgnei.$vColorData[$ra_sjs]; //杂色
}
else
{
if(x_y($iii,$li,$ii)==0) //坐标在10*10px的方框中
{
$di=20-$rand_sj[$ii][2]-9;
$di=$i-$di;
$di=($di * 10 + $iii-$rand_sj[$ii][0]);
if($vNumberData[$vCode[$ii]]{$di}==1) //不在字符上
{
$imgnei=$imgnei.$vColorData[$ra_sj]; //背景颜色
}
else
{
$ra_sjs=rand(8,12);
$imgnei=$imgnei.$vColorData[$ra_sjs]; //字符颜色
}
}
else //背景颜色
{
$imgnei=$imgnei.$vColorData[$ra_sj];
}
}
}
}
}
echo($imgnei); //输出图像
另外还有一个聊天室功能。聊天室主要分为WebChat、BBSChat两种。BBSChat是基于Telnet的Tcp协议,是BBS的附设功能,需要客户端有Telnet程序。WebChat则采用浏览器方式,实际上是一个多人共同使用的CGI程序。其基本原理是把每个用户的发言通过浏览器传给系统,再由系统收集处理后分发给特定用户。本系统的聊天室就是采用WebChat的Client Pull技术,该技术是利用Html语言的Meta标签“http-equiv=Refresh”的属性,每隔一段时间就检查服务器上是否有新的数据。同时,为防止数据库无限增大,还设计了删除陈旧数据的功能。这种方法简单有效,能够基本满足用户的需求。
结 论
通过以上的研究和实践,可以预见基于PHP实现的网上留言管理系统因为它简单丰富的功能和方便快捷的交流方式,将会在互联网时代中,大有作为。网上留言系统也将由于越来越多的人学习和使用PHP语言,而变得更加完善。下面总结一下本次课题研究的一些收获和不足。
首先,通过毕业设计学会了使用MVC思想开发简单的网络软件。这种开发模式的最大特点是多个视图能够共享一个模型,同时它将应用程序的输入、处理和输出分开,从而解决了传统动态网页开发中将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起的问题。因此提高了编程人员的开发效率,使得系统的结构更加清晰,管理也更加方便。
其次,还研究了BMP图像文件的结构,学会了如何建立SOCKET会话,并根据SMTP协议发送邮件。另外还为系统加入了身份验证,密码管理,验证码,Session等功能,从而增强了系统的安全性。
最后,本系统存在一个不足之处就是没有设计客户的注册登入功能,这样就给管理员管理客户带来了不便。但不开发这项功能也是从网上留言系统的实际应用出发,如果开发了注册登入功能就会增加客户的操作次数,从而影响客户对系统的满意度。总之,开发网上留言管理系统最重要的工作就是要处理好整体架构与技术细节之间的关系,它是一个不断协调和平衡的过程,只有将这两方面处理和谐了,最终才能得到一个完美的作品。
参考文献
[1] Luke Welling/Laura Thomson[美].PHP和MySQL Web开发(原书第三版)[M].武欣/邵煜译.北京:机械工业出版社,2005。
[2] 勒道夫[美].PHP程序设计[M].邓云佳等译.北京:中国电力出版社,2003.7。
[3] PHP5开发手则[EB].http://www.opencontent.org/openpub/,2006-01-14。
[4] MYSQL中文手册[EB].http://dev.mysql.com/,2005-11-15。
[5] MVC模式[OL]. http://blog.csdn.net/chiefsailor/archive/2007/03/09/1524793.aspx,2007-03-09。
[6] BMP文件结构[OL]. http://czqhh.bloghome.cn/posts/61278.html,2006-11-28。
[7] 黄国辉.PHP聊天室技术[OL]. http://www.dvbbs.net/tech/php/2006041846412.asp,2006-04-18。
[8] 让插入到 innerHTML 中的 Script 跑起来[OL]. http://www.coolcode.cn/?p=117,2006-06-04。
5、资源下载
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于php+mysql+mvc的网上留言管理系统设计与实现(源码+文档)_php_mysql_网上留言管理系统_bbs.zip |