asp新手请asp高手把把关!

yrb 2007-08-19 12:33:47
项目的需要,扭捏出下面这点asp代码用于用户注册,高手给看看怎样进行必要的错误处理,关键资源(数据库表)怎样进行并发保护?比如多个个用户用同一个用户名在同时注册,该怎样处理?
谢谢!

<%
'用户注册

dim name, password, email, company
name = request.form("name")
password = request.form("password")
email = request.form("email")
company = request.form("company")
dim db, conn, connstr, sql, rs
db = "data/database.mdb"
set conn = server.createobject("ADODB.connection")
connstr = "provider=microsoft.JET.OLEDB.4.0;data source=" & server.mappath(db)
conn.open connstr
sql = "select top 1 * from [Users] where Name = '" & trim(name) & "'"
set rs = server.createobject("ADODB.recordset")
rs.open sql, conn, 3, 2
if rs.RecordCount = 1 then
response.write("FAILED")
else
rs.addnew
rs("name") = name
rs("password") = password
rs("email") = email
rs("company") = company
'rs("logincount") = 0
rs.update
rs.close
response.write("SUCCESSFUL")
end if

set rs = nothing
set comm = nothing
%>
...全文
258 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
houyongle 2007-08-21
  • 打赏
  • 举报
回复

jspadmin 2007-08-21
  • 打赏
  • 举报
回复
客户端先进行初步筛选,再回传服务器,这样能减少很都工作。

至于,假如有两个用户用在同一时间用同一个用户名注册,该怎样处理?这个交给数据库处理,很明显,access是不行的,sql server之类的数据库就可以较好的处理并发事件。
yrb 2007-08-21
  • 打赏
  • 举报
回复
谢谢害虫兄弟热心帮助!

希望大家能够改改我的程序。

1、就我上面的代码,加入怎样的错误处理能够在打开数据库失败时释放必要的资源(conn,rs)?

2、假如有两个用户用在同一时间用同一个用户名注册,该怎样处理?
scscms太阳光 2007-08-21
  • 打赏
  • 举报
回复
同一秒钟保存进去,不可能这么巧吧
判断是否同一个用户名是在保存前判断,条件符合立刻保存,同一时间保存同一个名机会不太可能
lj_0225 2007-08-21
  • 打赏
  • 举报
回复
来迟了
swazn_yj 2007-08-21
  • 打赏
  • 举报
回复
mark@!
jsxxf 2007-08-20
  • 打赏
  • 举报
回复
要并发保护
写数据库的时候lock一下~
做个数据库事务~
gujian1986 2007-08-20
  • 打赏
  • 举报
回复
我顶!!!
BoyHaXin 2007-08-20
  • 打赏
  • 举报
回复
顶害虫
zhanghongwen 2007-08-20
  • 打赏
  • 举报
回复
UP
hunshihaichong 2007-08-20
  • 打赏
  • 举报
回复
RS.OPEN SQL,CONN,A,B

我上面给你资料了
事务,ASP和SQL都有
scscms太阳光 2007-08-19
  • 打赏
  • 举报
回复
if conn.Execute("select count(*) from Users where email='"&Email&"'")(0)<>0 then
Response.write "<script>alert('对不起,此邮箱已经注册!');javascript:history.back();</script>"
response.end
end if

if len(UserName)<3 then
Response.write "<script>alert('请输入3个以上的用户名');javascript:history.back();</script>"
response.end
end if
if len(Password)<6 then
Response.write "<script>alert('请输入密码,不能大于8小于6!');javascript:history.back();</script>"
response.end
end if
if Password<>PwdConfirm then
Response.write "<script>alert('请密码和确认密码不一致!');javascript:history.back();</script>"
response.end
end if
if BPCheckEMail(Email)=false then '自己找个判断邮箱代码
Response.write "<script>alert('您的Email有错误!');javascript:history.back();</script>"
response.end
end if

sqlReg="select * from Users where name='"&UserName&"'"
set rsReg=server.createobject("adodb.recordset")
rsReg.open sqlReg,conn,1,3
if not(rsReg.bof and rsReg.eof) then
rsReg.close:set rsReg=nothing
Response.write "<script>alert('你注册的用户已经存在!请换一个用户名再试试!');history.back();</script>"
response.end
else
'以下是保存信息
hunshihaichong 2007-08-19
  • 打赏
  • 举报
回复
不好意思,我理解错你的意思了

你的问题也容易,下面我给你参考
RS.OPEN SQL,CONN,A,B
参数A为设定游标的类型,其取值为:
0 仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark
1 键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
2 动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。
3 静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动


参数B为记录集的锁定类型,其取值为:
1 锁定类型,默认的,只读,不能作任何修改
2 当编辑时立即锁定记录,最安全的方式
3 只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的

打开数据记录集方法其实不止一种,但是我们用的最多的就是
rs.open sql,1,1的方法,可是后面的数字参数很多人不解其意,下面我们来介绍一下。
其实open方法后面有多个参数
CursorType LockType CommandType
比如 rs.open sql,1,1
也可以写成
rs.cursorType = 1
rs.LockType = 1
rs.open sql
其中CursorType代表从一个表或者一个SQL查询结果返回的记录。
这个参数有四个值分别是:
adOpenForwardOnly 表示只允许在记录集内的记录间往前移动。这个是缺省值。
adOpenKeyset 反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。
adOpenDynamic 反映由其它用户所做的对记录的改变或者删除动作,包括添加的新记录
adOpenStatic 不反映其它用户对记录所做的修改,添加,删除动作。
这四个值VBSCRIPT预定义位
adOpenForwardOnly = 0
adOpenKeyset = 1
adOpenDynamic = 2
adOpenStatic = 3

lockType 表示当打开记录集时,数据提供者用于锁定数据库的类型:
adLockReadOnly 数据不能改变,这是缺省值!
adLockPessimistic 数据提供者在开始编辑数据的时候锁定记录
adLockOptimistic 仅当调用update方法时,数据提供者锁定记录
adLockBatchOptimistic 用于批处理修改
他们的常量值定义分别是:
adLockReadOnly = 1
adLockPessimistic = 2
adLockOptimistic = 3
adLockBatchOptimistic = 4
hunshihaichong 2007-08-19
  • 打赏
  • 举报
回复
登陆的时候判断这个字段是否为"是",为"是"就表示已有人登陆
hunshihaichong 2007-08-19
  • 打赏
  • 举报
回复
一用Application
二在数据库添加一个字段(是/否),在登陆成功的时候改变这个字段
yrb 2007-08-19
  • 打赏
  • 举报
回复
谢谢各位参与。不过恢复的时候拜托看清楚我的问题。
也许是我没有描述清除问题。
街头小贩 2007-08-19
  • 打赏
  • 举报
回复
要让快!就不能在服务器端作这些判断!全放到客户端,保证传到服务器端的数据都是合法化的!可以用JS AJAX呀
yrb 2007-08-19
  • 打赏
  • 举报
回复
谢谢楼上的二位!
期待高手!
ljlj1203 2007-08-19
  • 打赏
  • 举报
回复
那就要看哪个速度快啦
if rs.RecordCount = 1 then
response.write("该用户名以经存在")
相关的判断楼上的不错

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