PHP项目开发全程实录(第4版)
上QQ阅读APP看书,第一时间看更新

2.11 社区论坛模块设计

视频讲解

社区论坛模块为网站的浏览者提供一个交流的平台,以此来扩大网站的影响力,汇聚更多的人气,宣传企业形象,推广企业产品。

2.11.1 社区论坛模块概述

图2.33 社区论坛流程图

社区论坛模块为浏览者、会员、客户和企业之间提供一个大的交流平台,根据身份的不同,分别给予不同的操作权限。社区论坛模块的操作流程如图2.33所示。

在本论坛中,浏览者只能够查看帖子;注册会员既可以查看帖子,也可以发布和回复帖子;管理员则具有发布、回复、查看和删除的权限。

2.11.2 社区论坛模块技术分析

在社区论坛模块的实现过程中,通过JavaScript脚本和下拉列表框的结合实现一个不同版块之间快速跳转的功能,从而能够更加灵活、方便地实现不同版块之间的跳转。

下面分析该技术是如何实现的。该技术的实现综合3个方面的内容,以一个下拉列表框为主,通过PHP语句从数据库中读取数据作为下拉列表框的值,应用onchange事件来调用JavaScript脚本,实现不同版块之间的跳转。这里以bbs_top.php文件中的快速跳转功能为例进行分析。关键代码如下:

例程14 代码位置:资源包\TM\02\bcty365\bbs_top.php

代码贴士

❶onChange:某元素失去焦点,并且从用户最后一次访问以来,其值已经改变。location:用于访问窗口的当前定位(URL),既可被读取,又可被置换,可以通过其实现某个页面的定位或者更新。

❷<option value='… '>…</option>:下拉列表框中输出的值,以及显示的内容。

该技术实现的运行结果如图2.34所示,它将实现从JSP版块跳转到PHP版块。

图2.34 版块跳转功能的运行结果

2.11.3 论坛分类的实现过程

 论坛分类使用的数据表:tb_bbs、tb_type_big、tb_type_small

图2.35 论坛分类的运行结果

论坛分类可以分为两类:一是论坛中大的版块分区,分为综合信息讨论区、操作系统、程序设计交流区和数据库技术4个版块,其数据存储于tb_type_big数据表中。二是对应不同的版块中不同语言和技术的分类,分为6种,其数据存储于tb_type_small表中。论坛分类的运行结果如图2.35所示。

论坛分类的实现原理很简单,首先从tb_type_big表中读取6个版块中的数据,进行循环输出,然后在版块中嵌套循环,用于输出不用语言的分类数据。该功能主要通过bbs_index.php文件来完成,bbs_index.php文件的程序代码如下:

例程15 代码位置:资源包\TM\02\bcty365\bbs_index.php

代码贴士

❶do…while循环语句,对论坛中大的版块分类进行循环输出。

❷do…while循环语句,对论坛中一个版块的不同语言和技术进行循环输出。

注意

在应用do…while循环语句时,while后的分号不能省略。

2.11.4 论坛帖子浏览的实现过程

 论坛帖子浏览使用的数据表:tb_bbs、tb_user、tb_reply

论坛帖子浏览主要输出指定帖子的详细信息,包括发帖人、用户级别和注册的时间,以及帖子的主题、内容和发帖时间,包括上传的图片。本模块是用户权限使用体现的最明显地方,可以分为3种情况:第一以浏览者进行登录,只能是浏览帖子的内容,没有其他权限;第二以会员进行登录,可以对帖子进行回复,发表自己的看法;第三以管理的身份进行登录,不但可以回复帖子,而且可以对任何人发布和回复的帖子进行删除和顶帖的操作。下面就来看一下以管理员身份进行登录时都具备哪些权限,运行结果如图2.36所示。

图2.36 管理员浏览帖子的结果图

论坛帖子浏览的功能通过bbs_lookbbs.php文件完成,首先根据传递的ID值读取指定的帖子数据,然后判断登录用户的类型,最后根据用户不同的类型执行不同的操作。代码如下:

