仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 393|回复: 9
打印 上一主题 下一主题

[学习教程] ASP网页设计用ASP计划论坛

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。计划  媒介:如今网上的论坛各处都有,但不知您是不是碰到过如许的情形:在乱七八糟的会商信息中来寻觅本人想要的内容,是一件很费费时吃力的事变,到厥后,您就都不想往看甚么论坛了。那末我们能不克不及对本人网站论坛的内容增添考核功效呢?即一切网友发到论坛的文章,其实不当即被显现出来,必需经由站长大概版主审视以后,以为有代价,有需要保举给别的网友的,就宣布出来。不然就删失落了,以免华侈空间,弄得有点像精髓区的意味,如许你的论坛比起一样平常的论坛来,可以供应给为明白无益的内容。放到你的网站上,应当可以吸引更多的网友来会见。这个假想固然能够完成,上面我就复杂先容怎样制造。
注:因为本文合用于对ACCESS数据库、HTML、ASP有必定懂得的读者。
  1、论坛布局剖析
  经由过程下面的功效需求剖析,我们能够将论坛的制造分为四年夜部分:
  (1)网友注册和办理模块:由于引进了站长大概版主,在论坛中就必需可以对其举行身份考证。这个模块的功效,就是办理注册的网友,并可以供应相干的查询。好比,查询指定作者的一切宣布的文章,查询以后宣布文章最多的十个网友,等等。假如你的论坛不是很年夜,这个模块能够省略为只带有版主身份考证的功效,而往失落那些关于注册,查询的部分。
  (2)文章显现模块:显现一切版主考核过的,以为值得保举的文章。
  (3)宣布文章模块:为注册网友供应宣布看法的中央,宣布后守候版主审视。
  (4)文章审视模块:版主对一切网又宣布但未经审视的文章举行处置,已决意是宣布仍是删除。
  懂得了详细的功效需求后,就能够按模块的入手下手论坛的计划了。固然,这些模块的只是在功效上对论坛布局的分别,实践上其实不可以完整的把他们自力出来举行计划。关于这类较小的使用,也没有需要举行完整的模块化计划,在优秀的计划下间接写程序代码也许来的更加复杂一些。
  关于论坛完成起来有一样平常两种办法:用文件大概数据库。绝对而言,用数据库要复杂高效一些,可以对论坛举行更好的把持,也可以对材料供应一些考证和回护。这儿我利用的是ACCESS数据库,关于一样平常的中小型的使用,ACCESS应当是可以胜任的。
  从下面的剖析能够晓得应当有四个表,上面我给出每一个表的布局。
  (1)作者表(用来寄存作者讯息):
    ID:  文本范例,必填。是网友代号。
    暗码: 文本范例,必填。
    昵称: 文本范例,必填。
    EMAIL:文本范例,必填。
    职务: 数字范例,必填。-1代表一般网友,0代表站长。年夜于0的数字代表版主。
    文章数:数字范例,必填。网友宣布的文章总数。
    姓名: 文本范例,可选。
    性别: 文本范例,可选。
    德律风: 文本范例,可选。
  (2)内容表(用来寄存详细文章内容和相干讯息):
      ID:主动编号,并为其设置索引,以加速征采的速率。
    看板ID:数字范例,来自看板列表,暗示文章所属看板。
    主题ID:数字范例,来自立题表,暗示文章所属主题。
    作者ID:文本范例,来自作者表,暗示文章的作者。
     日期:日期/工夫范例,预置初值为函数NOW(),主动取体系以后工夫为其值。
     题目:文本范例。文章的题目。
     宣布:是/否范例,为"真"时暗示文章已经由过程审视,能够宣布;为"否"暗示文章尚待审视。
    保举度:数字范例,文章的保举水平。
     内容:备注范例,文章的详细内容。
   点击次数:数字范例,文章的点击次数。  (3)看板列表(用来寄存有关看板的讯息):
      ID:主动编号,一样的,也为其设置了索引。
     称号:文本范例,看板的称号。
     板主:文本范例,看板版主的ID。
    主题数:数字范例,看板中包括的主题数。
  (4)主题表(用来寄存有关主题的讯息):
      ID:主动编号,并为其设置索引。
     题目:文本范例,暗示主落款。
     看板:数字范例,来自看板列表,暗示主题所属的看板。
    文章数:数字范例,主题中包括的文章数。
  一切的表是计划完了,可是数据库的计划并没有完,以是我们还必要创建表间干系,如许就可以够让数据库实行一些相干性反省,制止材料堕落。创建表间干系的别的的一个优点,就是经由过程它可以很简单的创建出庞大的JOIN查询。
  一般我们在ASP中操纵数据库的时分,都是利用的实行时天生的查询,然后由传送给数据库注释实行。而在这儿我们要用的是存贮查询。与实行时查询对照而言,预存程序具有更多的长处。
  它保留在数据库中,自力于ASP程序代码,使得他更简单创建和修正,而且查询的效力更高,速率更快,能够调试好了今后再放在ASP页面中利用,能制止良多成绩。并且利用存贮查询的ASP程序代码加倍简单浏览和修正。大概人人都对在ASP中利用SQL查询感应很烦,出格是那些逗号啊,分号啊甚么的,一不当心就会堕落。利用存贮查询后,就能够不必挂念这些成绩了。固然,预存程序再利用上也有一些要注重的中央,在前面我会具体的解说它的利用办法。在ACCESS中创建预存程序是一件很简单的事,这儿我就不再多说了。在这儿我只给出各个查询的SQL语句程序代码。
  我把一切要利用到的查询都作为预存程序保留在了数据库中,次要的有以下的一些:
  (1)按ID查询文章:
