版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章要求:第16章综合案例——博客网站了解博客网站的总体设计掌握数据库设计方法了解网站文件架构掌握公共文件的编写掌握前台页面、文章展示、相册展示、博主登录等主要功能模块的设计主要内容1.概述2.网站总体设计3.数据库设计4.文件架构设计5.公共文件的编写6.前台主页面设计7.文章展示模块设计8.相册展示模块设计9.博主登录模块设计10.文章管理模块设计11.相册管理模块设计12.网站发布第16章综合案例——博客网站16.1概述博客,译自英文Blog。它是互联网平台上的个人信息交流中心。通常博客发表文章,从而提出个人的意见、表达自己的想法。它可以让每个人零本钱、零维护地创立自己的网络媒体,每个人都可以随时把自己的思想火花和灵感更新到博客网站上。本章将介绍如何开发博客网站。16.2.1工程规划16.2.2系统功能结构图16.2网站总体设计博客网站是一个ASP与数据库技术结合的典型应用程序,由前台用户操作和后台博主管理模块组成,规划系统功能模块如下:前台用户操作该模块主要包括我的文章、我的相册、博主登录、Blog搜索、博主推荐、最新评论、网站统计等功能。后台博主管理该模块主要包括文章信息管理、相册信息管理、管理员资料管理等功能。16.2.1工程规划博客网站前台功能结构如图16-1所示。图16-1博客网站前台功能结构16.2.2系统功能结构图博客网站后台功能结构如图16-2所示。图16-2后台功能结构16.3数据库设计16.3.1数据库ER图分析16.3.2数据表概要说明16.3.3主要数据表的结构这一设计阶段是在系统功能结构图的根底上进行的,设计出能够满足用户需求的各种实体以及它们之间的关系,为后面的逻辑结构设计打下根底。根据以上的分析设计结果,得到文章信息实体、文章分类信息实体、文章评论信息实体、相册信息实体、相册分类信息实体和管理员信息实体。下面来介绍几个主要信息实体的E-R图。文章信息实体文章信息实体包括:文章ID、文章所属分类ID、文章标题、文章内容、作者名称和发表时间。文章信息实体的E-R图,如图16-3所示。图16-3文章信息实体E-R图16.3.1数据库ER图分析文章分类信息实体文章分类信息实体包括:文章分类ID、文章分类名称和添加时间。文章分类信息实体的E-R图,如图16-4所示。图16-4文章分类信息实体E-R图文章评论信息实体文章评论信息实体包括:评论ID、文章ID、评论人昵称、评论内容和发表时间。文章评论信息实体的E-R图,如图16-5所示。图16-5文章评论信息实体E-R图相册信息实体相册信息实体包括:相册ID、相册分类ID、图片名称、图片标识、图片信息和添加时间。相册信息实体的E-R图,如图16-6所示。图16-6相册信息实体E-R图相册分类信息实体相册分类信息实体包括:相册分类ID、相册分类名称和添加时间。相册分类信息实体的E-R图,如图16-7所示。图16-7相册分类信息实体E-R图根据上一节的介绍,可以创立与实体对应的数据表。为了使读者对本系统数据库的结构有一个更清晰的认识,下面给出数据库中包含的数据表的结构图,如图16-8所示。图16-8数据表结构图16.3.2数据表概要说明数据库在整个管理系统中占据非常重要的地位,数据库结构设计的好坏直接影响着系统的效率和实现效果。本系统采用的是Access2000数据库,数据库名称为db_Blog。下面介绍db_Blog数据库中的主要数据表结构。tab_article〔文章信息表〕文章信息表主要用于保存添加的文章信息,tab_article表的结构如表16-1所示。表16-1 tab_article表结构716.3.3主要数据表的结构字段名称数据类型是否主键长度默认值允许空字段描述id自动编号是唯一标识Aclass数字40所属类别IDAtitle文本50否文章标题Acontent备注否文章内容Aauthor文本50否作者名称Adate日期/时间8Now()添加时间tab_article_class〔文章分类信息表〕文章分类信息表主要用于保存文章的分类信息,tab_article_class表的结构如表16-2所示。表16-2 tab_article_class表结构字段名称数据类型是否主键长度默认值允许空字段描述id自动编号是唯一标识Acname文本50否文章分类名称Acdate日期/时间8Now()添加时间tab_article_commend〔文章评论信息表〕文章评论信息表主要用于保存对文章进行评论的信息,tab_article_commend表的结构如表16-3所示。表16-3 tab_article_commend表结构字段名称数据类型是否主键长度默认值允许空字段描述id自动编号是唯一标识Cid数字40文章ID编号Cname文本50否昵称Ccontent文本200否评论内容Cdate日期/时间8Now()添加时间tab_photo〔相册信息表〕相册信息表主要用于保存上传的相册信息内容,tab_photo表的结构如表16-4所示。表16-4 tab_photo表结构字段名称数据类型是否主键长度默认值允许空字段描述id自动编号是唯一标识Pclass数字40相册分类IDPname文本50否图片名称Ppic文本50否图片信息Pdate日期/时间8Now()添加时间tab_photo_class〔相册分类信息表〕相册分类信息表主要用于保存相册的分类信息,tab_photo_class表的结构如表16-5所示。表16-5 tab_photo_class表结构字段名称数据类型是否主键长度默认值允许空字段描述id自动编号是唯一标识Pcname文本50否相册分类名称Pcdate日期/时间8Now()添加时间在网站构建的前期,可以把网站中可能用到的文件夹先创立出来〔例如:创立一个名为images的文件夹,用于保存网站中使用的图片〕,这样可以标准网站的整体架构,使网站易于开发、易于管理、易于维护。笔者在开发博客网站时,设计了如图16-9所示的文件夹架构。图16-9文件夹架构图16.4文件架构设计16.5公共文件的编写16.5.1防止SQL注入和创立数据库连接16.5.2统计访问量为了防止SQL注入漏洞,可以将其相关代码与创立数据库连接的代码放置在同一个文件中〔如conn.asp文件〕。这样,可以保证网站中绝大局部文件都可以引用该公用文件,从而保证网站的平安。1.防止SQL注入当应用程序使用输入内容来构造动态SQL语句访问数据库时,会产生SQL注入攻击,SQL注入成功后,就会出现攻击者可以随意在数据库中执行命令的漏洞。所以,在程序代码中把一些SQL命令或者SQL关键字进行屏蔽,可以防止SQL注入漏洞的产生。将防止SQL注入漏洞的程序代码写入到数据库连接文件中,保证网站中的每个页面都调用此程序。程序逻辑是首先将需要屏蔽的命令、关键字、符号等用符号“|〞分隔并存储在变量中,再使用Split和Ubound脚本函数将页面接收到的字符串数据与其作比较,如果接收到的字符串数据包含屏蔽的数据信息,那么将页面转入到指定页面,不允许访问者进行其他操作。代码如下:<%dimSQL_InjdataSQL_Injdata="'|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" '定义需要屏蔽的命令、关键字、符号等SQL_inj=split(SQL_Injdata,"|") '获得由“|〞分隔的一维数组IfRequest.QueryString<>""ThenForEachSQL_GetInRequest.QueryString '遍历QueryString数据集合中的数据ForSQL_Data=0ToUbound(SQL_inj) '如果搜索到屏蔽的数据,那么跳转到网站首页ifinstr(Request.QueryString(SQL_Get),Sql_Inj(Sql_Data))>0Then Response.Redirect("index.asp")endifnextNextEndIf%>16.5.1防止SQL注入和创立数据库连接2.创立数据库连接为了提高程序的运行效率,保证网站浏览者能够以较快地速度翻开并顺畅地浏览网页,可以通过OLEDB方法连接Access数据库。OLE是一种面向对象的技术,利用这种技术可以开发可重用软件组件。使用OLEDB不仅可以访问数据库中的数据,还可以访问电子表格Excel、文本文件、邮件效劳器中的数据等。使用OLEDB访问Access数据库的代码如下:<%Dimconn,connstrSetconn=Server.CreateObject("ADODB.Connection")connstr="Provider=Microsoft.Jet.OLEDB.4.0;UserID=admin;Password=;DataSource="&Server.MapPath("DataBase/db_blog.mdb")&";"conn.openconnstr%>在网站中通过设计一个计数器可以统计网站的访问量,从而能够准确地掌握网站的访问情况。实现网站计数器的方法有很多,例如,可以使用FileSystemObject对象对文本文件进行操作。设计思路如下:〔1〕在判断指定的Cookies变量visitor为空的前提下,创立FileSystemObject对象并以只读方式翻开文本文件count.txt,读取其中的数据赋予指定的变量。〔2〕再以写文件方式翻开文本文件count.txt,将访问量累加1后写入到文件中。〔3〕给Cookies变量visitor赋值,并设置此变量的有效期为1天。代码如下:<%IfTrim(Request.Cookies(“visitor〞))=“〞ThenSetFSObject=Server.CreateObject("Scripting.FileSystemObject") '以只读方式翻开count.txtSetTextFile=FSObject.OpenTextFile(Server.MapPath("count.txt")) IfnotTextFile.AtEndOfStreamThennum3=TextFile.ReadLine EndIfSetTextFile=NothingSetTextFile=FSObject.OpenTextFile(Server.MapPath("count.txt"),2,true) TextFile.WriteLinenum3+1 SetTextFile=NothingSetFSObject=NothingResponse.Cookies("visitor")="visited" '为Cookies变量visitor赋值Response.Cookies("visitor").Expires=DateAdd("d",1,now())'指定Cookie的有效时间EndIf%>可以将以上代码编写在conn.asp文件中,以保证有效地统计网站访问量。16.5.2统计访问量16.6前台主页面设计16.6.1前台主页面概述16.6.2前台主页面的布局16.6.3前台主页面的实现网站前台主页面是网站提供给浏览者的第一视觉界面。前台首页不仅要有合理的整体布局,使浏览者有一个流畅的视觉体验;还应该通过各功能模块表达出网站的主题内容,使浏览者在最短的时间内了解网站的用途。本系统前台主页面的运行效果如图16-10所示。图16-10前台主页面16.6.1前台主页面概述前台主页面框架采用两分栏结构,分为4个区域:页头、侧栏、页尾和内容显示区。实现前台主页面的ASP文件为index.asp,该页面的布局如图16-11所示。图16-11前台主页面布局在index.asp文件中主要采用#include指令来包含各区域所对应的ASP文件。例如,页头对应文件为top.asp,侧栏对应文件为left.asp。在内容显示区,那么定义浮动框架标记<iframe>用于显示其他文件内容。16.6.2前台主页面的布局根据图16-11所示的页面布局,可以在index.asp页面中创立一个三行两列的表格,然后在相应的单元格中使用#include指令包含相应的ASP页面,并在左侧单元格中定义<iframe>标记。代码如下:<tablewidth="778"border="0"align="center"cellpadding="0"cellspacing="0"><tr><!--包含页头文件--><tdcolspan="2"><!--#includefile="top.asp"--></td></tr><tr><!--包含侧栏文件--><tdwidth="210"align="center"valign="top"><!--#includefile="left.asp"--></td><!--定义iframe标记--><tdwidth="568"align="center"valign="top"><iframename="mainFrame"src="web_index.asp"width="560"height="450"frameborder="0"marginheight="0"marginwidth="0"scrolling="auto"></iframe></td></tr><tr><tdheight="40"colspan="2"align="center"valign="middle">Copyright2021©FuturePYJ</td></tr></table>16.6.3前台主页面的实现16.7文章展示模块设计16.7.1文章展示模块概述16.7.2主页面文章展示的实现过程16.7.3文章列表展示的实现过程16.7.4文章详细显示的实现过程16.7.1文章展示模块概述文章展示模块的主要功能是浏览网站发表的文章列表,可以查看文章的详细内容,包括文章作者、发表时间等,并可以针对文章发表评论。文章展示模块主要包括:前台主页面文章展示;文章分类列表展示,如图16-12所示;图16-12文章分类列表展示文章详细内容显示,如图16-13所示。图16-13文章详细内容显示16.7.2主页面文章展示的实现过程在网站前台主页面中展示最新的两篇文章信息,包括文章标题、文章局部内容、发表时间以及评论数量,单击“阅读全文〞超链接可以查看到文章的详细内容,如图16-10所示。在web_index.asp页面中,首先查询文章信息表中最新的两条记录,然后在依次展示文章内容的同时查询文章评论信息表以获取文章对应的评论数量。代码如下:<%Setrs=Server.CreateObject("ADODB.Recordset")'查询最新的两条记录信息sqlstr="selecttop2id,Atitle,Adate,Aclass,Acontentfromtab_articleorderbyiddesc"rs.opensqlstr,conn,1,1Ifrs.eofThen Response.Write("<tr><tdheight=20colspan=2align=center>暂无收藏!</td></tr>") Response.End()Else whilenotrs.eof '应用while…wend语句循环显示记录集中的记录 Setrs_commend=conn.Execute("selectcount(id)asnumfromtab_article_commendwhereCid="&rs("id")&"") '获取评论数量%><tr><tdheight="20"colspan="2"><tablewidth="100%"border="0"><tr><tdheight="30"><%=rs("Atitle") '显示文章标题%></td></tr><tr><td><palign="left"style="width:240px;line-height:20px;"><%Response.WriteLeft(rs("Acontent"),45)&"" '显示指定字节数的文章内容%></p></td></tr><tr><td><palign="center"style="width:200px;line-height:20px;"><ahref="web_blog_view.asp?id=<%=rs("id")%>&num=<%=rs_commend("num")%>">阅读全文</a></p></td></tr><tr><tdalign="right"valign="middle"><palign="left"style="width:300px;line-height:20px;">发表时间:<%=rs("Adate")%>|评论:<%=rs_commend("num")%></p></td></tr></table></td></tr><% Setrsc=Nothing rs.movenext '记录集指针向下移动 wendEndIfrs.closeSetrs=Nothing%>16.7.3文章列表展示的实现过程文章列表展示主要包括显示根据选择的文章分类或者通过Blog搜索查找到的文章列表内容。当用户在网站导航栏处单击“我的文章〞超链接,将显示按照发表时间倒序排序的文章列表;在该页面中单击文章分类,可以显示对应分类的文章列表;当用户在前台主页面的Blog搜索栏目输入查询内容,那么显示与之查询内容匹配的文章列表。文章列表页面web_blog_list.asp首先获取传递的参数值,根据参数值确定显示文章列表的条件从而执行相应的SQL查询语句。关键程序代码如下:<%'获取传递的参数,根据参数值确定SQL查询语句classid=Request.QueryString("classid") '获取文章分类IDclassname=Request.QueryString("classname") '获取文章分类名称Ifclassname<>""Thenmegstr="<fontcolor=#FF0000>"&classname&"</font>"&"之"btype=Request.Form("btype") '获取查询条件keyword=Request.Form("keyword") '获取查询关键字Setrs=Server.CreateObject("ADODB.Recordset") '创立Recordset对象'查询最新文章记录sqlstr="selecttop14id,Atitle,Adate,Aclassfromtab_articlewhere1=1"'按分类查询IfIsNumeric(classid)andclassid<>""Thensqlstr=sqlstr&"andAclass="&classid&""'按查询条件搜索,如文章标题、文章内容或者作者Ifkeyword<>""ThenSelectcasebtypecase"1"sqlstr=sqlstr&"andAtitlelike'%"&keyword&"%'"case"2"sqlstr=sqlstr&"andAcontentlike'%"&keyword&"%'"case"3"sqlstr=sqlstr&"andAauthorlike'%"&keyword&"%'"EndSelectEndIfsqlstr=sqlstr&"orderbyiddesc"rs.opensqlstr,conn,1,1 '翻开记录集rsIfrs.eofThen%><tr><tdheight="20"colspan="2"align="center">您查询的记录暂无收藏!</td></tr><%EndIF%><%whilenotrs.eofSetrs_commend=conn.Execute("selectcount(id)asnumfromtab_article_commendwhereCid="&rs("id")&"") '获取文章对应的评论数量%><tr><td>[<%=formatDateTime(rs("Adate"),2) '显示发表时间%>]</td><td><ahref="web_blog_view.asp?id=<%=rs("id")%>&num=<%=rs_commend("num")%>"><%=rs("Atitle") '显示文章标题%></a></td></tr><%Setrsc=Nothingrs.movenext '记录集指针向下移动wendrs.close '关闭rsSetrs=Nothing '释放rs占用的资源%>16.7.4文章详细显示的实现过程文章详细显示包括显示文章的详细内容、文章作者以及文章发表时间,并展示文章对应的评论内容。在文章详细显示页面中,单击“评论〞超链接,浏览者可以填写信息发表评论。下面介绍文章详细显示的实现过程。〔1〕页面web_blog_view.asp根据接收到的参数,查询文章信息表展示文章内容,同时查询文章评论信息表展示文章对应的评论信息。关键程序代码如下:<%'显示文章的详细内容,包括文章标题、文章作者、发表时间以及文章内容id=Request.QueryString("id") '文章IDnum=Request.QueryString("num") '评论数量IfNotIsNumeric(id)ThenElseSetrs=conn.Execute("selectid,Atitle,Acontent,Aauthor,Adatefromtab_articlewhereid="&id&"")%><tralign="left"bgcolor="FFFCE8"><tdalign="right">发表时间:<%=rs("Adate")%>评论:<%=num%></td></tr><tr><td><h4><%=rs("Atitle") '文章标题%></h4></td></tr><tr><td><divstyle="width:200px;" ><%=rs("Aauthor")%></div></td></tr><tr><td><palign="left"style="width:500px;line-height:22px;text-indent:5px"><%=rs("Acontent") '文章内容%></p></td></tr><tr><td><%'显示对此篇文章发表的详细评论内容Setrsc=Server.CreateObject("ADODB.Recordset")sqlstr="selecttop25*fromtab_article_commendwhereCid="&id&"orderbyiddesc"rsc.opensqlstr,conn,1,1whilenotrsc.eof%> <tablewidth="95%"border="0"align="center"cellpadding="0"cellspacing="1"bgcolor="#CACACA"><trbgcolor="#FFFFFF"><td><fontclass="font1">昵
称:</font><%=rsc("Cname")%></td><td><fontclass="font1">评论时间:</font><%=rsc("Cdate")%></td></tr><trbgcolor="#FFFFFF"><td><%=rsc("Ccontent")'评论内容%></td></tr></table><%rsc.movenextwendrsc.closeSetrsc=Nothing%>〔2〕当单击“评论〞超链接时,显示用于提交评论信息的表单。代码如下:<%'发表评论%> <trid="xuxian"style="display:none"><tdalign="center"height="1"background="images/xuxian.gif"></td></tr><trid="commend_show"style="display:none"><td> <tablewidth="100%"border="0"cellspacing="0"cellpadding="0"><formaction=""method="post"name="form1"id="form1"><tr><td>昵称:</td><td><inputname="评论人昵称"type="text"class="textbox"id="评论人昵称"/></td></tr><tr><td>评论内容:</td><td><textareaname="评论内容"cols="60"rows="3"id="评论内容"onkeydown="CountStrByte(this.form.评论内容,this.form.total,this.form.used,this.form.remain);"onkeyup="CountStrByte(this.form.评论内容,this.form.total,this.form.used,this.form.remain);"></textarea><br/>提示〔最多允许
<inputname="total"type="text"disabled="disabled"class="textbox"id="total"value="200"size="3"/>个字节已用字节:<inputname="used"type="text"disabled="disabled"class="textbox"id="used"value="0"size="3"/>剩余字节:<inputname="remain"type="text"disabled="disabled"class="textbox"id="remain"value="200"size="3"/>〕</td></tr><tr><td>验证密码:</td><tdheight="22"><%Session("verify")=randStr(4)%><inputname="验证密码"type="text"class="textbox"id="验证密码"size="6"/><fontcolor="#FF0000"><%=Session("verify")%></font><inputname="verify2"type="hidden"id="verify2"value="<%=Session("verify")%>"/></td></tr><tr><tdheight="22"><inputname="add"type="submit"class="button"id="add"onclick="returnMycheck(this.form)"value="提交"/><inputname="Submit2"type="reset"class="button"value="重置"/><inputname="id"type="hidden"id="id"value="<%=id%>"/> <inputname="num"type="hidden"id="num"value="<%=num%>"/></td></tr></form></table></td></tr><%Setrs=NothingEndIF%><scriptlanguage="javascript">functionMycheck(form){ //用于验证表单数据for(i=0;i<form.length;i++){if(form.elements[i].value==""){ alert(form.elements[i].name+"不能为空!");returnfalse;} if(form.elements[5].value!=form.elements[6].value){ alert("验证码错误!");returnfalse;}}}functionshow_tr(){ //用于显示或者隐藏“评论表单〞if(xuxian.style.display=="none"){ xuxian.style.display="block"; commend_show.style.display="block";}else{ xuxian.style.display="none"; commend_show.style.display="none";}}</script>〔3〕当用户填写昵称、评论内容以及验证密码后,程序将此信息添加到文章评论信息表中,代码如下:<%Session("verify")=""'添加新的评论Subadd()id=Request.Form("id") '文章IDnum=Request.Form("num")str1=Str_filter(Request.Form("评论人昵称"))str2=Str_filter(Request.Form("评论内容"))Ifstr1<>""andstr2<>""ThenSetrs=Server.CreateObject("ADODB.Recordset")sqlstr="select*fromtab_article_commend"rs.opensqlstr,conn,1,3rs.addnewrs("Cid")=idrs("Cname")=str1rs("Ccontent")=str2rs.updaters.closeSetrs=NothingResponse.Redirect("web_blog_view.asp?id="&id&"&num="&num+1&"")ElseResponse.Write("<script>alert('您填写的信息不完整!');history.back();</script>")EndIFEndSubIfNotIsempty(Request("add"))Thencalladd()%>16.8相册展示模块设计16.8.1相册展示模块概述16.8.2相册展示的实现过程16.8.1相册展示模块概述相册展示模块主要用于分类展示上传的相册图片信息,即列出相册的分类以及分类中包含的图片。相册分类展示,如图16-14所示;图16-14相册分类展示相册分类对应的图片展示,如图16-15所示。图16-15相册图片展示16.8.2相册展示的实现过程1.相册分类展示相册分类展示是指显示数据库中的相册分类信息。相册分类页面读取相册分类信息数据表以及相册信息数据表中与分类对应的第一个图片信息,并以表格形式显示分类对应的第一张图片信息以及分类名称,如果分类没有图片信息那么以默认图片代替。web_photo.asp页面的关键程序代码如下:<%n=1Setrs=Server.CreateObject("ADODB.Recordset")sqlstr="selectid,Pcnamefromtab_photo_class" '查询相册分类信息表rs.opensqlstr,conn,1,1whilenotrs.eof'读取分类对应的第一张图片信息Setrsc=conn.Execute("selecttop1Ppicfromtab_photowherePclass="&rs("id")&"")%><td> <tableborder="0"align="center"cellpadding="0"cellspacing="0"><tr><tdalign="center"><ahref="web_photo_list.asp?classid=<%=rs("id")%>&classname=<%=rs("Pcname")%>"><%'显示图片,如分类没有对应图片那么显示默认图片IfNotrsc.eofThen%><imgsrc="upfile/<%=rsc("Ppic")%>"height="100"width="120"border="0"/><%Else%><imgsrc="upfile/instead.jpg"height="100"width="120"border="0"/><%EndIf%></a></td></tr><tr><tdhref="web_photo_list.asp?classid=<%=rs("id")%>&classname=<%=rs("Pcname")%>"><%=rs("Pcname") '显示图片名称%></a></td></tr></table> </td> <%Ifnmod3=0Then '一行显示3张图片%></tr><tr><%EndIf%><%Setrsc=Nothingn=n+1rs.movenextwendrs.closeSetrs=Nothing%>2.相册图片显示相册图片显示是按照选择的分类显示该分类的全部图片信息,包括图片以及图片名称。由于相册图片是上传到效劳器的,所以读取时使用HTML语言的<image>标记,指定图片路径即可显示图片信息。web_photo_list.asp页面的关键程序代码如下:<%classid=Request.QueryString("classid")n=1Setrs=Server.CreateObject("ADODB.Recordset")'查询对应分类的图片信息sqlstr="selectid,Pname,Ppicfromtab_photowherePclass="&classid&""rs.opensqlstr,conn,1,1whilenotrs.eof%><td><tableborder="0"align="center"cellpadding="0"cellspacing="0"><tr><!--显示图片--><tdalign="center"><imgsrc="upfile/<%=rs("Ppic")%>"height="100"width="120"border="0"/></td></tr><tr><tdheight="22"align="center"><%=rs("Pname") '图片名称%></td></tr></table> </td> <%Ifnmod3=0Then '一行显示3张图片%></tr><tr><%EndIf%><%n=n+1rs.movenextwendrs.closeSetrs=Nothing%>16.9博主登录模块设计16.9.1博主登录功能概述16.9.2博主登录的实现过程16.9.1博主登录功能概述当用户通过单击前台主页面导航栏处的“博客管理〞超链接后,将进入博主登录页面,如图16-16所示。图16-16博主登录当用户没有输入用户名和密码,或者输入了错误的用户名和密码进行登录时,页面会给出相应的提示信息。当用户输入正确的用户名和密码,那么允许进入到博客后台系统进行操作。博主登录模块的操作流程如图16-17所示。图16-17博主登录模块流程图在博主登录页面中,除了输入用户名和密码,还要求用户输入随机生成的验证码,这样可以提高网站的平安性。为了防止非博主用户非法登录博客后台系统,还应定义浏览器缓存该登录页面的有效期限。16.9.2博主登录的实现过程1.设置页面缓存有效期限通过Response对象的Expires属性和CacheControl属性不允许浏览器缓存页面,以提高网站平安性,代码如下:<%Response.Buffer=trueResponse.Expires=0 '设置Expires属性的属性值为0,使缓存的页面立即过期,Response.CacheControl="no-cache" '禁止代理效劳器高速缓存页面%>以上代码应放置在页面login.asp的开头。2.设计表单建立表单,用于输入用户名、密码和验证码,代码如下:<formname="form1"method="post"action="">用户名:<inputname="txt_name"type="text"class="textbox"id="txt_name"size="18"maxlength="50">密码:<inputname="txt_passwd"type="password"class="textbox"id="txt_passwd"size="19"maxlength="50">验证码:<inputname="verifycode"id="verifycode"class="textbox"onFocus="this.select();"onMouseOver="this.style.background='#E1F4EE';"onMouseOut="this.style.background='#FFFFFF'"size="6"maxlength="4"><spanstyle="color:#FF0000"><%=session("verifycode")%></span><inputtype="hidden"name="verifycode2"value="<%=session("verifycode")%>"><inputname="login"type="submit"id="login"value="登录"class="button"onClick="returnMycheck()"><inputtype="reset"name="Submit2"value="重置"class="button"></td></form>3.实现登录验证当用户提交登录表单,程序将首先验证用户输入的验证码是否正确,然后依次验证输入的用户名、密码。如果信息通过验证那么将用户名保存到Session变量中,并允许用户登录到后台首页面。代码如下:<!--#includefile="include/conn.asp"--><%session("verifycode")=randStr(4) '根据conn.asp文件中自定义的函数获得生成的随机字符IfNotIsempty(Request("login"))Then'获取表单数据txt_name=Str_filter(Request.Form("txt_name"))txt_passwd=Str_filter(Request.Form("txt_passwd"))verifycode=Str_filter(Request.Form("verifycode"))verifycode2=Str_filter(Request.Form("verifycode2"))'检查验证码Ifverifycode<>verifycode2then Response.write"<SCRIPTlanguage='JavaScript'>alert('您输入的验证码不正确!');location.href='login.asp'</SCRIPT>" Response.End()ElseSession("verifycode")=""EndIFIftxt_name<>""ThenSetrs=Server.CreateObject("ADODB.Recordset")sqlstr="selectMname,Mpasswdfromtab_managerwhereMname='"&txt_name&"'" rs.opensqlstr,conn,1,1 Ifrs.eofThen Response.Write("<scriptlanuage='javascript'>alert('用户名不正确,请核实后重新输入!');location.href='login.asp';</script>") Else Ifrs("Mpasswd")<>txt_passwdThen Response.Write("<scriptlanuage='javascript'>alert('密码不正确,请确认后重新输入!');location.href='login.asp';</script>") Else Session("Mname")=rs("Mname") '将用户名保存到Session变量中 Response.Redirect("index.asp") EndIf EndIfElseerrstr="请输入用户名!"EndIfEndIf%>16.10文章管理模块设计16.10.1文章管理模块概述16.10.2文章分类管理的实现过程16.10.3文章添加的实现过程16.10.4文章查询和删除的实现过程16.10.1文章管理模块概述文章管理模块的主要功能包括文章分类的管理,文章信息的添加、查询、修改和删除操作以及对文章相关评论的管理。进入后台主页面后,单击左侧导航栏处的“文章分类〞超链接,可以对文章分类进行添加、修改和删除操作,如图16-18所示。图16-18文章分类添加文章分类后,单击左侧导航栏处的“文章添加〞超链接,可以添加新的文章,如图16-19所示。图16-19文章添加单击左侧导航栏处的“文章浏览〞超链接,可以在翻开的页面中执行查询或者删除文章的操作,在该页面中还提供“修改〞文章以及“查看评论〞的入口,如图16-20所示;图16-20文章列表浏览在图16-20中单击文章对应的“评论〞超链接可以查看评论信息,如图16-21所示。图16-21文章评论浏览16.10.2文章分类管理的实现过程文章分类管理是指实现对文章分类名称的添加、修改以及删除操作。下面介绍文章分类管理的实现过程。〔1〕在文章分类管理页面ad_article_class.asp中,建立两个表单:一个用于展示现有的文章分类信息;另一个用于添加文章分类。代码如下:<tablewidth="90%"border="0"align="center"cellpadding="0"cellspacing="2"><tralign="center"><tdheight="22">类别名称</td><tdheight="22">操作</td></tr><%Setrs=Server.CreateObject("ADODB.Recordset")sqlstr="selectid,Acnamefromtab_article_class" '查询文章分类信息表rs.opensqlstr,conn,1,1whilenotrs.eof'应用while…wend语句遍历记录集中的记录,并将分类名称显示在文本框中%><formname="form2<%=rs("id")%>"method="post"action=""><tralign="center"><tdheight="22"><inputname="类别名称"type="text"id="类别名称"value="<%=rs("Acname")%>"class="textbox"></td><tdheight="22"><inputname="id"type="hidden"id="id"value="<%=rs("id")%>"><inputname="edit"type="submit"id="edit"value="修改"class="button"onClick="returnMycheck(this.form)"><inputname="delete"type="submit"id="delete"value="删除"onClick="returnconfirm('确定要删除吗?')"class="button"></td></tr></form><%rs.movenextwendrs.closesetrs=nothing%></table><!--添加文章--><tablewidth="90%"border="0"align="center"cellpadding="2"cellspacing="0"><formname="form1"method="post"action=""><tr><tdwidth="106"height="22"align="right">类别名称:</td><tdwidth="261"height="22"><inputname="类别名称"type="text"id="类别名称3"class="textbox"></td><tdwidth="133"height="22"><inputname="add"type="submit"id="add"value="添加"class="button"onClick="returnMycheck(this.form)"></td></tr></form></table>〔2〕定义了3个子过程,分别使用Insertinto、Update和Delete语句实现添加、修改和删除文章类别名称的功能。关键程序代码如下:<!--#includefile="include/conn.asp"--><!--#includefile="checklogin.asp"--><%'添加新记录Subadd()str1=Str_filter(Request.Form("类别名称"))sqlstr="insertintotab_article_class(Acname)values('"&str1&"')"conn.Execute(sqlstr)Response.Redirect("ad_article_class.asp")EndSub'修改记录Subedit()str1=Str_filter(Request.Form("类别名称"))id=Request.Form("id")sqlstr="updatetab_article_classsetAcname='"&str1&"'whereid="&id&""conn.Execute(sqlstr)Response.Redirect("ad_article_class.asp")EndSub'删除记录Subdel()id=Request.Form("id")sqlstr="deletefromtab_articlewhereAclass="&id&""conn.Execute(sqlstr)sqlstr="deletefromtab_article_classwhereid="&id&""conn.Execute(sqlstr)Response.Redirect("ad_article_class.asp")EndSub'执行子过程IfNotIsempty(Request("add"))Thencalladd()IfNotIsempty(Request("edit"))Thencalledit()IfNotIsempty(Request("delete"))Thencalldel()%>16.10.3文章添加的实现过程文章添加是指将文章的相关信息,包括文章分类、文章作者、文章主题和文章内容添加到数据库中,添加的文章信息将展示在网站前台页面中。下面介绍文章添加的实现过程。〔1〕在页面ad_article.asp中建立表单,用于输入文章信息,代码如下:<tablewidth="90%"border="0"align="center"cellpadding="0"cellspacing="0"><formname="form1"method="post"action=""><tr><tdheight="28"align="right">文章类别:</td><tdheight="28"><selectname="文章类别"id="select"><optionselected>选择类别</option><% Setrs=Server.CreateObject("ADODB.Recordset") sqlstr="selectid,Acnamefromtab_article_class" rs.opensqlstr,conn,1,1 whilenotrs.eof %><optionvalue="<%=rs("id")%>"><%=rs("Acname")%></option><% rs.movenext wend rs.close Setrs=Nothing %></select></td></tr><tr><tdheight="28"align="right">文章</td><tdheight="28"><inputname="文章作者"type="text"class="textbox"id="文章作者"></td></tr><tr><tdheight="28"align="right">文章主题:</td><tdheight="28"><inputname="文章主题"type="text"id="文章主题"class="textbox"></td></tr><tr><tdheight="22"align="right">文章内容:</td><tdheight="22"><textareaname="文章内容"cols="45"rows="6"id="文章内容"></textarea></td></tr><tr><tdheight="28"colspan="2"align="center"><inputname="add"type="submit"class="button"id="add"value="添加"onClick="returnMycheck(this.form)">
<inputtype="reset"name="Submit2"value="重置"class="button"></td></tr></form></table>〔2〕定义用于添加数据的子程序,将获取到的表单信息使用Recordset对象的AddNew方法添加到数据库中。关键程序代码如下:<!--#includefile="include/conn.asp"--><!--#includefile="checklogin.asp"--><%'添加新记录Subadd()str1=Str_filter(Request.Form("文章类别"))str2=Str_filter(Request.Form("文章作者"))str3=Str_filter(Request.Form("文章主题"))str4=Str_filter(Request.Form("文章内容"))Ifstr1<>""andstr2<>""andstr3<>""andstr4<>""ThenSetrs=Server.CreateObject("ADODB.Recordset")sqlstr="select*fromtab_article"rs.opensqlstr,conn,1,3rs.addnewrs("Aclass")=str1rs("Aauthor")=str2rs("Atitle")=str3rs("Acontent")=str4rs.updaters.closeSetrs=NothingResponse.Redirect("ad_article_list.asp")16.10.4文章查询和删除的实现过程文章浏览的主要功能是以分页形式显示所有文章信息,可以按照条件查询文章,可以删除指定文章,而且提供了修改文章以及查看文章评论的入口。1.查询文章〔1〕在页面ad_article_list.asp中建立用于查询的表单,在该表单中插入列表/菜单、文本框,以选择或输入查询条件,如文章类别、标题、作者名称,代码如下:<tablewidth="90%"border="0"align="center"cellpadding="0"cellspacing="2"><formname="form1"method="get"action=""><tr><tdheight="22"align="right">类别:</td><td><selectname="txt_class"id="select"><optionselected>选择类别</option><% Setrs=Server.CreateObject("ADODB.Recordset") sqlstr="selectid,Acnamefromtab_article_class" rs.opensqlstr,conn,1,1 whilenotrs.eof %><optionvalue="<%=rs("id")%>"><%=rs("Acname")%></option><% rs.movenext wend rs.close Setrs=Nothing %></select></td><tdheight="22"align="right">文章标题:</td><td><inputname="txt_title"type="text"class="textbox"id="txt_title"size="15"></td><tdheight="22"> </td></tr><tr><tdheight="22"align="right">作者名称:</td><td><inputname="txt_author"type="text"class="textbox"id="txt_author"size="12"></td><tdheight="22"align="right"> </td><td><inputname="query"type="submit"class="button"id="query"value="查询"></td><tdheight="22"> </td></tr></form></table>〔2〕页面根据获得的查询参数〔如文章类别、文章标题、文章作者〕,来确定SQL查询语句,并以分页形式显示查询到的文章信息。关键程序代码如下:<tablewidth="90%"border="0"align="center"cellpadding="0"cellspacing="1"bgcolor="#FF6600"><tralign="center"><thwidth="86"bgcolor="#FFFFFF">类别</th><thwidth="77"height="22"bgcolor="#FFFFFF">作者</th><thwidth="191"height="22"bgcolor="#FFFFFF">文章标题</th><thwidth="146"height="22"bgcolor="#FFFFFF">操作</th></tr><%txt_class=Request("txt_class")txt_title=Request("txt_title")txt_author=Request("txt_author")Setrs=Server.CreateObject("ADODB.Recordset")sqlstr="select*fromtab_articlewhere1=1"Iftxt_class<>""andtxt_class<>"选择类别"Thensqlstr=sqlstr&"andAclass="&txt_class&"“Iftxt_title<>""Thensqlstr=sqlstr&"andAtitlelike'%"&txt_title&"%'"Iftxt_author<>""Thensqlstr=sqlstr&"andAauthorlike'%"&txt_author&"%'"sqlstr=sqlstr&"orderbyiddesc"rs.opensqlstr,con
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6-6-Dibromo-3-3-biindolinylidene-2-2-dione-E-6-6-dibromo-3-3-biindolinylidene-2-2-dione-生命科学试剂-MCE
- 5-Carboxylato-1H-pyrazole-3-carbonyl-oxy-hydroxy-aluminum-III-生命科学试剂-MCE
- 2026年新能源材料行业原材料采购策略报告及库存优化
- 2026年物流行业供应链金融创新与市场机遇报告
- 2026年数字政务与一网通办在公共服务领域的探索报告
- 2026年房地产竞争定价策略深度解析报告
- 2026年企业数字化转型办公效率评估报告
- 2026年网络路由器行业建设报告及市场投资分析
- 2026年高精度红外测温仪表行业商业计划书
- 2026年美容美发行业招聘与行业趋势报告
- (正式版)DB15∕T 389-2021 《内蒙古自治区造林技术规程》
- 2025医院收费员考试试题及参考答案
- 2025年中医康复理疗师考试题及答案大全
- 产品退货申请记录表
- JG/T 324-2011建筑幕墙用陶板
- T/CECS 10187-2022无机复合聚苯不燃保温板
- 花椒采购合同协议书范本
- 嘉年华活动合同协议
- 采购帽子合同协议
- 家具设计与制造知到智慧树章节测试课后答案2024年秋福建理工大学、西南林业大学
- 进出口贸易公司简介范文
评论
0/150
提交评论