1、基于 PHP 实现的网上留言管理系统的设计摘 要随着互联网技术的迅猛发展,网络已经充斥到我们生活的方方面面,网上留言系统已经成为各种网站不可或缺的一个组成部分。一个设计美观、功能完善的网上留言系统是网站吸引网民的一个重要因素。同时,它还为网络用户提供了一个多人参与的信息交流平台。基于 PHP 实现的网上留言管理系统采用 BS(BrowserServer)应用架构以及 MVC(Model View Controller)编程架构设计开发。具体的开发细节是使用 PHP 语言完成系统的开发。整个系统不仅能够对网上留言信息进行录入、发布、查询与管理,而且还增加了如:验证码、邮件发送、聊天室、密码管理等
2、功能。这样使得网上留言系统真正成为功能丰富、高效实用的网上信息交流平台。关键词:PHP;BS;MVC;面向对象;留言系统Design of Message Board System Based on PHPAbstractWith the rapid development of the Internet technology, the network application has been widely used in the world, the message board system already becomes an indispensable constituent of th
3、e website. A message board system which has beautiful designs and integrated functions can be an important factor of attracting people. Meanwhile, it provides Internet users with an information exchange platform. The design of message board system based on PHP is developed by B/S(Browser/Server) app
4、lication construction and MVC(Model View Controller) programming construction. The detail of the development is using the PHP language to develop the system. The whole system not only can input, issue, query and manage the on-line message but also adds some functions such as validating code, mail tr
5、ansmission, chatting room or password management. This makes the message board system truly be a multifunctional and efficient on-line information exchange platform.Key words: PHP; B/S; MVC; Object Oriented; Message Board System目 录论文总页数:20 页1 引言 11.1 课题背景 11.2 本课题研究的意义 11.3 本课题的研究方法 12 留言系统开发语言的介绍 1
6、2.1 PHP 语言概述 12.2 PHP 对 MYSQL 数据库的访问 22.3 JAVASCRIPT 语言概述 .23 留言系统开发架构的介绍 33.1 BS 应用架构的介绍 .33.1.1 B S 架构概述 .33.1.2 B S 架构的优点 .33.1.3 B S 架构的缺点 .43.2 MVC 编程架构的介绍 53.2.1 MVC 架构概述 53.2.2 MVC 架构的优点 63.2.3 MVC 架构的缺点 74 基于 PHP 的网上留言管理系统的设计与实现 74.1 功能的确定 74.2 数据表的设计 84.3 添加功能与管理功能的设计与实现 94.3.1 设计方案的介绍 94.3
7、.2 各部分实现过程的介绍 .104.4 发布功能的设计与实现 .144.5 特色功能的设计与实现 .16结 论 .18参考文献 .18致 谢 .19声 明 .20第 1 页 共 20 页1 引言1.1 课题背景随着互联网技术的迅猛发展,网络给人们带来了很多便利,我们在很多网站上都能看到各式各样的留言板,它是网站与访客之间进行交流的主要手段之一。一个设计合理,界面优美的网上留言程序能从侧面体现网站良好的服务,给来访用户留下美好的印象,增强用户对网站的信心。1.2 本课题研究的意义网上留言系统利用网络一定的时效性和广泛的传播面,可以方便人与人之间的信息交流和互动。对于一般企业而言,网上留言系统能
8、够通过网络提供方便的日常信息管理和交互,同时只需要相对低廉的建设和维护成本。另外,企业还可以通过网上留言系统,为客户提供一个跨地域的交流平台,以便及时了解和掌握客户的需求,加强企业与客户之间的沟通,提高企业的市场竞争力。因此,该课题具有一定的实用价值。1.3 本课题的研究方法网上留言系统的整体结构采用的是 BS(BrowserServer)应用架构,在这种架构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在 Web 服务器实现,客户端只需要浏览器即可进行业务处理。整个系统的设计采用的是 MVC(Model View Controller)编程架构,使得功能模块和显示模块能够分离,提
9、高应用系统的可维护性、可扩展性、可移植性和组件的可复用性。留言系统的具体实现是采用服务器端脚本语言 PHP 来完成对系统后台的开发以及使用 Html 语言和 JavaScript 脚本语言来完成对系统前台的开发。2 留言系统开发语言的介绍2.1 PHP 语言概述PHP是能让你生成动态网页的工具之一。PHP代表:超文本预处理器 (PHP:Hypertext Preprocessor) 。PHP是完全免费的,不用花钱,你可以从PHP官方站点自由下载。PHP遵守GNU公共许可(GPL) ,在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要
10、的特色。PHP在大多数Unix平台,GUNLinux和微软Windows平台上均可以运行。PHP很容易学习,但是速度上比ModPerl(植入Web服务器的Perl模块)慢。现在有了可以与ModPerl速度想媲美的被称作Zend的新引擎,而PHP5就可以充分利用这个引擎。PHP5还引入了新的对象模型(Object Model) 。完全重写了PHP处理对象的方式,这样可以提高程序的抽象程度,更接近人的思维方式,使程序结构更清晰并降低编码和维护的工作量。当前PHP与Linux、Apache、MYSQL、Zend构成了性价比最高的Web系统。第 2 页 共 20 页应用PHP有许多好处。当然已知的不利
11、之处在于PHP由于是开放源码项目,没有什么商业支持,对于小项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。PHP是一个不断发展的语言,相信这些问题在不久的将来会得到很好地解决。2.2 PHP 对 MYSQL 数据库的访问MYSQL 是一个快速、健壮和易用,且支持多线程、多用户的 SQL 数据库服务器。虽然 PHP 通过 ODBC 支持几乎所有的数据库。但对于开发数据驱动的网站而言,选择 MYSQL 应该说是最佳组合,这不仅因为 MYSQL 是免费的,更在于它具有与同类大型数据库相媲美甚至超过它们的优良性能。PHP 实现对 MYSQL 数据库的访
12、问有两种方法:(1)利用 PHP 的数据库函数连接:创建 MYSQL 连接:MYSQL_CONNECT(数据库所在位置,数据库账号,数据库密码)。数据库选用:MYSQL_SELECT_DB(数据库名)。执行 SQL 指令:MYSQL_QUERY(SQL 语句,$link)。分析表身:MYSQL_FETCH_ROW()函数,必须传入$result 查询结果变量,再通过 for 循环,并配合 count()函数计算数据行中的列数,将$row 数组中每一元素显示出来。释放资源:MYSQL_FREE_RESULT($result)或 MYSQL_CLOSE($link)。(2)通过 ODBC 连接:P
13、HP 通过 ODBC 连接 MYSQL 数据库主要用到四个函数:ODBC_CONNECT():用来同 ODBC 数据源建立连接。ODBC_DO():用来在建立连接之后执行数据库查询。ODBC_RESULT():用于取得当前记录行中某个字段的值。ODBC_FETCH_ROW():用来把查询结果保存到数组,每个数组元素对应一条记录。上述两种方法在与数据库建立连接的语法上,并没有太大差别。不过在相比较之下,通过 ODBC 方式存取数据库比 PHP 直接存取 MYSQL 耗时间,但通过ODBC 接口存取数据库不必担心使用何种数据库,如 Oracle,Informix,Sybase等。结合网上留言系统在
14、实际当中的应用,还是决定选择 PHP 直接存取 MYSQL的方式来管理数据库。另外以上两种方式都支持 ODBC 接口,这样可减少更换数据库时需要更改程序的问题。2.3 JavaScript 语言概述JavaScript 是一种基于对象(Object)和事件驱动(Event Driven)并具第 3 页 共 20 页有安全性能的脚本语言。使用它的目的是与 HTML 超文本标记语言、PHP 脚本语言一起实现在一个 Web 页面中链接多个对象,与 Web 客户交互作用,从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的 HTML 语言中实现的。它的出现弥补了 HTML 语言的缺陷。JavaS
15、cript 的出现使得信息和用户之间不仅只是一种显示和浏览的关系,而是实现了一种实时的、动态的、可交式的表达能力。从而基于 CGI 静态的HTML 页面将被可提供动态实时信息,并对客户操作进行反应的 Web 页面的取代。JavaScript 脚本正是满足这种需求而产生的语言。它深受广大用户的喜爱。它是众多脚本语言中较为优秀的一种,与 WWW 的结合有效地实现了网络计算和网络计算机的结合。使用 JavaScript 的优势在于传统的数据提交和验证工作均由用户端浏览器通过网络传输到服务器上进行。如果数据量很大,这对于网络和服务器的资源来说实在是一种无形的浪费。而 JavaScript 则可以在客户
16、端进行数据验证,可以方便地操纵各种浏览器的对象,可以控制浏览器的外观,状态甚至运行方式,可以根据用户的需要“定制”浏览器,从而使网页更加友好。JavaScript 还可以使多种任务仅在客户端就可以完成而不需要网络和服务器的参与,从而支持分布式的运算和处理。3 留言系统开发架构的介绍3.1 BS 应用架构的介绍3.1.1 BS 架构概述BS(BrowserServer)结构即浏览器和服务器结构。它是随着 Internet技术的兴起,对 CS(ClientServer)结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过 WWW 浏览器来实现,极少部分事务逻辑在前端(Browser)实现
17、,主要的事务逻辑在服务器端(Server)实现,形成所谓三层 3tier 结构。这样就大大简化了客户端电脑负荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。以目前的技术看,局域网建立 BS 结构的网络应用,并通过 InternetIntranet 模式下建立的数据库应用,相对易于把握,成本也是较低的。BS 结构是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如 LAN,WAN,InternetIntranet 等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在 PHP 这样的跨平台语言出现之后,BS 架构管理软
18、件更是方便、快捷、高效。第 4 页 共 20 页3.1.2 BS 架构的优点BS 结构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。其次是维护和升级方式简单。目前,软件系统的改进和升级越来越频繁, BS 架构的产品明显体现着更为方便的特性。对一个稍微大一点的单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的
19、,但 BS 架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦” ,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机, “胖”服务器。最后是成本降低,选择更多。大家都知道 Windows 在桌面电脑上几乎一统天下,浏览器成为了
20、标准配置,但在服务器操作系统上 Windows 并不是处于绝对的统治地位。现在的趋势是凡使用 BS 架构的应用管理软件,只需安装在Linux 服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用哪种操作系统都可以让大部分人使用 Windows 作为桌面操作系统的电脑不受影响,这就使得最流行 Linux 操作系统快速发展起来,Linux 除了操作系统是免费的以外,连数据库也是免费的,这种选择是非常盛行的。比如说很多人每天上“新浪”网,只要安装了浏览器就可以了,并不需要了解“新浪”的服务器用的是什么操作系统,而事实上大部分网站服务器是没有使用 Windows 操作系统的,但用户的
21、电脑本身安装的大部分是 Windows 操作系统。3.1.3 BS 架构的缺点应用服务器运行数据负荷较重是 BS 架构的缺点。由于 BS 架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过 WWW 浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。但是,应用服务器运行数据负荷较重,一旦发生服务器第 5 页 共 20 页“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库存储服务器,以防万一。3.2 MVC 编程架构的介绍3.2.1 MVC 架
22、构概述MVC 英文即 Model,View,Controller,即把一个应用的输入、处理、输出流程按照 Model,View,Controller 的方式进行分离,这样一个应用层被分为三个层模型层,视图层、控制层。视图(View)代表用户交互界面,对于 Web 来说,可以概括为 HTML 界面,但也有可能为 XHTML、XML、Applet 和 Flash 等。随着应用的复杂性和规模性的提高,界面的处理也变得具有挑战性,一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)
23、处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给 Controller 和 Model。模型(Model)就是业务流程和状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是暗箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是 MVC 最主要的核心。目前流行的 EJB 模型就是一个典型的应用例子,它从应用技术实现的角度对模型作了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按照模型设计就可以利用某些技术组件,从而减轻了技术上的困难。对一个开者来说,就可以专注于业务模型的设计。MV
24、C 设计模型告诉我们,把应用的模型按照一定的规划抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC 并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。业务模型还有一个很重要的模型那就是数据模型。数据模型主要是指实体对象的数据保存。比如将一张订单保存到数据库中,从数据库获取订单。我们可以将这个模型单独列出,所有有关的数据库的操作只限在该模型中。控制(Controller)可以理解为从用户接受请求,将模型与视图匹配在一起,共同完成用户的请求,划分控制层的作用很明显,它清楚地告诉开发者,它仅是一个分发器,
25、选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层不作任何的数据处理。例如,用户点击一个链接,控制层接收请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,把符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一第 6 页 共 20 页个视图可能对应多个模型。总之,模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都能反映这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化与传播机制。模型、视图、控制器三者
26、之间的关系和各自的主要功能,如下图(图1)所示:图 1 模型、视图、控制器的关系和功能3.2.2 MVC 架构的优点当前有相当一部分 Web 应用程序都是用过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像 HTML 这样的表示层代码混在一起,直接向数据库发送请求并用 HTML 显示,开发速度往往比较快,但由于数据页面的分离不是很直接,因而很难体现出业务模型的样子或者模型的重用性。产品设计弹性力度很小,很难满足用户的变化性需求。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC 的出现很好地解决了以上问题,它要求对应用分层,
27、虽然要花费额外的工作,但产品的结构清晰,产品的应用通过模型可以得到更好地体现。首先,MVC 最重要的一点是多个视图能共享一个模型。在目前用户需求的快速变化下,可能有多种方式访问应用的要求。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,但对于订单的处理都是一样,也就是说订单的处理是一致的。按 MVC 设计模式,一个订单模型以及多个视图即可解决问题。这样即减少了代码的复制,又减少了代码的维护量,一旦模型发生改变,也易于维护。并且由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。第 7 页 共 20 页其次,将 MVC 分离可以让不同的专家负责不同的模块
28、,一般情况下,Model部分由熟悉数据库,网络传输的专家来负责;View 则交给对 UI(User Interface)有研究的专家。这对于项目的管理者而言是多么的诱人,分工意味着可以提高效率并可以按照传统的责任划分来处理软件开发过程。对开发者而言也可以专心于一个领域。这样做的前提是接口要明确,MVC 的分离思想正为其提供了基础。最后,控制器也提供了一个好处,就是可以使用控制器来连接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。总的来说 MVC 编程架构是有
29、利于软件工程化管理的,因为不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。3.2.3 MVC 架构的缺点MVC 的缺点是由于它没有明确的定义,所以完全理解 MVC 并不是很容易。使用 MVC 需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。具体的不足体现在以下几个方面:(1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循 MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。(2)视图与控制器间的连接过于紧密。视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,
30、其应用是很有限的,反之亦然,这样就妨碍了它们的独立重用。(3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。另外,你还将不得不花费相当可观的时间去考虑如何将 MVC 运用到你的应用程序,同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫无顾忌的重用它们了。最后,根据开发者经验,由于开发者将一个应用程序分成了三个部件,所以使用 MVC 同时也意味着你将要管理比以前更多的文件,这一点是显而易见的。这样好像我
31、们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提的。并且本系统也针对这些缺点做了一些改进,下面就将介绍系统详细的设计开发过程。第 8 页 共 20 页4 基于 PHP 的网上留言管理系统的设计与实现4.1 功能的确定网上留言管理系统把用户分成两类,一类是管理员,另一类是客户。管理员负责维护整个留言系统,在对其身份进行确认后,能够对网上留言进行回复、修改以及删除。客户则可以直接录入、查看和查询网上留言信息。具体要实现的内容如表 1 所示:表 1 系统详细功能介绍添加功能支持心情图片插入支持输入内容时插入图片用户基本信息以及留言内容的录入选择留言信息正常显示或仅管理员可见选择管理员
32、回复是否另外发送 email 给自己发布功能显示留言者 IP显示滚动的系统公告显示留言以及回复信息屏蔽只有管理员可见的留言信息显示页面处理时间以及 PHP 运行时间支持标题搜索,数据库对标题建有索引管理功能支持在线公告修改支持批量删除数据支持回复,编辑,删除留言信息管理员信息经过 MD5 加密,只能在线修改用户名和密码特色功能聊天室,实时的信息交流平台建立 SOCKET 会话,根据 SMTP 协议发送邮件可在无 GD 库的空间中正常运行的验证码功能运用大量 PHP 和 JavaScript 函数绘制网页特效第 9 页 共 20 页4.2 数据表的设计在着手开发一个 Web 项目时,数据库的设计
33、通常是第一位要做的,基本上所有的操作都会涉及到数据表的操作。那么数据表的设计就关系到整个项目的设计和功能的实现。网上留言信息需要一个表来存储,另外聊天室也需要一个表来存储信息,因此整个系统需要两个表,具体设计如表 2、表 3 所示:表 2 留言信息存储表字段名 类型 说明id Int(6) primry key 留言 idtname Varchar(6) 留言者姓名tx Int(3) 头像dtime Datetime 留言时间title Varchar(33) 留言标题qq Int(13) 留言者 qqemail Varchar(25) 留言者 emailnei Text 留言内容htime
34、Datetime 回复时间estate Int(1) 留言状态hnei Text 回复内容ip Varchar(15) 留言者 ipsend_mail Bool 是否接收回复邮件表 3 聊天室信息存储表字段名 类型 说明chtime Datetime 信息发布时间nick Varchar(10) 用户名称words Varchar(100) 聊天内容4.3 添加功能与管理功能的设计与实现4.3.1 设计方案的介绍在前面的文章中已经介绍了 MVC 编程架构的特点,本系统的添加功能与管理功能就是采用 MVC 编程架构开发的。具体的系统结构如图 2 所示:第 10 页 共 20 页图 2 添加与管理
35、功能的 MVC 架构对添加与管理功能的设计选用的是类似 Smart Ticket 中使用的 MVC 模式。这种模式的特点是将 Controller 设计成一个巨大的事物处理器 (即:SwitchCase 语句) ,所有由 UI 收集到的用户需求都转发给Controller 进行处理。其具体的工作流程是这样的:View 通过“URL?变量名=变量值”的方式向 Controller 传递一个功能常量,Controller 通过 PHP 系统变量“$_Get”接收到这个常量,然后将其放入 SwitchCase 语句中,SwitchCase 语句根据比较不同的常量,来处理不同的请求,从而完成不同的功能
36、。Controller 主要是通过调用 Model 内的自定义函数、MYSQL 数据库操作类以及邮件发送类来处理不同的请求。下面总结一下这个设计方案的优点和缺点。从上文介绍的工作流程可以看到这种模式的优点是用户控制器提供一个控制和处理请求的集中入口点,它负责接收,截获并处理用户请求;并根据当前状态和业务操作的结果决定向客户呈现的视图。这样做能够控制和协调每个用户跨越多个请求的处理,从而达到了集中管理的目的。这种模式还具有多视图对应一个模型的能力,对多种不同方式的访问请求可以用一个模型来实现,减少了代码的重复和维护量,一旦模型改变也易于维护。其次由于模型返回的数据不带任何显示格式,因而这些模型也
37、可直接应用于接口的使用。当然,这种模式也有一个缺陷,那就是随着功能的不断增加 Controller 将变得过于庞大,这样将影响系统的运行速度,增加用户等待响应的时间。但就本系统的功能而言,用 Controller 来完成还是绰绰有余的。4.3.2 各部分实现过程的介绍首先介绍 View 部分的实现过程。就添加功能而言设计了一个界面优美的视图如图 3 所示,用户主要是通过填写 Html 表单完成个人信息以及留言信息的录入,这些数据通过 POST 方式传递给 Controller。另外还用 JavaScript 的第 11 页 共 20 页“document.getElementById()”函数
38、在客户端即时获取用户输入的数据,然后再用 if 判断语句检查用户输入的数据是否标准,如果不标准系统就会通过“document.getElementById(obj_name).innerHTML”变量显示提示语句,明确地告诉用户如何输入正确的数据。图 3 留言信息添加界面就管理功能而言,将视图分为两级,一级是身份验证界面,当用户正确输入用户名、密码以及验证码之后才能进入下一级的管理界面。在管理界面中,第 12 页 共 20 页每一个功能都对应了一个视图,这样方便了管理员区分和使用不同的功能。接着介绍 Controller 部分的实现过程。前文已经介绍了 Controller 是通过判断视图传递
39、的功能常量来选择相应的功能,下面的表 4 就给出了不同常量与不同功能的对应关系:表 4 常量与功能对应表常量 功能add 添加数据edit 编辑留言信息huifu 回复留言信息del 删除留言信息pldel 批量删除留言信息admin 确认管理员身份editadmin 在线修改管理员信息editgonggao 在线修改公告内容out 管理员退出就添加功能而言,Controller 会接收到 View 传递的“add”功能常量,于是 Controller 会先通过 PHP 的系统变量“$_POST”来接收用户输入的数据,然后再应用 Model 内的自定义函数对用户输入的数据进行鉴定和过滤,最后C
40、ontroller 就调用 Model 内的数据库操作类,通过使用对象的成员函数将数据保存到数据库里。在录入数据的同时,用户还可以选择是否通过邮件接收管理员回复,以及所发的留言是正常显示,还是仅管理员可见。就管理功能而言,首先要明确的是身份认证的归属,它似乎是应用逻辑的一部分,因此是属于 Model。但是如果要限制只有通过验证的用户才能执行特定动作,那么这一要求只能由 Controller 来完成,因为这些特定的动作必须在Controller 内定义,而且只有 Controller 可以进入 Model,所以身份认证归入Controller 才是最合理的划分。对身份验证的安全性在 Contro
41、ller 内采用了双保险:第一是使用 PHP 的系统函数“MD5()”对管理员密码进行加密,使得用户只能在网上修改管理员的用户名和密码;第二是使用特色功能里的验证码功能来防止某些用户采用暴力破解方式进行不断的登陆尝试。当管理员成功登入系统后又面临了一个问题,那就是网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。要解决这个问题就会用到 PHP 的Session 功能,我们通过 Session 记录用户的有关信息,以供用户再次以此身份对 Web 服务器提供要求时作确认。具体的实现是这样的:当用户进入网站我们就调用“SESSION_START()”函数打开一个会话期,当管理员成功登入系统后
42、,第 13 页 共 20 页我们用“$_SESSIONadmin”这个全局变量保存下管理员密码,那么服务器就记录下了管理员的信息,以后在使用其他功能时就不需要用户输入用户名和密码了。当管理员退出系统时,我们可以使用“UNSET($_SESSIONadmin)”来销毁保存在服务器端的管理员信息。当然 SESSION 也存在一些不足之处,如它会占用少许服务器资源以及关闭浏览器即会失效。但换一种角度去思考, “关闭浏览器即会失效”其实是从安全的角度设计的。在整个管理员的会话期里,Controller 是通过 PHP 的系统变量“$_Get”来接收管理员选择的功能常量,然后再让 SwitchCase
43、语句根据比较不同的常量,来处理不同的请求,从而完成管理员要求的功能。最后介绍 Model 部分的实现过程。Web 开发归根结底就是与数据库打交道,对数据操作的封装是最基本的,在设计时应当充分考虑到未来的需要和可扩展性,如果在开发业务逻辑模型期间再对数据操作的封装进行修改,往往可能会伤筋动骨,牵连的内容会较多。本系统涉及的数据表比较单一,即每次操作主要针对一个数据表。因此,在 Model 内使用 PHP 语言设计了一个通用的类,只更换数据表即可完成对数据库的操作。在这个类中,成员函数主要实现的功能包括:(1)初始化成员变量;(2)连接数据库;(3)执行 SQL 语句;(4)返回当前查寻数据的数据
44、行数;(5)返回数据总行数;(6)读取数据;(7)关闭连接。通过这个类就将系统对数据库的操作封装起来,方便 Controller 的操作,同时也使系统更安全了。另外还设计了一个邮件发送类。开发这个类的目的在于满足一些用户希望通过 Email 接收管理员回复的要求。这个类支持两种发送 Email 的方法:第一种,使用 PHP 自带的“MAIL()”函数来发送;第二种,使用 SMTP 协议的SOCKET 发送。由于 PHP 没有提供现成的 SMTP 函数,只提供了一个功能不甚灵活的“MAIL()”函数,这个函数需要服务器配置上的支持,并且不支持 SMTP 验证,在很多场合无法正常的工作,因此才开发
45、了第二种发送 Email 的方法来弥补第一种方式的不足。第二种发送方式实际上是利用 PHP 的 SOCKET 函数来和SMTP 服务器建立一个连接,然后发送文本的命令给服务器,一封内容简单的邮件就发送出去了。第二种方式的好处在于 PHP 中已经存在很多现成的封装得很第 14 页 共 20 页好的类或者函数替我们完成底层的 SOCKET 级操作,只需要直接拿来用就好,而不用在本文里去讨论底层的代码。下面就给出通过 SOCKET 发送 Email 的具体实现过程:(1)创建 SOCK,并打开连接;(2)设置为阻塞模式;(3)测试 SMTP 应答码是否为 220,220 代表邮件服务就绪;(4)发送
46、用户身份验证,然后读取服务器端发送给客户端的返回数据;(5)发送 AUTH LOGIN 命令;(6)发送用户名以及密码;(7)身份验证成功过后,向服务器添加 From 以及 To;(8)发送 DATA 命令,开始输入 Email 数据,以“.”号结束;(9)书写邮件内容,将邮件内容发送到 SMTP 服务器;(10)发送 QUIT 命令,结束会话。在 Model 中还包含了一个自定义函数文件,这些函数主要是被 Controller调用,起到对用户输入数据进行鉴定和过滤的作用。这些函数的具体功能包括:(1)接收功能常量;(2)接收用户在前台输入的数据;(3)限制用户信息输入的范围;(4)过滤用户输
47、入的错误数据;(5)显示页面跳转窗口。4.4 发布功能的设计与实现发布功能主要是将留言信息显示给用户查看,其中发布的界面主要对应了三种使用功能:留言发布界面、管理员界面、用户信息的搜索界面。由于发布功能不是很复杂,因此所采用的 MVC 的架构也有所不同。具体的系统结构如下图 4 所示:第 15 页 共 20 页图 4 发布功能的 MVC 架构首先介绍 View 部分。在这里我用 Html 语言编写了一个留言框模板,这个模板主要用于定义留言信息的显示格式。它由 Form 表单组成,其中用 “%标签名称%”标记出要动态显示的内容所在的位置,同时给 Form 表单的ID 赋一个值,以便 Contro
48、ller 调用。另外还使用 JavaScript 制作了一些实用的前台动态效果,它们包括:(1)建立一些主要链接上的中文提示框;(2)支持在新的窗口打开用户插入的图片;(3)输出滚动显示的公告;(4)屏蔽脚本错误;(5)显示页面处理时间以及 PHP 运行时间等。下面就给出留言发布界面的效果图(图 5):第 16 页 共 20 页图 5 留言发布界面接着介绍 Controller 部分。在这里 ID 是 JavaScript 标签容器命名属性,innerHTML 表示一个容器内所包含的所有代码,通过“ID.innerHTML”就能够在 JavaScript 中取得 View 部分所定义的留言框模
49、板的代码。然后再通过JavaScript 的 replace 方法与正则表达式结合应用,从而替换模板中的标签内容,将留言信息插入到留言框模板中去。这种设计方法的好处在于客户端不用刷新页面就能看到动态更新的内容,并且利用 JavaScript 语言将处理静态页面的代码与处理动态页面的代码分离开,方便了程序员查找和修改程序。最后介绍 Model 部分。在这里主要还是用 PHP 语言调用 MYSQL 数据库操作类去实现四个功能:读取数据、搜索、分页和统计。要实现前三个功能就必须执行不同的 SQL 语句。读取功能使用常规的“SELECTFROM”语句就能解决。搜索功能需要在“SELECTFROM”语句后面再加上“WHERELIKE”语句,通过判断前台表单所返回的搜索条件,从而筛选出要搜索的数据。分页功能学要在 “SELECTFROM”语句后面加上“ORDER BYLIMIT”限制每页输出固定条数的留言信息。统计功能只需要调用数据库操作类的成员函数就能实现。4.5 特色功能的设计与实现首先介绍验证码功能。所谓验证码,就是将一串随机产生的数字或符号,第 17 页 共 20 页生成一幅图片,图片里加上一些干扰象素(防止OCR)