in order to facilitate the teachers and students information the exchange, in unified asp and access2003 under the server technology has developed this quick truncation, the contact surface friendly teachers and students alternating-current system. the forum uses the asp technology construction forum the backbone frame, uses the access2003 manufacture system the database, realized a function relatively complete forum system, the net friend has been possible freely to propose the question as well as helped other people to solve the problem, or exchange experience.
this forum function is complete, may freely express own viewpoint in here and express the opinion to the forum subject, we also may promptly solve to net friend's question, gain to the oneself useful knowledge. this forum also has some special functions, like the on-line personnel demonstrates, the formidable search function.
after the debugging, this forum definitely may become very good teachers and students to exchange the platform, the full use limited education resources, raise the resources use factor, at the same time can actively study the atmosphere, causes the study, the work to be more perfect.
keywords: active server pages, bbs, user management
第6章 编码实现
6.1选择编程语言
近年来随着internet技术的飞速发展及用户需求的不断升级,web页面技术也不断的推陈出新,使得web站点的功能越来越强大,能够提供的服务种类越来越繁多。从html、client script 到cgi,从java的诞生到activex, web页面设计人员不断受到冲击,微软公司在总结了以往技术,重新思考web页面设计的真正需要后,推出了active server pages (asp),一种用以取代cgi(common gateway interface,通用网关接口)的技术。简单讲,asp是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式 web 服务器应用程序,如交互式的动态网页,包括使用 html 表单收集和处理信息,上传与下载等等。更重要的是,asp使用的activex技术基于开放设计环境,用户可以自己定义和制作组件加入其中,使自己的动态网页几乎具有无限的扩充能力,这是传统的web编写工具所远远不及的地方。使用asp还有个好处,就在于asp可利用ado(active data object,微软的一种新的数据访问模型)方便快捷地访问数据库,从而使得开发基于www的应用系统成为可能,这也是本文选择asp作为开发工具最重要的原因之一。
wsb服务器是web应用程序的心脏。iis(internet information server)是微软推出的windows nt option pack的主要成员,作为win2000server的扩展,自推出以来已经有了很大发展,其体系结构是当今市场上最受关注的web服务器之一。新推出的iis4.0版本增强了系统安全性,具有服务器端脚本开发调试,内容管理和站点分析,崩溃防护,内置java虚拟机及全面支持asp等强大功能。
在过去,客户机/服务器结构的设计与web的相关技术几乎处于平行线上,两者相互独立并无法作出集成性的设计。现在我们利用iis+asp构成三层式web结构(如图2.1所示)的中间一层,将客户机/服务器结构与web密切结合,完成前后端两者的集成输出功能,使得web站点的开发更方便实现的功能更强大。
利用iis+asp技术来集成web前后端所带来的强大效益可归结为以下几个方面:
1. 减少构建和维护成本。
2. 加快联机过程。
3. 应用软件集中在服务器端开发管理。
4. 前端可使用任何浏览器(ie、netscape…..)。
5. 后端可存取任何数据库 (sql、access…..)。
6. 可使用任何脚本语言开发 (vbscript、javascript、perl…..)。
asp提供了6个功能强大的内部对象,每个对象具有各自的属性(property)、方法(method),有的还拥有数据集合(collection)与事件(event),它们共同完成web中的一些重要工作。
对象名称 功能描述
request 从客户端取得信息
response 将信息送给客户端
server 提供一些web服务器工具
session 储存在一个session内的用户信息,该信息仅可被该用户访问
application 在一个asp-application中让不同的客户端共享信息
objectcontext 配合microsoft transaction服务器进行分布式事务处理
6.2 论坛注册功能
6.2.1代码实现
<%case"save" ‘保存
dim name,repassword,email,sex,burn1,burn2,burn3,burn,home,qq,gxqm,picw,pich,bbspic,mypic,toup ic ‘定义一些变量
dim canreg,badwords,z,adminid,sickpass,userinfo,regtime,newuserinfo,bad,b
name=checkstr(request.form("name")) ‘获取用户名
userpwd=checkstr(request.form("userpwd")) ‘获取密码
repassword=replace(request.form("repassword")," ","") ‘获取重复密码
email=checkstr(request.form("email")) ‘获取邮箱
if bbscon(7)=1 then
adminid=checkstr(request.form("adminid"))
else
adminid=0
end if
sex=checknum(request.form("sex")) ‘获取性别
burn1=checkstr(request.form("burn1"))
burn2=checkstr(request.form("burn2"))
burn3=checkstr(request.form("burn3"))
home=checkstr(request.form("home"))
home=ubbg(home)
qq=checkstr(request.form("qq")) ‘获取qq号
gxqm=request.form("gxqm")
gxqm=checkstr(left(gxqm,255))
gxqm=replace(gxqm,"|","│")
gxqm=checkbad(gxqm)
picw=checkstr(request.form("picw")) ‘获取图片信息
pich=checkstr(request.form("pich"))
mypic=checkstr(request.form("mypic"))
mypic=ubbg(mypic)
bbspic=checkstr(request.form("bbspic"))
canreg=true
if name="" or userpwd="" or repassword="" or email="" or adminid="" or sex="" then
canreg=false ‘必填资料没填全
mes="•请填写完整必填的资料。<br>"
else
mes=""
if strlength(name)>16 then ‘密码不能超过16位
canreg=false
mes="•你的用户名长度超过了16。<br>"
end if
if not pass_name(name) then
canreg=false
mes=mes&"•你的用户名含有非法字符。<br>"
end if
badwords=application(cachename&"badword")&"|自动送信系统|社区银行|管理员|版主|总版主|超级 版主"
badwords=split(badwords,"|") ‘屏蔽一些语言
for z=0 to ubound(badwords)
if instr(name,badwords(z))>0 then
canreg=false
mes=mes&"•你的用户名含有论坛禁止使用的字词。<br>"
exit for
end if
next
if canreg=true then
if not conn.execute("select top 1 userid from [dunkuser] where name='"&name&"'").eof then canreg=false:mes=mes&"•该用户名已经被注册了。<br>"
end if ‘用户名必须是没被注册过的
if len(userpwd)>16 then canreg=false : mes=mes&"•你填写的密码长度超过了16。<br>"
if passc(userpwd)=false then canreg=false:mes=mes&"•你的密码含有非法字符。<br>"
sickpass=split("123$$1234$$12345$$123456$$1234567$$12345678$$aaa$$111","$$")
for i=0 to ubound(sickpass) ‘密码不能过于简单
if len(userpwd)<3 or userpwd=sickpass(i) then
canreg=false
mes=mes&"•你的密码属于弱口令,请更换密码。<br>"
exit for
end if
next
if repassword<>userpwd then canreg=false : mes=mes&"•你两次输入的密码不一样。<br>"
email=server.htmlencode(email)
if not isvalidemail(email) then canreg=false : mes=mes&"•你的e-mail填写错误。<br>"
if bbscon(7)=1 then
if session("adminid")<>adminid or not isnumeric(session("adminid")) then canreg=false:mes=mes&"•你输入的验证码错误。<br>"
end if
end if
burn=burn1&"-"&burn2&"-"&burn3
if not isdate(burn) then burn="--"
if qq<>"" and (not isnumeric(qq) or (len(qq)<5 or len(qq)>12)) then canreg=false:mes=mes&"•你的 qq 号码填写错误。<br>"
if mypic="" then
toupic="images/headpic/"&bbspic&".gif|"&checknum(bbscon(13))&"|"&checknum(bbscon(14))
else
if picw<>"" and checknum(picw)<=checknum(bbscon(11)) and pich<>"" and checknum(pich) <=checknum(bbscon(12)) then
toupic=mypic&"|"&picw&"|"&pich
else
canreg=false
mes=mes&"•你的头像大小设置错误。<br>"
end if
end if
if checknum(bbscon(15))<>1 and instr(toupic,"://")>0 then
canreg=false
mes=mes&"•本论坛不允许使用外部头像。<br>"
end if
if canreg=false then
mes="<b>对不起!你不能成功地注册用户,可能存在以下问题。</b><br>"&mes&"•<a href='javascript:history.go(-1)'><img border=0 src=images/common/re.gif align=absmiddle> 返回重新填写。</a>"
elseif canreg=true then
tl="1"
mes="恭喜你!<b>"&htmlcoder(name)&"</b> 注册成功。<br>•<a href=login.asp>现在登陆论坛。 </a><br>•<a href=index.asp>进入论坛首页。</a>"%>
<!--#include file="inc/md5.asp"-->
<%
regtime=formatdatetime(now+timezone/24,2) ‘获取注册时间
userinfo=email&"|"&home&"|"&burn&"|"&qq&"|"&sex&"|"&toupic&"|"&gxqm&"|"®time&"|"
set rs = server.createobject("adodb.recordset")
sql="select top 1 userid,name,pswd,userinfo,lasttime from [dunkuser]"
rs.open sql,conn,0,2
rs.addnew‘添加一条记录
rs("name")=name ‘添加用户名
rs("pswd")=userpwd ‘添加密码
rs("userinfo")=userinfo ‘添加用户信息
rs("lasttime")=regtime‘添加注册时间
rs.update ‘执行添加操作
userid=rs("userid")
rs.close ‘关闭记录集
set rs=nothing‘释放记录集
6.2.2测试
先注册一个id为user的用户(先前数据库中无此用户名的),注册成功后,再注册一个id为user的用户!预期结果应该是系统提示该用户名已经存在。填写完整的资料后点击注册,此时系统按照预期结果提示该用户名已经被注册了。测试结果,系统正常按照设计模式运行。
总 结