Подтвердить форму адреса электронной почты отправить - PullRequest
4 голосов
/ 08 октября 2009

У меня есть простая форма, которая позволяет пользователям вводить промо-код и адрес электронной почты для подписки на электронную почту следующим образом. Но в настоящее время он не проверяет адрес электронной почты правильно.

Существует файл включения doreferral.asp, который; Проверяет, существует ли введенный ими код в таблице промокодов, а также проверяет, существует ли уже адрес электронной почты.

Я добавил emailValidate, чтобы проверить, действителен ли адрес электронной почты, а если нет, а затем сообщить пользователю в <% = sys_message%>.

Однако в настоящее время он останавливает подлинные электронные письма, поэтому проверка не работает. : S

Мой doreferral.asp выглядит так;

<%
    Code            = replace(request.Form("Code"),"'","")
    Email       = replace(request.Form("Email"),"'","")

    sys_message = ""
    submission = ""

    ''//Check the submitted code against existing ones in the database
    set conn = server.CreateObject("ADODB.connection")
    conn.open(application("DATABASE"))
    qs = "SELECT COUNT(AgentReferralCode) AS 'CountCodes' FROM Customers WHERE AgentReferralCode = '" & Code & "'"
    set rs = conn.Execute(qs)

    CountCode = rs("CountCodes")

    set rs = nothing
    conn.close
    set conn = nothing

    If(CountCode < 1) Then
        sys_message = sys_message & "<p class='err'>The agent code does not exist.</p>"
    End If

''//Check to see if the email address is valid
Dim emailValidate
emailValidate = 0 'Initializing goby to 0

''//if the len is less than 5 then it can't be an email
''//(i.e.: a@a.c) 
If Len(session("Email")) <= 5 Then
   emailValidate = 1
End If

If InStr(1, session("Email"), "@", 1) < 2 Then
    'If we find one and only one @, then the
    'email address is good to go.
    emailValidate = 1
Else
    If InStr(1,session("Email"), ".", 1) < 4 Then
        'Must have a '.' too
         emailValidate = 1
    End If
End If

If emailValidate <> 0 then 
    sys_message = sys_message & "<p class='err'>The email address is not valid.</p>"
End If

    ''//Check the submitted email against existing ones in the database
    set conn = server.CreateObject("ADODB.connection")
    conn.open(application("DATABASE"))
    qs = "SELECT COUNT(ReferredEmail) AS 'Count' FROM TenantReferral WHERE ReferredEmail = '" & Email & "'"
    set rs = conn.Execute(qs)

    countEmail = rs("Count")

    set rs = nothing
    conn.close
    set conn = nothing

    If(countEmail >= 1) Then
        sys_message = sys_message & "<p class='err'>This email address has already been referred.</p>"
    End If  

    ''//Only Process the SQL if there is no sys_message
    If(sys_message = "") Then

        SQLfields = SQLfields & "ReferredCode, "
        SQLvalues = SQLvalues & "'"& Trim(Code) &"', "
        SQLfields = SQLfields & "ReferredEmail"
        SQLvalues = SQLvalues & "'"& Trim(Email) &"'"

        SQL = SQL & "INSERT into TenantReferral ("& SQLfields &") VALUES ("& SQLvalues &")"
        'response.Write(SQL)

        set conn = server.CreateObject("ADODB.connection")
        conn.open application("DATABASE")
        SET rs = conn.execute(SQL)

        [Send email code]


        sys_message = sys_message & "<p class='ok'>Thank you for your referral.</p>" 
        submission = "ok"
        'response.Redirect("referral.asp")
    End If
%>

Я задавался вопросом, может ли кто-нибудь помочь в отладке функции emailValidate, чтобы проверить, действителен ли адрес электронной почты?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 08 октября 2009

Примерно так проходит базовая проверка регулярных выражений. Вы можете полюбить и сделать поиск DNS, но для большинства целей этого достаточно:

  Function validate(eaddr)
  dim isValidE
  dim regEx

  isValidE = True
  set regEx = New RegExp

  regEx.IgnoreCase = False

  regEx.Pattern = "^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$"
  isValidE = regEx.Test(eaddr)

  validate= isValidE
  End Function

Regex заимствовано отсюда: http://tiffanybbrown.com/2006/12/12/a-better-regex-pattern-for-matching-e-mail-addresses/

0 голосов
/ 20 октября 2009

Здесь меня беспокоит несколько вещей.

  1. Вы явно не помещаете значение формы ("email") в сеанс, но пытаетесь использовать его позже в скрипте. Возможно, вы опустите эту часть кода для краткости, я не знаю.

  2. Вы используете переменную "emailValidate" и задаете для нее значение 0 (т. Е. False), но делаете его равным 1 (true), если проверка не удалась. Это похоже на неправильное именование переменных. «fail» должно быть False, «pass» должно быть True.

  3. Как указывалось выше, из-за любви к вашей базе данных и всем тем вкусным маленьким адресам электронной почты, пожалуйста, реорганизуйте свой код, чтобы избежать SQL-инъекций!

  4. В ваших комментариях говорится, что вы ищете только один знак @, но ваш код говорит, что если вы найдете только один знак @, то emailValidate = 1 (ошибка (в вашем коде)) - что приводит меня думать, что ваше собственное именование переменных сбило вас с толку!

Я не знаю, как долго вы кодируете в ASP, поэтому мне не хочется показаться слишком ханжеским, но этот подход к кодированию просто не верен. Это многословно и запутано. Идеальное решение уже было предложено с использованием Regex и небольшой вспомогательной функции, в которую вы передаете адрес электронной почты и просто возвращаете True или False ...

0 голосов
/ 08 октября 2009

Вот страница с примером валидатора регулярного выражения электронной почты: http://www.codetoad.com/asp_email_reg_exp.asp. Вы должны иметь возможность использовать что-то подобное для своих нужд.

И еще одно - вы захотите посмотреть на использование параметризованных запросов SQL, в настоящее время ваша команда уязвима для внедрения SQL, потому что вы просто добавляете код и адрес электронной почты в строки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...