SELECT主题表.题目AS主落款,看板列表.称号AS看板名,内容表.*
FROM主题表INNERJOIN(内容表INNERJOIN看板列表ON内容表.看板ID=看板列表.ID)ON主题表.ID=内容表.主题ID
WHERE(((内容表.ID)=[articleid]));
  (2)版主暗码查询:
SELECT看板列表.板主,作者表.暗码
FROM作者表INNERJOIN看板列表ON作者表.ID=看板列表.板主
WHERE(((看板列表.ID)=[id];
  (3)查询
SELECT作者表.*
FROM作者表
WHERE(((作者表.ID)=[id]));
  (4)宣布文章列表:
SELECT[内容表].[ID],[内容表].[题目],[内容表].[作者ID]AS作者,[内容表].[日期],[内容表].[保举度],[内容表].[点击次数]AS点击数。
FROM内容表
WHERE((([内容表].[主题ID])=[TopicIndex])And(([内容表].[宣布])=True));
  未宣布文章列表:
SELECT内容表.IDAS文章id,主题表.IDAS主题id,主题表.题目AS主题,内容表.题目AS题目,内容表.作者IDAS作者,内容表.日期AS日期
FROM主题表INNERJOIN内容表ON主题表.ID=内容表.主题ID
WHERE(((内容表.宣布)=False)AND((内容表.看板ID)=[boardid]));
  (5)主题列表:
SELECT主题表.*,看板列表.称号AS看板名
FROM看板列表INNERJOIN主题表ON看板列表.ID=主题表.看板
WHERE(((主题表.看板)=[boardIndex]));
  另有一些查询,由于年夜多类同,我就纷歧一列出了。
  在下面的查询语句中,能够看到一些由"["和"]"包抄起来的器材,那就是查询参数了。必要在实行时给出参数值,然后把参数值带进到查询语句中才干够实行。另有一点要注重的是:在创建那些INNERJOIN查询时,是必要把表间干系增加到计划视图中的,不然是不克不及够主动天生INNERJOIN查询语句的。到这儿,数据库的计划就算完了,今后的事情就是ASP的事了。

  2、构建
  1、构建主窗体
  先要给出一个窗体,可以让网友输出注册讯息,这些是HTML的内容,且放在一边,我们来细心看看详细完成注册的ASP剧本。
  (1)将材料中的单引号改成两个单引号,而且在前后加上单引号

FunctionSqlStr(data)
SqlStr=""&Replace(data,"","")&""
EndFunction  注:这是一个自界说的函数,用来把用户输出中的单引号()转换成两个单引号()。在ASP中,用双引号围着的是字符串,因此下面的""代表的就是只要一个单引号的字符串。之以是要把一个单引号换成两个单引号,这是由于在SQL语句中,用单引号围起来是用来代表变量的。为了不至于搅浑,就要把字符串中的单引号用两个单引号来暗示。而一切的用户输出都要作为变量嵌进到SQL语句中的,以是这个函数是必不成少的。
  (2)存贮筹办

id=Request("id")
password=Request("password")
nickname=Request("nickname")
email=Request("email")
sex=request("sex")  注:把来自用户输出窗体中的内容保留在变量中,这不是必需的,但写了更简单读写。

ifRequest("name")=""thenname=""elsename=request("name")
ifRequest("phone")=""thenphone=""elsephone=request("phone")  由于这些内容不是必需填的,为了避免用户没有输出任何内容,而形成数据库操纵上的毛病,就必需把没有填进字段用空格来取代。
  (3)创建毗连

Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb") 注:这一段是创建数据库毗连,数据库的称号为bbssystem.mdb,这一段中独一要注重的是Server.MapPath函数的使用。一样平常来讲,但凡触及到详细的目次的中央,都不要间接利用目次名,而用Server.MapPath函数来取代。善用好Server.MapPath和Request.ServerVariables()等函数,可以让你的WEB使用具有更好的可移植性。

Setcmd=Server.CreateObject("ADODB.Command")  (4)查询作者是不是已存在

Setcmd.ActiveConnection=conn
cmd.CommandText="查询作者"
ReDimparam(0)声明参数数组
param(0)=CStr(id)Cint不成疏忽
Setrs=cmd.Execute(,param)  注:这一段就是用来实行预存程序的。在ADO中实行查询的办法有良多种,可是关于预存程序就只能利用Command工具了。起首,创建了一个叫做cmd的Command工具,然后把conn毗连工具设定给cmd工具的ActiveConnection属性,把要实行的查询称号"查询作者"设定给CommandText属性,然后为查询参数赋值。我们声了然一个参数数组param(0),由于在"查询作者"这个查询中只要一个参数,以是数组就只要一个份量了。一样平常的,在查询中有几个参数,就要声名有响应份量个数的参数数组。而且参数呈现的按次是个数组平分量的按次是对应的。在利用参数查询的过程当中,特别要注重的是,参数的范例要严厉婚配,否这就会堕落,以是下面的CStr()范例转换函数是不成短少的。


ifnot(rs.eoforrs.bof)then
response.write"毛病,你输出的ID号已被占用,请换一个再尝尝!"
else
sql="InsertInto作者表(id,昵称,Email,暗码,姓名,黉舍,系别,性别,德律风)Values("
sql=sql&SqlStr(id)&","
sql=sql&SqlStr(nickname)&","
sql=sql&SqlStr(email)&","
sql=sql&SqlStr(password)&","
sql=sql&SqlStr(name)&",&","
sql=sql&SqlStr(sex)&","
sql=sql&SqlStr(phone)&")"
conn.Executesql  利用一个SQL的Insert语句把材料拔出到数据库中。实在这一查询也能够做成预存程序放在数据库中,我偷了点懒:-)不外对照之下也能够看到预存程序的优点,实行时查询写起来其实是太贫苦了。
  2、构建文章显现模块
  后面说过,一片详细的文章是分属在看板和主体之下的。因而显现文章也要经由看板列表和主体列表这两页面后,才干失掉特定主题下文章的列表。
  (1)板列表的显现页面:

<html>
<head>
<title>看板列表</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>  (2)翻开毗连,显现看板列表

<%Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
sql="select*from看板列表"
setrs=conn.execute(sql)
%>  注:复杂的SQL查询,把一切的看板有关讯息传回到记录集RS中。上面的义务就是显现记录记得内容,并在响应的看板称号上创建显现看板主题的毗连。

<bodybgcolor="#FFFFFF">
<h2align="center">看板列表</h2>
<tablewidth="60%"border="0"cellspacing="0"cellpadding="0"align="center">
<trbgcolor="#FFFFCC">
<tdheight="35"width="25%">看板称号</td>
<tdheight="35"width="21%">板主</td>
<tdheight="35"width="23%">主题数</td>
<tdheight="35"width="31%">板主上岸</td>
</tr>  注:这儿一部分是显现出表格中每列的题目,这儿我没有效一个一致的函数来显现RS记录记的内容,由于如许能够对表格的表面微风格做更多的把持,利用起来固然有点贫苦,可是却更加天真。

<%
do
boardid=rs("id")
boardname=rs("称号")
boardmanager=rs("板主")
response.write"<tr><td><ahref=qBoard.asp?boardid="&boardid&"&boardname="&boardname&">"&boardname&"</a></td>"  注:这一行是重点,当点击了各个板的称号后,能够毗连到显现看板主题的页面。程序代码看起来有点贫苦,我分化了给你讲,你就会分明了。在点击以后,扫瞄器哀求利用的是qBoard.asp页面,并带有一个参数boardid,代表要显现看板的ID号,在哀求页面和参数之间用问号(?)分开。Boardid是后面设定了的变量,个中包括的就是对应看板的ID号。这个毗连中还带有别的一个参数boardname,用来把看板称号传送给qBoard.asp页面。在多个参数间利用"&"来分开。这个参数不是必需的,传送已往是为了以免在qBorad.asp中再次用boardid来查询看板称号。一样平常来讲,可以罕用数据库操纵就应该只管的罕用,如许能够进步ASP页面的功能。由于Response.Write语句利用字符串作为参数的,以是下面的字符串和变量之间利用的是"&"联合符。最初ASP页面注释的了局应当是像如许的


<td><ahref=qBoard.asp?boardid=1&boardname=体系板>体系板</a><td>。
response.write"<td><ahref=qAuthor.asp?author="&boardmanager&">"&boardmanager&"</a></td>"
response.write"<td>"&rs("主题数")&"</td>"
response.write"<td><ahref=managerlogin.asp?boardid="&boardid&">板务处置</a></td></tr>"  注:在这个表中,除能够由毗连来显现看板主题的内容,另有一个斑竹查询部分和板务处置部分,版主查询能够是经由过程qAuthor.asp来完成的,它只是复杂的从数据库中掏出作者讯息,并显现出来,这儿就未几说了。而板务处置是由managerlogin.asp页面来处置的。这属于文章审视模块,我在前面再详说。

rs.movenext
loopuntilrs.eof
%>  注:经由过程一个do…loop轮回,把记录会合一切的讯息都显现了出来。

</table>
<divalign="center"><br> 点击看板称号能够失掉主题列表,点击板主称号能够观察板主讯息

</div>
</body>
</html>
<%
setrs=nothing
conn.close
setconn=nothing
%>  (3)打造qBaord.asp页面: 

<%
boardid=request("boardid")掏出由上个页面传送过去的看板ID号
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
Setcmd=Server.CreateObject("ADODB.Command")
Setcmd.ActiveConnection=conn
cmd.CommandText="主题列表"
ReDimparam(0)//注:声明参数数组
param(0)=CLng(boardid)//注:CLng不成疏忽
Setrs=cmd.Execute(,param)
%>
<html>
<head>
<title>主题列表</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#FFFFFF">
<h1align="center"><%=rs("看板名")%>板主题列表</h1>
<tablewidth="80%"border="0"cellspacing="0"cellpadding="0"align="center">
<trbgcolor="#FFFFCC">
<tdwidth="89%"height="21">主题</td>
<tdwidth="11%"height="21">文章数</td>
</tr>
<%
do
topicid=rs("id")
topicname=rs("题目")
sum=rs("文章数")
response.write"<tr><td><ahref=qtopic.asp?topicid="&topicid&"&boardname="&boardname&">"&topicname&"</a></td>"
response.write"<td>"&sum&"</td></tr>"
rs.movenext
loopuntilrs.eof
%>
</table>
</body>
</html>
  注:qBoard.asp列出了某个版面下的一切的主题,在点击了主落款称后就会进进响应的主题文章列表。这个列表的是由qTopic.asp这个ASP剧本来完成的。Qtopic.asp的程序代码在实质上几近和qBoard.asp没有区分,只是在各自的细节上有所区分,这儿也不盘算再多讲了。
  (4)在点击了文章列表中的文章题目后,会进进文章内容扫瞄页article.asp:

<%
articleid=request("articleid")
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
Setcmd=Server.CreateObject("ADODB.Command")
Setcmd.ActiveConnection=conn
cmd.CommandText="按id查询文章"
ReDimparam(0)声明
param(0)=CLng(articleid)Cint不成疏忽
Setrs=cmd.Execute(,param)
author=rs("作者id")
title=rs("题目")
data=rs("日期")
rate=rs("保举度")
boardid=rs("看板id")
topicid=rs("主题id")
boardname=rs("看板名")
topicname=rs("主落款")
content=rs("内容")
content=replace(content,vbCrlf,"</p><p>")
content="<p>"&content&"</p>"  注:这是一个要注重的中央,在内容字段中包括的是备忘范例的文本,个中能够包括换行字符。在HTML的显现中,必需要把换行字符(也就是vbCrlf常数)换成HTML的段落标记。如许在段落与段落的跟尾处,就不会打乱本来输出时的格局。假如要计划的更好些,能够经由过程CSS来复位义<P>标签,设定其test-indent属性,就能够完成每段开首空格了。
  (5)把点击次数加一

sql="Update内容表Set点击次数=点击次数+1WhereID="&articleid
conn.executesql  注:这儿有一个SQL语句,没当页面被显现的时分,会把响应的表中点击次数字段加一,如许就可以够对文章扫瞄的次数做出统计,并可按按次排名。在实行条语句的时分,我发明:原本在SQL语句中,嵌进的变量名应当加上单引号以与区分,但在这儿的articleid变量上我并没有加单引号,竟然也可以经由过程,而我之前如许写历来都是会激发毛病的,不知是否是因为新版本的ADO的原因。

setcmd=nothing
%>
<html>
<head>
<title>UntitledDocument</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#E9E9E4">
<tablewidth="89%"border="0"cellspacing="0"cellpadding="0"align="center">
<trbgcolor="#CCCCCC">
<td><fontcolor="#FF3366"><ahref="qauthor.asp?author=<%=author%>"><%=author%></a></font>宣布日期:<fontcolor="#FF3333"><%=data%></font>
看板:<fontcolor="#FF3333"><ahref="qboard.asp?boardid=<%=boardid%>"><%=boardname%></a></font>板主保举:<fontcolor="#FF3333">#rate#</font></td>
</tr>
<trbgcolor="#CCCCCC">
<td>题目:<fontcolor="#FF3333"><%=title%>
主题:<ahref="qtopic.asp?topicid=<%=topicid%>"><%=topicname%></a></font></td>
</tr>
<trvalign="top">
<td>
<hr>
<fontcolor="#FF3366">文章内容:</font><br>
<br>
<fontcolor=blue><%response.writecontent%></font>
<br>
<br>
</td>
</tr>
<trvalign="top">
<tdheight="18">
<tablewidth="50%"border="0"cellspacing="0"cellpadding="0"align="right"bgcolor="#CCCCCC">
<tr>
<tdwidth="0%"></td>
<tdwidth="65%">关于此话题<ahref="submit.asp?topicid=<%=topicid%>&boardid=<%=boardid%>">宣布批评</a></td>  这个毗连同意网友对此批评的话题宣布本人的看法,这是下一个模块要讲的内容了,这儿且按下不表。

</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
<%
setrs=nothing
conn.close
setconn=nothing
%>  到此,文章显现部分也完成了。上面再来看看文章宣布部分是怎样完成的。
  3、构建文章宣布部分
  文章宣布模块只要两个页面,一个是后面提到的用来供应输出窗体的submit.asp,另有一个是用来处置窗体输出的subresult.asp。后面的谁人页面很复杂,基础上就是一个HTML窗体,没有甚么好讲的,上面来看看subresult.asp的内容:

<html>
<head>
<title>宣布文章</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#FFFFFF">
<%
author=request("author")
password=request("password")
topicid=request("topicid")
boardid=request("boardid")
content=request("content")
title=request("title")  注:这一段掏出在submit.asp中提交的表但内容,放在响应的变量中。

<html>
<head>
<title>宣布文章</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#FFFFFF">
<%
author=request("author")
password=request("password")
topicid=request("topicid")
boardid=request("boardid")
content=request("content")
title=request("title")  (1)查询作者是不是已存在

cmd.CommandText="select*from作者表whereid="&author&""
Setrs=cmd.Execute()  (2)反省权限

cmd.CommandText="select*from作者表whereid="&author&""
Setrs=cmd.Execute()  注:这一段是对作者权限举行反省,关于帐号不存在大概暗码毛病做出响应的毛病处置。在这儿能够看到response.end的用法,它是用来停止以后ASP剧本。分离if语句,能够对程序中的预期毛病举行处置。在一个好的WEB使用中,毛病处置是必不成少的。
  (3)将材料中的单引号改成两个单引号,而且在前后加上单引号

FunctionSqlStr(data)
SqlStr=""&Replace(data,"","")&""
EndFunction
写进数据库
sql="InsertInto内容表(看板id,主题id,作者id,题目,内容)Values("
sql=sql&SqlStr(topicid)&","
sql=sql&SqlStr(boardid)&","
sql=sql&SqlStr(author)&","
sql=sql&SqlStr(title)&","
sql=sql&SqlStr(content)&")"
conn.Executesql
%>
<h2>文章已被发送到数据库,当板主审视后就能够看到了<h2>
</body>
</html>  到这儿,文章已被保留在数据库中了。可是,它其实不可以立即被显现出来,还必要版主的承认才行。上面,就来看看论坛的办理部分的内容。
  4、论坛的办理部分
  这儿是我们这个论坛的中心之地点,但它完成起来也没有甚么出格的中央。仍是那些老器材:窗体处置,数据库查询,在用ASP把他们无机的分离起来。当进进了文章审视形式(后面提到的板务处置)以后,最为主要的内容,应当是对版主的身份举行考证了。上面来看看版主上岸页面:

<%
boardid=request("boardid")(注:boardid是由进进这个页面的毗连所传送过去的,是要举行板务处置的看板的ID。经由过程它才干晓得处置的是谁人板的板务。)


Setconn=erver.CreateObject("ADODB.Connection")

conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
Setcmd=Server.CreateObject("ADODB.Command")
Setcmd.ActiveConnection=conn
cmd.CommandText="板主暗码查询"
ReDimparam(0)
param(0)=CLng(boardid)//注:CLng不成疏忽
Setrs=cmd.Execute(,param)
boardmanager=rs("板主")
setcmd=nothing
%>
<html>
<head>
<title>UntitledDocument</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#FFFFFF">
<p>只要板主<%=boardmanager%>才干够进进这个中央</p>
<p>请输出考证暗码,而且为了坚持身份考证,请翻开扫瞄器的Cookies。</p>
<formmethod="post"action="managerloginrest.asp">
<inputtype="password"name="password">
<inputtype="hidden"name="boardid"value=<%=boardid%>>
<inputtype="submit"name="Submit"value="断定">
</form>


  注:这个页面仅仅是用来上岸用的,它失掉斑竹输出的暗码后,其实不能举行考证,而是将考证的事情放到下一个页面中举行。实践上,暗码输出和考证的事情是能够放在一个页面中完成的,只不外程序代码的布局布置上有点贫苦。

</body>
</html>
<%
setrs=nothing
conn.close
setconn=nothing
%>  如今失掉了版主ID和输出的暗码,上面就是举行考证的事情managerloginrest.asp了,它承受下面谁人文件中窗体的内容,并举行相干处置:

<%
response.buffer=true  注:把缓冲区设置为同意利用。这一条一样平常来讲,是应当加在每一个ASP页面的首部的,如许可以进步ASP页面的功能。在翻开了缓冲区后,ASP中另有一些响应的特别用法,在前面会说起。

boardid=request("boardid")
password=request("password")
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
Setcmd=Server.CreateObject("ADODB.Command")
Setcmd.ActiveConnection=conn
cmd.CommandText="板主暗码查询"
ReDimparam(0)声明
param(0)=CLng(boardid)//注:CLng不成疏忽
Setrs=cmd.Execute(,param)
boardmanager=rs("板主")
ifpassword<>rs("暗码")then%>
<html>
<head>
<title>身份考证</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#FFFFFF">
暗码毛病
</body>
</html>
<%
else
session("beenthere")=boarded  注:利用Session来坚持对版主的身份考证,这必需请求客户端扫瞄器的cookie被翻开了。由于Session是经由过程cookie来完成的。在这儿,把看板ID赋给Session变量beenthere,标明版主主已经由过程了身份考证。在前面的每一个版务处置的页面中,都要反省beenthere是不是和响应的看版ID符合。

url="boardmanager.asp?boardid="&boardid
response.redirecturl  增补:初学ASP的时分老是为response.redirect这个办法感应狐疑,屡用不爽,如今我来告知你一些技能。利用它之前,必需经由过程response.buffer=true来让ASP页面利用缓冲区。这时候,在ASP被注释成HTML程序代码之前,它是放在缓冲区中的,而不间接被发送的客户端扫瞄器。另有一个必需要晓得的是:在利用response.redirect之前,是不克不及有任何实践的HTML程序代码被发送到客户端扫瞄器的,不然就会堕落。固然也有变通的办法,假如在response.redirect之前已有HTML程序代码被注释出来,能够用response.clear办法来扫除缓冲区,然后就能够利用它来举行复位向了。

endif
%>  注:上面就是在下面身份考证经由过程后复位向的方针:boardmanager.asp。它将列出了一切别有被处置的文章。

<%
boardid=request("boardid")
ifsession("beenthere")<>boardidthenresponse.redirect"forums.asp"  注:这就是查验版主身份的中央,由于后面已经由过程cookie在斑竹的扫瞄器中作了标志,如今我们就可以够经由过程seesion来识别版主的身份了。假如标示不符,就会经由过程response.redirect前往到最入手下手的上岸页面。假如版主扫瞄器的cookie没有翻开,那末seesion("beenthere")的值会为空,一样也没法进进这个页面。

Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
Setcmd=Server.CreateObject("ADODB.Command")
Setcmd.ActiveConnection=conn
sql="select称号from看板列表whereid="&boardid
setrs=conn.execute(sql)
boardname=rs("称号")
cmd.commandtext="未宣布文章列表"
ReDimparam(0)
param(0)=CLng(boardid)//注:Clng不成疏忽
Setrs=cmd.Execute(,param)
setcmd=nothing
%>
<html>
<head>
<title>版务处置</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#FFFFFF">
<h1align="center"><%=boardname%>版务办理</h1>
<hr>
<%
ifrs.eoforrs.bofthenresponse.write"<H2>如今没有文章要处置</h2>"
response.end
%>
注:假如没有新文章被网友公布,这给出响应的提醒,并用response.end来停止此页的显现。

<tablewidth="90%"border="0"cellspacing="0"cellpadding="0"align="center">
<trbgcolor="#FFFFCC">
<tdwidth="40%"height="20">主题</td>
<tdwidth="40%"height="20">文章题目</td>
<tdwidth="8%"height="20">作者</td>
<tdwidth="12%"height="20">日期</td>
</tr>
<%
do
topicid=rs("主题id")
articleid=rs("文章id")
data=rs("日期")
datastr=cstr(year(data))&"-"&cstr(month(data))&"-"&cstr(day(data))
author=rs("作者")
articlename=rs("题目")
topicname=rs("主题")
response.write"<tr><td><ahref=qtopic.asp?topicid="&topicid&">"&topicname&"</A></td>"
response.write"<td><ahref=managearticle.asp?articleid="&articleid&"&boardid="&boardid&">"&articlename&"</A></td>"
response.write"<td><ahref=qauthor.asp?author="&author&">"&author&"</a></td>"
response.write"<td>"&datastr&"</td></tr>"
rs.movenext
loopuntilrs.eof
%>
</table>
</html>
<%
setrs=nothing
conn.close
setconn=nothing
%>
</body>  当点击了响应文章的联合后,就进进此文章的处置页面managearticle.asp:

<%
articleid=request("articleid")
boardid=request("boardid")
ifsession("beenthere")<>boardidthenresponse.redirect"forums.asp"
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
Setcmd=Server.CreateObject("ADODB.Command")
Setcmd.ActiveConnection=conn
cmd.CommandText="按id查询文章"
ReDimparam(0)
param(0)=CLng(articleid)//注:Clng不成疏忽
Setrs=cmd.Execute(,param)
author=rs("作者id")
title=rs("题目")
data=rs("日期")
rate=rs("保举度")
boardid=rs("看板id")
topicid=rs("主题id")
boardname=rs("看板名")
topicname=rs("主落款")
content=rs("内容")
content=replace(content,vbCrlf,"</p><p>")
content="<p>"&content&"</p>"
setcmd=nothing
%>
<html>
<head>
<title>UntitledDocument</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#E9E9E4">
<tablewidth="89%"border="0"cellspacing="0"cellpadding="0"align="center">
<trbgcolor="#CCCCCC">
<td><fontcolor="#FF3366"><ahref="qauthor.asp?author=<%=author%>"><%=author%></a></font>宣布日期:<fontcolor="#FF3333"><%=data%></font>
看板:<fontcolor="#FF3333"><ahref="qboard.asp?boardid=<%=boardid%>"><%=boardname%></a></font>板主保举:<fontcolor="#FF3333">#rate#</font></td>
</tr>
<trbgcolor="#CCCCCC">
<td>题目:<fontcolor="#FF3333"><%=title%>
主题:<ahref="qtopic.asp?topicid=<%=topicid%>"><%=topicname%></a></font></td>
</tr>
<trvalign="top">
<td>
<hr>
<fontcolor="#FF3366">文章内容:</font><br>
<br>
<fontcolor=blue><%response.writecontent%></font>
<br>
<hr>
</td>
</tr>
<trvalign="top">
<formmethod="post"action="manageresult.asp">
<tdheight="18">
<tablewidth="100%"border="1"cellspacing="1"cellpadding="1">
<tr>
<tdwidth="29%">
<divalign="right">
<inputtype="hidden"name="boardid"value="<%=boardid%>">
<inputtype="hidden"name="topicid"value="<%=topicid%>">
<inputtype="hidden"name="articleid"value="<%=articleid%>">
文章处置:</div>
</td>
<tdwidth="12%"bordercolor="#006666">删除:
<inputtype="radio"name="manage"value=1>
</td>
<tdwidth="30%"bordercolor="#006666">宣布:
<inputtype="radio"name="manage"value=2>
保举品级
<selectname="select">
<optionvalue="1">1</option>
<optionvalue="2">2</option>
<optionvalue="3"selected>3</option>
<optionvalue="4">4</option>
<optionvalue="5">5</option>
</select>
</td>
<tdwidth="20%"bordercolor="#006666">今后再处置:
<inputtype="radio"name="manage"value=3>
</td>
<tdwidth="9%">
<inputtype="submit"name="Submit"value="断定">
</td>
</tr>
</table>
</td>
</form>
</tr>
</table>
</body>
</html>
<%
setrs=nothing
conn.close
setconn=nothing
%>
  注:这一页和文章显现模块中的article.asp基础上是一样的,仅仅是多到场了版主处置的窗体,在这儿就未几讲了。
  上面,要依据版主的处置历程,修该数据库响应部分

<%response.buffer=true%>
<html>
<head>
<title>文章处置</title>
<metahttp-equiv="Content-Type"content="text/html;charset=GB2312">
</head>
<bodybgcolor="#E9E9E4">
<%
articleid=request("articleid")
boardid=request("boardid")
topicid=request("topicid")
manage=request("manage")
承受窗体内容
response.writemanage显现斑竹ID
ifsession("beenthere")<>boardidthenresponse.redirect"forums.asp"
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("bbssystem.mdb")
依据上页中版主的操纵,上面举行响应的处置。
ifCLng(request("manage"))=1then
sql="deletefrom内容表whereid="&articleid
conn.executesql
response.write"<h1>文章已被删除</h1>"
response.write"<ahref=>back</a>"
elseifCLng(request("manage"))=2then
sql="update内容表set宣布=truewhereid="&articleid
conn.executesql
sql="update主题表set文章数=文章数+1whereid="&topicid
conn.executesql
response.write"<h1>文章已宣布</h1>"
response.write"<ahref=>back</a>"
else
response.clear
response.redirect"boardmanager.asp?boardid="&boarded
endif
%>
</body>
</html>
<%
conn.close
setconn=nothing
%>  经由下面几步,一切的部分就算是基础完成了,固然,这时候还不克不及拿来用,摆不下台面的。假如想要可以拿得出来的话,还要在版面计划,客户端材料考证等方面多下一些工夫。不外那都是HTML的内容了,和ASP没多年夜的干系,这儿我就未几讲了。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。
若相依 该用户已被删除
沙发
发表于 2015-1-19 05:10:21 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-25 12:03:20 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
冷月葬花魂 该用户已被删除
地板
发表于 2015-2-2 22:02:55 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
飘灵儿 该用户已被删除
5#
发表于 2015-2-8 10:14:07 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
简单生活 该用户已被删除
6#
发表于 2015-2-25 09:08:58 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
若天明 该用户已被删除
7#
发表于 2015-3-7 19:27:43 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
透明 该用户已被删除
8#
 楼主| 发表于 2015-3-15 12:30:32 | 只看该作者
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-22 01:09:26 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
因胸联盟 该用户已被删除
10#
发表于 2015-3-22 01:09:26 | 只看该作者
掌握asp的特性而且一定要知道为什么。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 10:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表