Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Simples Text Captcha mit Classic ASP

Da es anscheinend immer noch solche gibt, die noch mit Classic ASP arbeiten, habe ich mein Captcha Beispel (Simples Text Captcha mit ASP.NET) mit Classic ASP nachgebaut.

Eines vorneweg, es war eine echte Qual, sich wieder die untypisierte, etc... Scriptsprache "VBScript" und "Classic ASP" anzutun, aber wieder mal ein wenig "Back to the roots" schadet auch nicht :-)
Da es bei Eingaben leicht zu Laufzeit-Fehlern in Classic ASP kommt, habe ich anstelle einer Prüfung - die auch fehlschlagen kann, da bspw. IsNumeric() auch Fehlerhaft ist - eine einfache Fehlerbehandlung benutzt.

Zusätzlich verwende ich jetzt ein HiddenField, damit der Label-Text nach einem PostBack wiederhergestellt wird. In ASP.NET geschieht dies automatisch mit Hilfe des ViewStates.
Und damit die Eingabe immer wieder ins Formular-Feld geschrieben wird, reicht ein einfaches (value = Request.Form(<Name>)).

Hier der Code zum studieren (Und zum Vergleich gibts hier das ASP.NET Pendant):



<% Option Explicit %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<A href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</A>">
<html xmlns="<A href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</A>">
<head>
<title>Simples Text Captcha mit Classic ASP</title>
</head>
<body>
<%
Dim s_status, _
       s_captcha, _
       s_hiddenCaptchaText

'// Wenn das Formular abgeschickt wurde
If Request.Form.Count > 0 Then
    '// Validieren und Status anzeigen
    If ValidateCaptcha() Then
        s_status = "Eingaben korrekt"
    Else
        s_status = "Eingaben fehlerhaft"
    End If
   
    '// Wiederherstellung des aktuellen Captcha-Textes (ViewState kommt hier in ASP.NET zum Zuge)
    s_hiddenCaptchaText = Request.Form("hiddenCaptchaText")
    s_captcha                  = s_hiddenCaptchaText
Else
    Dim random
    Dim num1, _
           num2

    num1 = CreateRandomNumber(1, 15)
    num2 = CreateRandomNumber(1, 15)
   
    s_captcha = CStr(num1) & " + " & CStr(num2) & " ="
    s_hiddenCaptchaText = s_captcha
   
    Session("captcha") = num1 + num2
End If

'// Erzeugt eine Zufalls-Nummer zwischen "i_min" und "i_max"
Private Function CreateRandomNumber(i_min, i_max)
    Call Randomize()
    CreateRandomNumber = CInt((i_max * Rnd) + i_min)
End Function

'// Validiert das Captcha und gibt bei Erfolg "true" zurück
Private Function ValidateCaptcha()
    Dim i_sessionValue, _
           i_inputValue
   
    On Error Resume Next
   
    i_sessionValue = CInt(Session("captcha"))
    i_inputValue     = CInt(Request.Form("txtCaptcha"))
   
    If Err.Number <> 0 Then
        ValidateCaptcha = False
    End If
   
    On Error GoTo 0
   
    ValidateCaptcha = (i_sessionValue = i_inputValue)
End Function
%>

<h1>Simple Captcha (Classic ASP)</h1>
<form id="captchaForm" name="captchaForm" method="post" action="default.asp">
    <label for="txtCaptcha"><%= s_captcha%></label>
    <input type="text" name="txtCaptcha" id="txtCaptcha" value="<%= Request.Form("txtCaptcha") %>" /><br />
    <input type="hidden" name="hiddenCaptchaText" value="<%= s_hiddenCaptchaText %>" />
    <input type="submit" name="btnSubmit" value="Abschicken" />
    <span><%= s_status%></span>
</form>
</body>
</html>

Benutzung:
Kompletter Code in eine *.asp Datei speichern, das "action"-Attribut des Formulars auf den Dateinamen anpassen und fertig.

Veröffentlicht Samstag, 12. Juli 2008 16:47 von Peter Bucher

Kommentare

# re: Simples Text Captcha mit Classic ASP

in das Action Attribut kann man auch Request.ServerVariables("SCRIPT_NAME") eintragen. Damit sollte man sich bei Änderungen im Dateinamen die Korrektur sparen.

Gruß

Picard

Mittwoch, 23. Juli 2008 11:04 by Picard

# re: Simples Text Captcha mit Classic ASP

Hi Picard

Jep, das stimmt.

Mittwoch, 23. Juli 2008 11:22 by Peter Bucher

# Auf MsZone hizugefügt

Diese Nachricht wurde auf MsZone - Microsoft News! vorgeschlagen. Hier kannst du den Artikel bewerten: http://www.mszone.de/Developer/Simples_Text_Captcha_mit_Classic_ASP

Dienstag, 29. Juli 2008 08:58 by MsZone - Microsoft News
Anonyme Kommentare sind nicht zugelassen