Asp classic 电子邮件重复验证

Asp classic 电子邮件重复验证,asp-classic,Asp Classic,首先,我要做的是将access数据库链接到一个成功的站点。现在,我正试图在注册页面上显示一条特定消息,说明输入的电子邮件已经存在(如果存在),而不是在电子邮件存在时通常会出现的odbc错误消息,但是无论它是否存在,我都会看到我的错误消息。 到目前为止,我所做的代码如下所示,对于可能出现的错误,我们将不胜感激 sql="INSERT INTO Customers (Customerfirstname, Customerlastname, Email, Password, Address,

首先,我要做的是将access数据库链接到一个成功的站点。现在,我正试图在注册页面上显示一条特定消息,说明输入的电子邮件已经存在(如果存在),而不是在电子邮件存在时通常会出现的odbc错误消息,但是无论它是否存在,我都会看到我的错误消息。 到目前为止,我所做的代码如下所示,对于可能出现的错误,我们将不胜感激

sql="INSERT INTO Customers (Customerfirstname, Customerlastname, Email, Password, Address,        Phoneno)     VALUES (' "&fname&"',' "&lname&"','"&email&"',' "&password&"',' "&caddress&"',' "&phno&"')"
on error resume next
  Con.Execute sql  
    if err.number <> 0 then
     response.write("E-mail already exist")         
    else  
  ' append the query string to the redirect URL
      If (Request.QueryString <> "") Then
      If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0) Then
        MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
      Else
        MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
      End If
    End If
 end if
Response.Redirect(MM_editRedirectUrl)
con.close: set conn = nothing
sql=“在客户(Customerfirstname、Customerlastname、Email、密码、地址、电话号码)中插入值(“&fname&“、”&lname&“、”&Email&“、”&Password&“、”&cadress&“、”&phno&“)”
出错时继续下一步
Con.执行sql
如果错误号为0,则
回复。写入(“电子邮件已存在”)
其他的
'将查询字符串附加到重定向URL
如果(Request.QueryString“”),则
如果(InStr(1,MM_editRedirectUrl,“?”,vbTextCompare)=0),则
MM_editRedirectUrl=MM_editRedirectUrl&“?”&Request.QueryString
其他的
MM_editRedirectUrl=MM_editRedirectUrl&“&”和Request.QueryString
如果结束
如果结束
如果结束
Response.Redirect(MM_editRedirectUrl)
con.close:设置conn=无

在尝试将任何内容插入数据库之前,需要执行一些验证

首先,获取他们通过您的表单提交的电子邮件地址,并在清除该地址以进行注入(如本文所述)后,运行SELECT查询以查看该地址是否存在

如果它确实存在,将它们重定向到一个好的错误页面,如果它不存在,并且在清理完用户提交的其余部分后,应该将其插入到数据库中


此外,使用“if err.number 0 then response.write(“电子邮件已经存在”)是错误的。如果电子邮件地址不存在,但可能他们试图在数据库中插入过长的字符串,该怎么办?或者,如果数据库因某种原因不可用,该怎么办?您将给他们错误的错误。

检查实际错误是什么:

if err.number <> 0 then
     response.write(err.description)         
else
..
如果错误号为0,则
响应写入(错误描述)
其他的
..

您是否在维护旧版应用程序?在新项目中使用经典ASP绝对没有什么好理由。另外,Access不是一个好的数据库。我对这一点不太熟悉…不确定你所说的遗留应用程序是什么意思,我之所以使用Access是因为熟悉遗留应用程序,我指的是已经存在很长时间的东西,你只是在维护。如果您正在编写新的应用程序,请不要使用经典ASP。使用现代web框架(如ASP.NETMVC),并使用真正的数据库(如SQLServer)。将会有一个更大的学习曲线,但这是值得的。我的电话号码是0’;更新客户设置密码=“”;--,我刚刚侵入了你的系统。您需要防止SQL注入。在运行insert查询之前,请运行select查询,例如select count(id)as CUSTOMER count from email='“&email&'”的客户。如果返回的计数大于0,则显示电子邮件存在消息,否则运行插入查询。我假设您知道如何在ASP/VBS中执行条件语句