例程16 代码位置:资源包\TM\02\bcty365\bbs_lookbbs.php

代码贴士

❶$info4["usertype"]:判断用户的类型,如果值为1是管理员,否则为普通会员。

❷$infob[photo]:判断发布的帖子中是否含有图片,如果有则输出,没有则不输出。

❸stripslashes():将应用addcslashes()函数处理后的字符串返回原样。

❹判断登录用户是否具有顶帖的权限。

❺判断登录用户是否具有删除帖子的权限。

说明

上面给出的是该文件的部分代码,主要讲解了该功能的实现方法,完整的代码可以参考本书资源包中的TM\02\bcty365\bbs_lookbbs.php文件。

2.11.5 论坛帖子发布的实现过程

 论坛帖子发布使用的数据表:tb_bbs、tb_user

论坛帖子发布通过两个文件来完成:一个是帖子发布信息的提交页bbs_pubbs.php;另一个是对提交的数据进行处理的retrieve.php文件。该功能实现的运行结果如图2.37所示。

图2.37 帖子发布模块的运行结果

在发布信息的提交页中,显示当前用户的个人信息,设置添加数据表单元素,其中表单元素的设计如表2.9所示。

表2.9 发布信息页中使用的表单元素

在retrieve.php页中对表单提交的数据进行处理,将数据存储到tb_bbs表中,并且更新用户信息表tb_user中pubtimes字段的值,其中还应用了图片上传技术,将图片上传到服务器中指定的文件夹下。retrieve.php文件的代码如下:

例程17 代码位置:资源包\TM\02\bcty365\retrieve.php

代码贴士

❶$_FILES['bbs_photo']["name"]:$_FILES[]全局变量,获取表单提交文件的原始名称。

❷strtolower():将指定的字符转换为小写字母。

stristr():获取指定字符串(A)在另一个字符串(B)中首次出现的位置到(B)字符串末尾的所有字符串。该函数如果执行成功则返回剩余的字符串,否则将返回false。

❸mt_rand():生成一个随机数,用于上传文件的名称。

❹move_uploaded_file():将指定的文件上传到指定的文件夹下。

2.11.6 论坛帖子回复的实现过程

 论坛帖子回复使用的数据表:tb_bbs、tb_user、tb_reply

回复论坛中的帖子,必须是以会员或者管理员的身份进行登录,否则不能进行帖子的回复操作,其运行结果如图2.38所示。

图2.38 论坛帖子回复的运行结果

论坛帖子回复功能的实现主要通过bbs_lookbbs.php和savereply.php两个文件。其中应用JavaScript脚本对回复帖子的文本框进行输出和隐藏的控制。在bbs_lookbbs.php文件中,帖子回复使用的表单元素如表2.10所示。

表2.10 论坛帖子回复中的重要表单元素

在帖子回复表单bbs_lookbbs.php页中,首先判断登录用户是否具有回复的权限,然后根据提交的值展开回复表单的文本框,在文本框中输入回复的主题和内容,最后将数据提交到表单处理页savereply.php中。bbs_lookbbs.php的主要代码如下:

例程18 代码位置:资源包\TM\02\bcty365\bbs_lookbbs.php

表单处理页savereply.php将表单提交的数据存储到指定的数据库中,其实现的方法与论坛发布中的表单处理技术是相同的,有关该技术的详细讲解请参考2.11.5节,这里不再赘述。

2.11.7 单元测试

在测试网上社区的论坛模块时,发现发帖时上传的图片不能够正常显示,运行结果中出现错误提示,如图2.39所示。分析错误原因,在图片上传成功后,没能正确地读取数据库中指定图片的路径。

图2.39 程序运行错误结果图

在bbs_lookbbs.php页面中查看获取的图片路径是否正确。发现在读取数据库中图片路径的代码段中,使用了错误的字段名称,数据库中图片路径存储使用的字段名是photo,而在程序代码段中使用的却是photos。错误代码如下:

将代码段中的字段名进行修改,然后重新运行程序,图片正常显示。