版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论第2章可行性分析2.1技术可行性分析本课题网站制作的目标是建立一个具有虚拟社区功能的个人网站,这是一个具有典型的WEB2.0特征的网站。网站的规模不会很大,网站内的内容主要通过用户之间的互动来跟新,而站长则主要负责管理。为了实现这样的设计目标,网站必须使用支持动态页面的开发语言,而目前流行的动态网页语言主要有三种sun的javajsp,微软的和zend的php。在分析了网站的规模需求和开发效率以及三种语言各自的特点后觉得采用PHP来完成本次的设计,PHP是目前最流行的网站脚本语言之一,有着简单,轻便,开源免费且功能强大的优势。相比于性能较低、跨平台性差的ASP和繁琐的JSP,PHP有着轻便、简单、跨平台、安全等优点,十分适合个人网站这类中小型网站的开发[7]。数据库方面虽然sqlserver,oracle等大型商业化的数据库工具有着优异的性能,但对于个人网站这一类小型的项目,这类产品显得过于昂贵复杂。而功能强大体型小巧的MySQL是一种完全开源免费的数据库工具,并且在许多开源项目的实践应用中展现出了不亚于大型商业化数据库的性能,因此MySQL完全可以满足要求本次设计中对于数据库应用的需求。而web服务器的选择上是同样为开源软件的Apache,一个目前使用最为广泛的web服务器产品,有着出色的兼容性和跨平台性。这样,本次设计中的网站开发运行环境就确定下来了。2.2网站功能分析●主界面(myindex.php) ○提供各个界面的链接和站点综合信息。 ●日记浏览界面(view_diray.php) ○普通用户可浏览站长的日记并发表评论。 ○站长可以通过管理员帐号写新日记或对旧的日记做修改。 ●论坛主界面(main_form.php) ○提供论坛资源浏览。 ○供用户发表新话题。 ○普通用户有登录,注册,修改个人信息的功能。 ○提供发送站内短消息功能。 ●管理员界面(admin_main_form.php)○站长可以管理日记,修改日记。○站长可以在此修改用户信息,更改用户状态,删除用户。○站长可以对用户发表新话题的进行审核,对话题状态进行修改,删除话题。第3章开发环境和开发方法3.1开发环境开发环境选择在windows环境下的PHP5.5+Apache2.2+MySQL5,浏览器为IE7和Firefox3,开发工具使用Dreamweaver,图片处理使用fireworks和photoshop。PHP与Apache,MySQL的组合虽然有着诸多优势,但三种出自不同作者的开源软件要能很好的配合工作,需要很多手工配置,这往往会为编程人员造成一些不必要的麻烦,因此有PHP的爱好者将这三种开源软件结合发布了名为PHPnow的环境套件包,只需要简单的安装配置后,PHPnow就会为你将PHP的开发运行环境配置完成,为WEB开发人员带来了许多便利。3.1.1关于PHPnowPHPnow是由PHP的爱好者制作的集成环境包(下载地址/),目前PHPnow的最新版本号为1.5.1,其中集成了Apache2.0.63/2.2.11,PHP5.2.8,MySQL5.0.77/5.1.31,ZendOptimizer3.3.3以及phpMyAdmin3.1.2,包含了PHP开发运行所需的各种软件和工具,安装配置简便,是当前开发PHP的首选套件包[8]。3.1.2其他Dreamweaver是一种优秀的WEB设计,脚本编写工具,支持PHP,ASP,JSP等多种脚本,还有着强大的javascript,css应用功能,编程、设计界面布局合理,非常适合用来设计网站界面、编写网页脚本程序。Fireworks是一种功能强大的WEB图片编辑工具,对PNG,JPEG,GIF等WEB主流应用图片有着很好的支持,更有着诸多WEB图片应用方面的功能,很适合本次设计的各种需求。3.2开发方法原型法(Prototyping)是20世纪80年代随着计算机软件技术的发展,特别是在关系数据库系统(RelationalDataBaseSystem,RDBS)、第四代程序生成语言(4thGenerationLanguage,4GL)和各种系统开发生成环境产生的基础上,提出的一种从设计思想、工具、手段都全新的系统开发方法。它扬弃了那种一步步周密细致地调查分析,然后逐步整理出文字档案,最后才能让用户看到结果的繁琐作法。它遵循了人们认识事物的客观规律,将模拟的手段引入系统分析的初始阶段,沟通了人们(用户和开发人员)的思想,易于掌握和接受,使系统开发的时间、费用大大地减少,效率、技术等方面都大大地提高[9]。使用原型法来开发本次的设计十分适合,因为本次制作的个人网站规模较小,如果使用其他复杂的计算机工程方法开发,会带来许多不必要的步骤,增加了开发的周期而最后得到的效果却与原型法所差无几。但是系统开发中一些重要的环节仍是在设计过程中必须注意和努力完善的,如系统未来的拓展能力,代码的重用率,网站的安全程度,不同平台的兼容性,等等。第4章基于PHP的个人网站总体设计4.1主要页面网站的页面主要分为:主界面,个人日记(博客),管理员界面,论坛界面四部分。不同的主界面有不同的功能模块和功能页面组成。4.1.1这是用户登录后浏览的第一个页面,主界面的色调,LOGO,各类功能选项,布局结构等是整个站点的基础,让用户对于整个站点的内容,结构以及功能有一个初步的了解。主页面提供用户前往其他页面的超链接,登录注册的窗口,以及一个新闻窗口,用来罗列站长选择的新闻资讯和站内热门话题等。4.1.2这是一个简单的博客,站长可以在这里发表自己的文章或日记,而用户登录后可以对文章内容发表评论。4.1.3这是站长独有的功能界面,在这里站长可以对整个站点进行管理。用户的基本信息修改,用户论坛权限修改,论坛内容以及博客内容的修改都可以在这里实现。4.1.4论坛即是一个虚拟社区,它提供来到站点的用户互相交流的平台,这是整个网站的核心部分,用户在注册后来到这里可以通过发表话题和回复话题的方式进行交流,不同等级的用户在这里拥有不同的权限。管理员管理用户发表的话题以及用户在论坛里的回复内容。4.2论坛功能设计论坛是本站点的主体。用户在注册登录后可以加入这个虚拟社区的交流中,但为防止恶意注册,或使用马甲进行人身攻击等行为,新用户注册必须获得注册码,注册码可以由管理员或高级用户提供,普通注册用户在获得一定积分或管理员给予高级用户权限后,可以获得一部分管理员权限。任何非禁言状态用户都可以在论坛内发表话题,经管理员审核后其他用户可以发表评论,若发现不合理言论,管理员可以屏蔽其评论情况严重的可以对其禁言。论坛还提供短消息功能,这是论坛内用户进行小范围交流的平台,用户可以互相发送只有发送双方才能看到的信息,可以作为一个简易的邮箱使用,也可以作为站长发送站内通知的工具。4.2.1论坛运行流程图主界面主界面判断用户类型论坛界面普通用户功能:发表新话题收发站内短消息回复引用回复修改个人信息…管理员功能:所有普通用户权限审核新话题禁言用户锁定话题发表新话题回复引用回复修改普通用户信息…用户登录(注册)退出主界面管理员界面用户管理个人日记管理论坛话题管理○锁定话题○置顶话题○删除话题○删除用户○禁言用户○更改用户积分…高级用户功能:所有普通用户权限部分管理员权限图4.1网站功能流程图4.2.2用户级别设计站点内的用户等级分为三类,其中管理员帐号拥有最高权限,高级用户其次,拥有部分的管理员权限,普通用户的权限最低。表4.1用户权限管理员高级用户普通用户发帖有权限有权限有权限回复有权限有权限有权限推荐有权限有权限需要一定积分修改主题有权限有权限可以修改自己的主题修改回复有权限有权限可以修改自己的回复查看用户信息有权限有权限有权限引用有权限有权限有权限为用户加分有权限有权限无权限屏蔽回复有权限有权限无权限审核主题有权限无权限无权限置顶主题有权限无权限无权限锁定主题有权限无权限无权限删除主题有权限无权限无权限禁言用户有权限无权限无权限提示用户等级有权限无权限无权限删除用户有权限无权限无权限第5章基于PHP的个人网站详细设计5.1数据库设计整个站点的数据库使用8张表存放信息,admintextform存放博客文章,diaryreplyform用来存放用户在博客的留言,userform存放用户信息,usertextform存放用户发表的主题,userreplyform存放用户在论坛内的评论,hottextform记录用户对主题所作的置顶操作,messageform存放站内短消息,keyform存放注册码。5.1.1admintextform表用来存放博客文章,id是文章的编号为主键,这个值由数据库自动生成,title是文章的标题,content是文章的内容,datetime是文章完成的日期格式为年-月-日,view和reply分别是文章的被浏览数和回复数。表5.1admintextformidint(10)主键文章编号titleverchar(50)非主键标题contenttext非主键内容datetimedate非主键日期viewint(10)非主键浏览数replyint(10)非主键回复数5.1.2博客diaryreplyform用来存放用户在博客的留言,id是留言在表内的编号为主键,自动生成值,diaryid是用户回复文章的编号,username是回复者的称呼,content是回复内容,datetime是回复日期,格式为年-月-日,exacttime是回复时间,格式为时-分-秒。表5.2diaryreplyformidint(10)主键回复编号usernameverchar(50)非主键用户名diaryidint(10)非主键回复文章编号contenttext非主键内容datetimedate非主键日期exacttimetime非主键时间5.1.3userform存放用户信息,id是用户的编号为主键,自动生成。username是用户称呼,usertype是用户类型,password是用户的密码,这三行的内容在注册时必须填写不能为空。email是用户的电子邮件地址,realname是用户的真实姓名,regedate是用户注册日期,格式为年-月-日。locked判断用户是否被锁定,0表示正常,1表示用户被锁定。img是用户自定义头像初始有默认值,writes是用户发表的主题数,reply是用户回复的统计,marks是用户的积分,sign是用户的签名。表5.3userformidint(10)主键用户编号usernameverchar(50)非主键用户名usertypeverchar(50)非主键用户类型passwordverchar(50)非主键密码emailverchar(50)非主键电子邮件realnameverchar(50)非主键真实姓名regdatedate非主键注册日期lockedint(2)非主键禁言imgverchar(255)非主键头像图片writesint(10)非主键发表主题数replyint(10)非主键回复数marksint(10)非主键积分signstext非主键签名5.1.4usertextform存放用户发表的主题,id用户文章的编号,自动生成为主键。title是文章的题目,content是文章的内容。username是用户的称呼。datetime和exacttime是注册的日期和时间,格式分别为年-月-日和时-分-秒。view和reply是主题的被浏览数和回复数。locked判断主题是否被锁定,0表示正常,1表示锁定。sticky判断主题是否置顶,0表示未置顶,1表示已被置顶。examine判断主题是否通过审核,0表示还未通过审核,1表示已通过审核。hot用来统计用户对主题执行的置顶操作数。editorname和editdate、edittime是修改主题的用户称呼和修改的是日期、时间,日期和时间的格式分别为年-月-日和时-分-秒。表5.4usertextformidint(10)主键文章编号titleverchar(50)非主键标题contenttext非主键内容usernameverchar(50)非主键作者datetimedate非主键日期exacttimetime非主键时间viewint(10)非主键浏览数replyint(10)非主键回复数lockedint(2)非主键锁定stickyint(2)非主键置顶examineint(2)非主键审查hotint(10)非主键推荐editornameverchar(50)非主键修改者editdatedate非主键修改日期edittimetime非主键修改时间5.1.5userreplyform存放用户在论坛内的评论,id是回复在表内的编号,自动生成为主键。replyid为回复的主题编号。content为回复内容,quote为引用的回复内容。username是用户的称呼,datetime、exacttime是回复的日期、时间。replyno为回复该主题时的次序。shut用来判断回复是否被屏蔽,0表示正常,1表示被屏蔽。editorname,edittime和edittime为修改回复的用户名,修改日期和修改时间。日期和时间的格式分别为年-月-日和时-分-秒。表5.5userreplyformidint(10)主键回复编号replyidint(10)非主键回复主题编号contenttext非主键内容quotetext非主键引用usernameverchar(50)非主键作者datetimedate非主键日期exacttimetime非主键时间replynoint(10)非主键回复该主题的次序shutint(2)非主键屏蔽editornameverchar(50)非主键修改者editdatedate非主键修改日期edittimetime非主键修改时间5.1.6hottextform记录用户对主题所作的置顶操作,id是置顶记录的编号,支持生成为主键。username为执行置顶操作的用户名。title为置顶文章的内容。datetime和exacttime是执行置顶操作的日期和时间,日期和时间的格式分别为年-月-日和时-分-秒。。textid是被置顶的文章编号。表5.6hottextformidint(10)主键编号usernameverchar(50)非主键用户名titleverchar(50)非主键标题datetimedate非主键日期exacttimetime非主键时间textidint(10)非主键文章编号5.1.7messageform存放站内短消息,id是消息的编号,自动生成为主键。poster和receiver是消息的发送者和接收者。title、content是消息的题目、内容。datetime、exacttime是短消息发送的日期和时间,日期和时间的格式分别为年-月-日和时-分-秒。表5.7messageformidint(10)主键消息编号posterverchar(50)非主键发送者receiververchar(50)非主键接收者titleverchar(50)非主键标题contenttext非主键内容datetimedate非主键日期exacttimetime非主键时间5.1.8keyform存放注册码,id是注册码的编号,自动生成为主键。owner是注册码的所有者,user是注册码的使用者,注册码未被使用时该值默认为空。keyworks是注册码的内容。表5.8keyformidint(10)主键注册码编号ownerverchar(50)非主键拥有者userverchar(50)非主键使用者keywordsverchar(15)非主键注册码5.2具体功能实现为了能更好的说明网站的具体功能和实现方法,下面从网站的注册登陆开始,一步步的介绍站内的功能并说明功能实现的方法及其代码。5.2.1用户注册登录注册的链接点击有两处,分别在主界面my_index.php和论坛主页main_form.php上,点击链接后进入的页面相同为create_user.php。注册时必填的信息为用户名,密码,确认密码,电子邮件,真实姓名和注册码,将其中注册码的获得在后面说明。点击确认信息被传送到add_user.php,首先判断必要的信息是否正确输入,之后查询数据库内的用户名,查看新用户名是否已经存在,如果上述检查有一步没有通过,则终止注册,显示错误信息。在输入信息检查完成后,判断用户是否提交了自定义头像,签名这两项附加信息,根据不同输入情况分别使用四条SQL语句将新用户的信息加入数据库。其中自定义头像需要专门的图像函数以及文件上传函数操作,将在下一节介绍。用户注册关键代码如下:$username=$_POST['username'];//用户名$password=$_POST['password'];//密码$repassword=$_POST['repassword'];//重复密码$realname=$_POST['realname'];//真实姓名$email=$_POST['email'];//电子邮件$signs=$_POST['signs'];//签名$keywords=$_POST['keywords'];//注册码…………….输入信息判断…………….四种不同情况的SQL语句if(!$signs&&$img)//有自定义头像无签名{$sql="insertintouserform(username,password,email,realname,regdate,img)values('$username','$password','$email','$realname',NOW(),'$img')";}elseif(!$img&&$signs)//有签名没有自定义头像{$sql="insertintouserform(username,password,email,realname,regdate,signs)values('$username','$password','$email','$realname',NOW(),'$signs')";}elseif($img&&$signs)//有签名且有头像{$sql="insertintouserform(username,password,email,realname,regdate,img,signs)values('$username','$password','$email','$realname',NOW(),'$img','$signs')"; }Else//既没有签名也没有头像{$sql="insertintouserform(username,password,email,realname,regdate)values('$username','$password','$email','$realname',NOW())";}$result=mysql_query($sql);//执行SQL语句注册后在主页面的登录框内输入用户名密码或点击论坛主页上的链接便可以登录网站了。其中主页面在每次加载时检查是否有登录数据传送,如果有则查询数据库判断用户的类型,并将用户名存入不同的全局变量中,管理员:$_SESSION['adminname'];高级用户:$_SESSION['adminusername'];普通用户:$_SESSION['username'];普通用户还要将用户是否被禁言的状态保存在全局变量$_SESSION['state']中[10]。之后刷新主页面。此时登录框内显示欢迎用户登录的信息。若未发现登录数据,则在登录框内显示输入栏由用户输入用户名密码后执行上述步骤登录。而论坛上的登录链接打开login_user.php页面,用户在输入用户名密码后,代码执行和主页面相同的判断,全局变量处理步骤后将页面转回到论坛主界面。图5.1登陆界面关键判断部分的代码:if($_POST['submit']){………………//SQL查询userform表并将结果复制到变量$rows[]……………….if($rows[usertype]=='admin')//管理员{ $_SESSION['adminname']=$rows[username];//管理员SESSION变量} if($rows[usertype]=='adminuser')//高级用户{ $_SESSION['adminusername']=$rows[username];//高级用户SESSION变量} $_SESSION['username']=$rows[username];//普通用户 $_SESSION['state']=$rows[locked];//用户状态变量………………..用户注册时所需的注册码可以由管理员、高级用户和积分达到一定程度的用户申请获得。点击edit_user.php页面上的申请注册码链接进入ask_key.php页面,在确认用户权限无误后检查用户已有未使用的注册码数量,目前用户可以拥有的未使用注册码上限暂定为10个。全部检查完成之后使用随机字符串substr()函数和随机数rank()函数生成注册码[11],以拥有一定积分的用户为例的代码:$username=$_SESSION['username'];//获得用户名$sql="select*fromuserformwhereusername='$username'";//查询用户积分$result=mysql_query($sql);//执行查询$rows=mysql_fetch_assoc($result);//获得查询结果if($rows[marks]>=5)//普通用户需要积分达到5分以上{$sql="selectcount(*)fromkeyformwhereowner='$username'anduserisnull";//用户可以拥有的未使用注册码数量最多为10个$result=mysql_query($sql);$rows=mysql_fetch_row($result);if($rows[0]>=10)//超过10个报错{ Exitmessage(" 你只能拥有10个可用的注册码");}while($true==0){//true变量用来识别新申请的注册码是否存在,如果新注册码也存在则true为1,使用while循环重新生成新的注册码 $keywords=substr("ABCDEFG",rand(0,6),"1").substr("ABCDEFG",rand(0,6),"1").rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);//使用随机字符函数substr()和随机数函数rand()生成注册码 $sql="select*fromkeyformwherekeywords='$keywords'";//查看新生成的注册码是否已存在 $result=mysql_query($sql); $rows=mysql_fetch_assoc($result); if(!$rows)//新的注册码已存在true=1 { $true=1; }}$sql="insertintokeyform(owner,keywords)values('$username','$keywords')";//将新注册码添加到keyform表中$result=mysql_query($sql);echo"你申请的注册码为:".$keywords."<br>";之后用户可以点击edit_user.php页面上的查看注册码查看自己拥有注册码的情况。图5.2查看注册码5.2.2用户个人信息管理用户在注册登录后便可以点击主界面和论坛主页上的链接进入个人管理中心edit_user.php查看管理自己的信息。修改后数据将被送到edit_user_data.php处理。其中大部分的代码和工作过程基本和注册时相同,只是将原来注册时的SQL语句插入insert改为修改update。接下来介绍网站内自定义图片的操作及其代码。自定义图片设计到PHP文件上传函数和PHP图片操作函数。首先为了能实现文件的上传,需要在HTML表单的代码做修改如下:<formmethod="post"action="edit_user_data.php"enctype="multipart/form-data">必须设置enctype属性为multipart/form-data,意思为设置表单的MIME编码,这样才能完整的传送信息[12]。之后使用PHP提供的$_FILE[]处理上传的图片文件,在上传文件时还要注意文件的类型,本次设计的网站上传图片支持jpeg,gif,png,而IE浏览器和firefox浏览器对图片类型的表示方法有些不一样,如IE表示jpeg图片为pjpeg而firefox则是jpeg,这些细节在编程是容易导致错误,必须仔细处理[13]。上传后图片的大小必须有一定的限制,若超出了网站规定则需要使用PHP的图形函数对其做修改。以下这段代码是以IE7环境下jpeg图片为例的一段上传代码和修改图片大小的代码。图片裁剪代码:functionmakethumb($imgsrc,$imgdst,$dstW,$dstH)//原图片数据,新图片名,新图片宽,新图片高{$srcW=imagesx($imgsrc);//原图片宽$srcH=imagesy($imgsrc);//原图片高$newimg=imagecreatetruecolor($dstW,$dstH);//生成一张宽,高为$dstW,$dstH的新图片imagecopyresized($newimg,$imgsrc,0,0,0,0,$dstW,$dstH,$srcW,$srcH);//将原图片$imgsrc拷贝到$newimg,并调整大小imagejpeg($newimg,"D:/PHPnow/htdocs/uploads/".$imgdst);//将生产的新图片$newimg存放到指定目录下,此处路径参数根据PHP不同安装路径要做相应的修改}图片上传代码:if($_FILES['img']['name']){if($_FILES['img']['size']>0&&$_FILES['img']['size']<1048576){ if($_FILES['img']['type']=='image/pjpeg')//IE浏览器 { $uniqid=uniqid(); $uploads="D:/PHPnow/htdocs/uploads/";//图片上传后存放的路径,此处参数根据PHP不同安装路径要做相应的修改 $imgdir=$uploads.$username.$uniqid."."."jpg";//图片存放完整路径和图片存放名称 $img="uploads/".$username.$uniqid."."."jpg";//网站使用图片是的路径 $imgname=$username.$uniqid."."."jpg";//图片名 $sql="select*fromuserformwhereusername='$username'"; $result=mysql_query($sql); $rows=mysql_fetch_assoc($result); if($rows['img']!='none.png')//该用户已上传过图片 { unlink("D:/PHPnow/htdocs"."/".$rows['img']);//删除原文件 } move_uploaded_file($_FILES['img']['tmp_name'],$imgdir);//存放新文件 $size=GetImageSize($img);//分析文件大小,产生一个数组,第一个是长,第二个是宽,第三个是类型。 if($size[0]>150) { $imgsrc=imagecreatefromjpeg($img);//将图片转为数据流 makethumb($imgsrc,$imgname,150,150);//调用makethumb函数对超过限制长宽的图片做修改 } $sql="updateuserformsetimg='$img'whereusername='$username'"; $result=mysql_query($sql); }….图5.3个人控制面板5.2.3管理员登录本次设计的网站管理员帐号默认只有一个,管理员帐号无法申请注册,只有通过直接数据库操作才可以添加。管理员登录可以在主页面登录框输入管理员帐号密码或点击主页上的管理员按钮链接到专门的登录页面。在登录框内输入登录信息这种方式的后台代码和用户登录时完全一样,区别在于SESSION变量的赋值不同上,而点击管理员按钮后页面将被转到login_admin.php,在这里输入正确的登录信息后将进入管理员功能界面admin_main_form.php。5.2.4管理员功能进入管理与功能界面后,可以看到四个管理员操作的选项:写新文章,察看文章,论坛用户管理,论坛管理。写新文章时站长在write_diary.php页面输入文章标题和正文内容后信息将被发送到add_diary.php页面。在信息传送到add_diary.php之后首先对标题和内容进行检查,若发现有一项为空则停止报错,检查完后便将文章添加到数据库admintextform中。论坛用户管理界面提供管理员查看用户信息和删除,禁言,解禁,加分,扣分,提升等级,降低等级七项操作。删除用户时首先转入ask_delete_user.php页面,询问是否确认删除,确认后转入delete_user.php页面,在删除用户信息的同时删除该用户发表的主题、回复以及上传的自定义头像。代码:$id=$_GET['id'];//得到用户的编号$sql="select*fromuserformwhereid='$id'";//查询用户名$result=mysql_query($sql);//执行查询$rows=mysql_fetch_assoc($result);//得到查询结果$username=$rows[username];$sql="deletefromuserformwhereid='$id'";//删除用户信息$result=mysql_query($sql);$sql="deletefromusertextformwhereusername='$username'";//删除该用户的主题$result=mysql_query($sql);$sql="deletefromuserreplyformwhereusername='$username'";//删除该用户的回复$result=mysql_query($sql);if($rows['img']!='none.png')//删除该用户上传的头像图片{unlink("D:/PHPnow/htdocs"."/".$rows['img']);}图5.4管理员论坛用户管理界面禁言、解禁用户的代码基本一致,页面分别为lock_user.php和free_user.php,使用SQLUPDATE语句对userform中的locked字段进行操作来修改用户的状态。加分、扣分的代码和禁言、解禁类似,plus.php和subtract.php两个页面分别执行加分和扣分,数据库同样使用SQLUPDATE语句,对userform中的marks进行操作。提升、降低等级的代码同样和前两类操作十分相似,区别在于使用SQLUPDATE语句对userform的usertype值进行修改。下面是锁定用户的关键代码。………………$sql="updateuserformsetlocked='1'whereid='$id'";//修改用户状态的SQL代码$result=mysql_query($sql);//执行SQL语句$sql="select*fromuserformwhereid='$id'";$result=mysql_query($sql);$rows=mysql_fetch_assoc($result);header("Location:select_user.php?name=$rows[username]");……………… 论坛管理用来管理论坛内的主题,管理员可以审核新发表的主题,以及对主题进行置顶,锁定,删除,解除置顶,解除删除的操作,六项操作页面分别为examin_text.php,sticky_text.php,locked_text.php,delete_text.php,unsticky_text.php,unlocked_tsxt.php。这六项操作后台代码同样是以SQLUPDATE为核心,因为代码工作方式与论坛用户功能中的操作类似,因此在这里不作详细说明。图5.5管理员论坛管理界面5.2.5博客站长在点击管理员界面中的写新文章链接后就可以进入发表博客的界面write_diary.php,在这里输入标题和正文后信息被发送到add_diary.php页面,在这里首先检查标题或内容是否为空,如有问题则报错进行提示;检查无误之后使用SQLADD语句将文章信息插入到admintextform表中。点击主页面上的文章浏览按钮后,就可以进入查看博客的页面list_diary.php,这个页面列出了站长发表的文章的链接并提供以标题为关键字的搜索功能,搜索功能由select_diary.php,在信息被传送到select_diary.php页面后根据关键字查询admintextform表,并将查询内容显示在select_diary.php页面上。因为文章的数量可能较多,如果在一个页面全部列出可能会影响外观,因此每个页面的链接数要做一定限制,如10到15个,之后使用循环语句将admintextform中的文章信息动态的显示在页面上。图5.6博客文章列表关键代码:………$page=$_GET['page'];//取得当前的页面编号$eachpage=15;//每个页面显示15个链接if(!$page)//判断是否为第一页{$page=1;}if(!$page||$page==1)//确定当前为第一页{$start=0;//从数据库表中第一篇文章开始} else{$start=(($1)*$eachpage);//计算当前页面第一片文章在数据库表中的编号}$sql="select*fromadmintextformorderbyiddesclimit$start,$eachpage";//在SQL语句中加入范围限制从$start到$eachpage结束$result=mysql_query($sql);//执行查询….while($rows=mysql_fetch_assoc($result))//while循环输出{……………echo$rows[title];……………..//显示链接}…..之后还要加上页码栏以便用户转跳页面判断页码的关键代码:if($page>1)//判断当前是否第一页{$prepage=$1;//获取前一页的页码}$currentend=$start+$eachpage;//当前页码中最大的文章编号$sql="selectcount(*)fromadmintextform";//查询表中的最大文章编号$result0=mysql_query($sql);$rows0=mysql_fetch_row($result0);$total=$rows0[0];//获得最大的文章编号if(((int)($total/$eachpage))<($total/$eachpage))//计算当前最大的页码{$totalpage=((int)($total/$eachpage))+1;//页码数的计算方法为总文章数除以每页的文章数,结果为浮点数则取整加一}else{$totalpage=(int)($total/$eachpage);}if($total>$currentend)//当前页码中最大的文章编号和表中的最大文章编号相比,确定当前的页面是不是最后一页{if(!$page){//是否为第一页$nextpage=2;}else{//取得下一页的页码$nextpage=$page+1;}}…..输出页码。用户点击list_diary.php页面上的标题链接后进入文章正文浏览的界面view_diary.php,普通用户可以查看文章的正文并发表评论,而管理员还可以修改文章的内容,用户权限的识别通过变量SESSION来判断。用户发表留言通过reply_diary.php页面完成,其代码与之前的博客文章发表较为相似,在这里不详细说明。5.2.6论坛论坛的主页面为main_form.php,在这里提供用户个人控制,站内短消息的链接,同时动态的显示用户主题列表。在显示用户文章列表时使用和list_diary.php页面相似的方法:多页面;显示同一页面链接的数量;动态生成;页码栏,这些代码已经在上一节有过介绍,在这里不详细说明。在显示文章标题链接时,同时显示该文章在usertextform表中的其他详细信息日期,访问回复数量,被推荐次数,置顶锁定状态以便给用户浏览时提供更直观的信息。图5.7论坛主界面论坛同样提供搜索的功能,与博客中的搜索相比,论坛中的搜索关键字有用户名,标题和时间三种,通过html表单中添加<select>标签定义关键字的类型,然后将关键字的类型以及查询关键字发送到select_text.php页面完成查询,在这之后将查询结果显示在select_text.php页面上。关键代码如下:$key=$_POST['key'];//获得form表单中的关键字类型$text=$_POST['text'];//获得关键字if($key==1)//以标题为关键字{$sql="select*fromusertextformwheretitlelike'%$text%'orderbystickydesc,datetimedesc,exacttimedesc";}if($key==2)//以作者为关键字{$sql="select*fromusertextformwhereusername='$text'orderbystickydesc,datetimedesc,exacttimedesc";}if($key==3)//以日期为关键字{$sql="select*fromusertextformwheredatetime='$text'orderbystickydesc,datetimedesc,exacttimedesc";}$result=mysql_query($sql);执行查询用户点击main_form.php中发起新话题的链接后进入write_text.php页面发表新主题,在输入标题和内容后,信息被发送到add_text.php页面,整个流程和管理员添加新的博客文章类似,最后用户发表的新主题被添加到usertextform表中。新发表的主题为被管理员审核前除了作者以外的用户是无法回复的。主题发表后修改权限只有管理员、作者和高级用户拥有,同时这三类用户还有对在此主题内回复过用户积分的修改和屏蔽不良用户评论的权限。用户点击main_form.php页面上的标题链接后可以进入浏览主题内容的页面user_view_text.php,分页显示主题的内容以及用户的回复,每页显示的回复为五个。在显示主题和回复内容的同时显示作者的个人信息。主题推荐的链接,主题内容和回复内容的修改的链接,加分、屏蔽发言的链接都在这个页面上。点击推荐链接后页面转到hot_text.php,在检查用户的权限后还要检查hottextform表中的信息,因为用户对同一主题的推荐只能有一次。在检查完成后修改usertextform表中主题被推荐的次数并将该用户以推荐该主题的信息添加到hottextform表中。编辑主题和编辑回复的代码类似,页面分别为user_edit_text.php和user_edit_reply.php,信息传递到处理页面后检查用户身份和权限,完成后使用SQLADD语句修改usertextform表和userreplyform表的数据。用户屏蔽的页面为shut_reply.php,发言被屏蔽后用户发言的内容会被提示内容取代。回复主题时用户可以直接在user_view_text.php页面底部的输入框内输入回复内容或点击引用进入引用回复页面,两个页面为user_reply_text.php和user_quote.php。两个页面代码上的主要区别在于发往user_quote.php页面还包括了引用的回复内容,该回复的作者名和在数据库表内的编号。在数据库操作上,引用回复还要添加userreplyform表中quote的内容。回复功能的代码:$sql="selectmax(replyno)fromuserreplyformwherereplyid='$replyid'";//查询总的回复数$result=mysql_query($sql);//得到查询结果if($result){$rows=mysql_fetch_row($result);$replyno=$rows[0]+1;//确定当前的回复是第几号回复}else{$replyno=1;//第一号回复}$sql="updateusertextformsetreply=reply+'1'whereid='$id'";//用户的回复数+1$result=mysql_query($sql);sql="updateuserformsetreply=reply+'1'whereusername='$username'";$result=mysql_query($sql);……用户提交回复后为了能让用户更方便的查看自己的回复内容,页面要转到该用户回复的那一页上而不是第一页,这是页面定位的代码:……..$sql="selectcount(*)fromuserreplyformwherereplyid='$replyid'";$result=mysql_query($sql);$rows=mysql_fetch_row($result);$page=(int)($rows[0]/$eachpage);//利用除法取余判断回复的内容在第几页if($page<($rows[0]/$eachpage))//无法整除时的页数{$page=$page+1;}header("Location:user_view_text.php?id=$replyid&page={$page}");//回到用户回复内容显示的那一页5.2.7站内短消息点击main_form.php页面中的站内短消息链接就可以进入message.php站内短消息界面,message.php页面的链接显示和main_form.php以及list_diary.php一样,多页面;显示同一页面链接的数量;动态生成;页码栏。短消息的发生和在论坛发表主题类似,区别在于短消息只有收件人才可以看到标题和内容。message.php页面初始化时根据用户的SESSION变量查询messageform将用户名与收件人名相同的短消息显示在页面上,用户点击链接进入receive_message.php页面查看邮件后点击回复链接便可以迅速为发信人回复。图5.8站内短消息界面短消息功能的代码较为简单且与论坛部分代码类似,因此这里不再展开详细说明。5.2.8系统配置与公共头文件系统配置和公共头文件是网站十分重要的组成,前者包含了公共参数配置,公共函数等;后者包含了页面中一致的部分如标题,页面样式等。系统公共函数页面config.inc.php的常用函数有:CheckEmail($email)电子邮件格式检查函数;ExitMessage($message,$url='')报错函数;FilterBadWords($str)清除脏字函数;makethumb($imgsrc,$imgdst,$dstW,$dstH)图片裁剪函数;以及打开SESSION变量,调整时区的函数。页面还定义了数据库名,数据库用户名,数据库登录密码的参数[14],并完成了数据库连接的初始化,代码:define('DB_USER',"root");//数据库用户名define('DB_PASSWORD',"root");//登录密码define('DB_HOST',"localhost");//数据库主机define('DB_NAME',"db_1");//数据库名……$db=mysql_pconnect(DB_HOST,DB_USER,DB_PASSWORD);//连接初始化if(!$db)//错误提示{die('<b>数据库连接失败</b>');exit;}mysql_select_db(DB_NAME);//选择数据库表公共头文件有head.inc.php,bbshead.inc.php,diary_head.php,admin_head.php,foot.inc.php五个,分别在用户界面,博客,论坛和管理员相关界面使用。5.2.9javascript和AjaxJavascript在本次的设计中主要用于按钮特效和图片特效中,Dreamweaver提供的多种行为行为中包含了图片切换回复的javascript代码,用来制作按钮效果很好。除此之外,javascript和php结合可以实现界面异步刷新Ajax,在主页这样图片和内容较多,主题刷新比较缓慢的页面使用可以很好的改善用户的体验[15]。Ajax的核心是XMLHTTP组件对象XMLHttpRequest,创建好该对象后,就可以使用该对象的方法和属性进行操作了。IE浏览器XMLHttpRequest初始化:xmlhttp=newActiveXObject("Microsoft.XMLHTTP");xmlhttp=newActiveXObject("Msxml2.XMLHTTP");Mozillafirefox浏览器初始化:xmlhttp=newXMLHttpRequest();用于发送HTTP请求的函数:functionsendRequest(url){…………….xmlhttp.open("GET",url,true);//确定发送请求的方式和URL以及是否同步执行下段代码xmlhttp.onreadystatechange=processRequest;//指定处理函数xmlhttp.send(null);//发送请求}处理返回信息的函数:functionprocessRequest(){if(xmlhttp.readyState==4){//判断对象状态if(xmlhttp.status==200){//信息已经成功返回,开始处理信息document.getElementById(currentPos).innerHTML=xmlhttp.responseText;}else{//页面不正常alert("您所请求的页面有异常。");}}}显示返回信息的函数functionshowContent(obj){document.getElementById("main_board").parentNode.style.display="";document.getElementById("main_board").innerHTML="正在读取数据..."currentPos="main_board";sendRequest("news_server.php?caption="+obj);}news_server.php是服务器端的文件,用来处理服务器端发送的数据,根据传送值caption的不同返回不同数据。$caption=$_GET["caption"];if($caption=="caption_1"){echo"<imgsrc='top_word.png'><br>";echo"测试内容一";}第6章测试6.1测试环境测试的操作系统环境为windowsXP/Vista,测试的浏览器为IE6/7,firefox3。6.2测试内容测试的主要内容是检查设计的各项功能在不同的操作系统和浏览器环境下能否正常的工作。在特殊情况下是不是有可能会出现设计漏洞导致的错误。数据库的操作也会是测试的重点,数据的正确添加删除以及修改对于网站的正常工作十分重要。图片上传功能和Ajax在不同浏览器有多重情况,必须做多项测试检验是否达到预期目标。功能检查之后是界面的检查,本次设计的网站图片大量采用png格式而IE浏览器在版本6之前对于png的支持并不好,因此要对界面布局以及图片的设计使用做一定的检查和调整。最后使用多台电脑,模拟测试用户通过internet连接服务器登录网站的情况,检查漏洞和不足。结论从去年10月份开始选题到今年的四月份,整个毕业设计的工作已经进入了收尾阶段。按照开题报告中预期的进度,在这几个月里顺利的完成了毕业设计作品的开发以及论文的编写。本次设计的主题:基于PHP技术的个人网站开发,其出发点是在目前WEB2.0概念流行的互联网大环境下,创建一个具有WEB2.0特点,以虚拟社区为主题的网站。选择PHP开发的原因是PHP具有开源,轻便,简单且功能强大的优点,且由于网站开发多年,技术成熟,能够数量掌握PHP的开发使用方法对于今后的学习工作有很大的帮助。本次毕业设计网站的主要功能界面为:主界面;个人日记(博客)界面;管理员界面和论坛界面,同时为了完成界面中的各种功能设计了8张数据库表格:admintextform用来存放博客文章;diaryreplyform用来存放博客回复;userform用来存放用户信息;usertextform用来存放论坛主题;userreplyform用来存放主题回复;hottextform存放置顶主题;messageform存放站内短消息;keyform存放注册码。网站设计还用到了javaseript,AJAX技术,来提高用户在浏览时的体验。整个网站的运行流程为:用户进入主界面my_index.php选择注册(create_user.php)或是登录(login_user.php),用户注册登录之后可以进入个人控制面板中修改个人信息(edit_user.php)或者进入站长日记页面(list_diary.php)或论坛主页(main_form.php)。在个人控制面板中高级用户除了基本的个人信息修改之外还可以申请注册码(ask_key.php),注册码是注册时必须输入的一串字符,只有高级用户和管理员可以申请。站长日记是一个简单的博客,站长可以在这里发表自己的文章或日记,并同用户交流。而论坛是整个站点的核心,网站的主要内容也都集中在这里。论坛的内容由用户之间的交流不断更新,用户可以在这里发表新的话题(write_text.php)或对他人发表话题进行回复(user_reply_text.php),还可以对指定用户发送站内短消息。论坛内的许多功能都有权限区分,如推荐功能;修改他人主题或他人回复;屏蔽回复;加扣分这些功能都是高级用户和管理员才可以执行的。最后用户可以点击推出(exit_user.php)或是直接关闭浏览器离开网站。管理员的登录过程同用户类似,通过管理员登录界面(login_admin.php)管理员主界面(admin_main_form.php)管理员在博客内发表新文章(write_diary.php),管理论坛(edit_text.php)和注册用户(list_user.php)的界面链接都在这里。管理员登录后也可以和用户一样在论坛发表话题和回复。整个网站的设计和实现到这里就基本完成了,最后的工作是代码测试和论文的编写。在本次的设计中对于PHP这一优秀的网页动态语言有了非常多的了解。同时也掌握了使用PHP+MySQL+Apache的组合开发运行网站的能力,了解了WEB2.0技术AJAX技术等新兴WEB技术的内容和应用方法,极大的开阔了视野,并将过去在学校中所学的知识运用到了实践开发中。同时本次的设计中也存在着部分问题,个人总结主要在代码的重复利用,应用维护和框架设计上还有许多需要改进的地方。以这次设计为起点,在未来的WEB设计开发中引入如Smarty这样模板技术,规范网站的设计层次,简化代码复杂度,使其更能适应多人合作项目的需要。最终使自己的能力从独立开发小型个人网站提升到能够参与大型多人合作项目中。参考文献[1]Merlo,Ettore,Letarte,Dominic,Antoniol,Giuliano.AutomatedProtectionofPHPApplicationsAgainstSQL-injectionAttacks[C].SoftwareMaintenanceandReengineering,2007.CSMR'07.11thEuropeanConferenceon,2007,3.[2]Mgheder,M.A.,Ridley,M.J..AutomaticGenerationofWebUserInterfacesinPHPUsingDatabaseMetadata[C].InternetandWebApplicationsandServices,2008.ICIW'08.ThirdInternationalConferenceon,2008,5.[3]Santos,J.,Mendonca,J.,Martins,J.C..InstrumentationremotecontrolthroughinternetwithPHP[C].VirtualEnvironments,Human-ComputerInterfacesandMeasurementSystems,2008.VECIMS2008.IEEEConferenceon,2008,6.[4]思静极.PHP回顾与展望-框架时代来临[EB/OL]HYPERLINK"/News/IT/041
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报参考:教育家精神引领高校思政课教师职业素养评价体系建构研究
- 二零二五版铝合金建筑模板采购协议书4篇
- 商场内品牌专卖店装修许可协议(2025年)2篇
- 2025年度苗木种植与林业产业发展合作合同4篇
- 二手房合作投资合同模板2024版B版
- 二零二五年度人工智能教育培训合同补充协议6篇
- 二零二五年度旅行社与航空公司合作协议书3篇
- 2025年度品牌跨界合作与品牌授权合作协议4篇
- 二零二五版个人贷款居间中介服务协议书6篇
- 2025年度个人房产抵押借款合同规范文本8篇
- 【寒假预习】专题04 阅读理解 20篇 集训-2025年人教版(PEP)六年级英语下册寒假提前学(含答案)
- 2024年智能监狱安防监控工程合同3篇
- 2024年度窑炉施工协议详例细则版B版
- 幼儿园篮球课培训
- 【企业盈利能力探析的国内外文献综述2400字】
- 统编版(2024新版)七年级《道德与法治》上册第一单元《少年有梦》单元测试卷(含答案)
- 100道20以内的口算题共20份
- 高三完形填空专项训练单选(部分答案)
- 护理查房高钾血症
- 项目监理策划方案汇报
- 《职业培训师的培训》课件
评论
0/150
提交评论