问题描述
|
我正在用ASP创建我的第一个项目。该项目只是使用注册系统进行基本的登录/注销。我想知道如何解决以下代码,以便当用户注册到我的网站并输入数据库中已经存在的重复用户名时,它将重定向到仍填写所有字段但用户名字段为空的表单提示用户已经存在。
下面是我的代码:
<%
Dim objShop
set objShop=Server.CreateObject(\"ADODB.Recordset\")
objShop.ActiveConnection=shop_STRING
objShop.source = \"SELECT * FROM Users WHERE UserName=\" & Request.Form(\"regUsername\")
objShop.CursorType=0
objShop.CursorLocation=2
objShop.LockType=3
objShop.Open
if not (objShop.EOF) then
objShop.source=\"Users\"
objShop.CursorType=0
objShop.CursorLocation=2
objShop.LockType=3
objShop.Open
objShop.Addnew
objShop(\"FirstName\")= Request.Form(\"regFirst\")
objShop(\"LastName\")= Request.Form(\"regLast\")
objShop(\"StudentID\")= Request.Form(\"regID\")
objShop(\"EmailAddress\")= Request.Form(\"regEmail\")
objShop(\"UserName\")= Request.Form(\"regUsername\")
objShop(\"Password\")= Request.Form(\"regPassword\")
objShop(\"Address\")= Request.Form(\"regAddress\")
objShop(\"Suburb\")= Request.Form(\"regSuburb\")
objShop(\"Postcode\")= Request.Form(\"regPostcode\")
objShop(\"ContactNumber\")= Request.Form(\"regContact\")
objShop(\"CCCompany\")= Request.Form(\"regCCCompany\")
objShop(\"CCNumber\")= Request.Form(\"regCCNumber\")
objShop(\"CCExpiryMonth\")= Request.Form(\"regCCExpMonth\")
objShop(\"CCExpiryYear\")= Request.Form(\"regExpYear\")
objShop(\"CCCVCNumber\")= Request.Form(\"regCVCNumber\")
objShop.Update
objShop.Close
set objShop= nothing
else
response.write(\"Username already exists\")
end if
%>
我收到的代码错误是:
Microsoft JET Database Engine error \'80040e10\'
No value given for one or more required parameters.
/home/registration.asp,line 17
所以我决定在添加值之前,再次将response.write(\“用户名已经存在\”)放入if语句中,然后出现此错误:
Microsoft JET Database Engine error \'80040e14\'
Syntax error (missing operator) in query expression \'UserName=\'.
/home/registration.asp,line 17
我不知道如何解决这个问题。任何帮助,将不胜感激!
解决方法
您需要在SQL表达式中的输入周围加上单引号
objShop.Source = \"SELECT * FROM Users WHERE UserName=\'\" & _
Request.Form(\"regUsername\") & \"\'\"
, 考虑您当前逻辑的此伪代码版本。
if not (objShop.EOF) then
AddNew
Else
display notice that user account already exists
如果您在User表中有一个或多个记录,其中UserName与regUsername匹配,则not(objShop.EOF)将为True。
所以你的意思是这样的:
If we have previously stored one or more records for this UserName
add another record for this UserName
Else (no matching record exists)
display notice that user account already exists
显然,您不应该收集和存储信用卡信息。