Captcha - wie im HTML integrieren?

  • Ich habe dieses Captcha Beispiel versucht
    http://www.php-kurs.com/captcha-erstellen.htm


    isoliert läuft es gut, aber wenn ich das dazugehörige HTML Formular bastle, erscheint immer nur das fertige Image. Es scheint, ich habe keine Kontrolle über die Länge und Breite, height and width values werden ignoriert, ich kann es folglich nicht in meine Applikation integrieren. Ich kodierte einfach dies:


    <form enctype="multipart/form-data" method="post" action="Captcha.php" />
    <h1>Load the image</h1>
    <table width="660" border="1">
    <tr><td><img src="captcha.php" alt="Captcha" height="128" width="128"> </td>
    <td><input name="Verification" type="text" id="verification" size="5" maxlength="5"></td></tr>


    </table>
    <p><input type="submit" name="submit" value="Upload this File" /></p>
    </form>


    worauf immer das fertige Bild erscheint, der Table und das Input Feld erscheinen nie. Schade, mir gefällt der grüne Ball :) .


    Wäre dankbar für Tipps.
    Matt

  • Hallo und willkommen im Forum!
    Bitte, lies dir mal das hier durch, das hilft ungemein beim Helfen :D


    Was genau ist dein Fehler? Es soll doch das fertige Bild erscheinen?! Das Bild mitsamt Zeichen drauf wird komplett im Server generiert und dann erst an den Nutzer gesendet. Probleme mit deinem PHP Skript hättest du, wenn KEINE Buchstaben auftauchen würden.
    Width und height des Bildes werden beim PHP Code direkt aus dem Hintergrundbild übernommen, entweder du skalierst dieses direkt, mit GIMP oÄ, oder du guckst (zB bei http://www.php.net/) nach Funktionen, um in PHP geladene Bilder zu skalieren. Gibt es auch ;)


    Wenn es darum geht, dass das Validieren des Skripts nicht klappt, dann ist dein fehler dein action:

    HTML
    <form enctype="multipart/form-data" method="post" action="Captcha.php" />

    Captcha.php sieht vermutlich ähnlich wie hier aus: Captcha Lösung. Wenn du dir das Skript aber mal ansiehst, dann merkst du, dass da keinerlei Eingabedaten verarbeitet werden!


    Hier mal eine Idee, wie dein Einloggskript aussehen könnte:

    HTML
    <form action="validate.php" method="post"> <!-- kein < />, denn es kommt ein schliessender Tag -->
      <div>
        <img src="captcha.php" alt="Captcha" width="128" height="128" /> <!-- HIER brauchst du das < /> -->
      </div>
      <label>Gib die im Bild zu sehenden Zeichen ein:
        <input type="text" name="verification" size="5" maxlength="5" />
      </label><br />
      <input type="submit" name="submit" value="Captcha lösen" />
    </form>


    Natürlich ist auch wichtig, welche HTML Version du nutzt, bei HTML 5 ist das < /> sowieso nur optional.

  • vielen Dank für die rasche Antwort. Ich habe jetzt Deinen HTML Code übernommen, und auch den script ohne Aenderungen, aber das Problem bleibt das gleiche. Der Browser zeigt nur die grüne Kugel, mit den Buchstaben drinne, das ist ok, aber weder das Label noch das Eingabefeld oder der Submit-Button werden angezeigt oder ev. überlappt von dem Image. Somit ist es nicht möglich irgend etwas einzugeben das dann validiert werden könnte.


    Werde mich mal schlauzumachen versuchen mit den skalieren. Auf die Schnelle ist mir leider nix gelungen bisher. Für weitere Tipps stets dankbar. :)
    Matt

  • wolf: Wo ist denn deiner Meinung nach da ein Fehler? Das Skript captcha.php liefert doch am Anfang den image/png Mimeheader, damit passt das auch :D


    Matt: Probier erstmal, die Originalgroesse des Hintergrundbildes als width und height im HTML zu setzen. Wenn dann immer noch nichts angezeigt wird, dann wird es seltsam.


    Und wenn es hilft, dann ist das Problem folgendes: Du gibst deinem HTML die angebliche Hoehe und Breite des Bildes (128) mit, darauf verlaesst sich HTML dann. Es hat also die Startecke des Bildes (da wo der Code sitzt) und geht von 128px nach unten und schreibt da dann das naechste Element hin (das Eingabefeld). Da das Bild aber in Echt groesser ist, liegt es ueber dem naechsten Element.
    Ergo: Entweder Hintergrundbild in GIMP/Photoshop/whatever skalieren, oder im PHP Skript. Letzteres ist aufwaendiger, aber lohnender, da die Werte dynamisch sein koennen.


    Wenn es NICHT hilft, dann habe ich ein Problem, weil erstmal keine Ahnung was falsch sein koennte :D

  • es geht anscheinend nur dann wenn ich die editierte png-Datei als jpeg sichere und dann die jpeg Datei im HTML referenziere:



    HTML
    <title>Test a Captcha</title>
    <form action="validate.php" method="post"> <!-- kein < />, denn es kommt ein schliessender Tag -->
      <div>
        <img src="captcha-clock-edited.jpg" alt="Captcha" width="128" height="128" /> <!-- HIER brauchst du das < /> -->
      </div>
      <label>Gib die im Bild zu sehenden Zeichen ein:
        <input type="text" name="verification" size="5" maxlength="5" />
      </label><br />
      <input type="submit" name="submit" value="Captcha lösen" />
    </form>


    jetzt muss ich noch die Eingaben validieren, aber ich denke mit SESSION variablen sollte das ohne Schweiss gehen.
    Vielen Dank nochmals!

  • Wenn du das als jpeg erstellst, dann musst du Die Zeile 10 folgendermaßen ändern:

    PHP: 10
    // Dem Browser mitteilen, dass ein JPEG Bild kommt
    header("Content-type: image/jpg");
  • ich hab das so gemacht:

  • Und du glaubst, bots könnten nicht rechnen?!
    Sorry aber das ist kein Schutz gegen spam Accounts.
    Es hilft allerhöchstens gegen nervige 6. klässler, die nach dem 3. Mail keine Lust mehr haben.
    Und wofür haust du den wert durch md5? :0

  • Zwecks bots:
    ich vermute, dass bots generell keine selbstgeschriebenen Logins angehen. Dabei kommt es wohl auf die Form und die url an.
    Ich bin seit Jahren mit unserer Seite im Netz und habe nicht einen bot erlebt (nutze kein captcha o.ä.).
    Ein bot muss ja geschrieben werden (logisch). Und die werden sicherlich relativ dynamisch auf die bekanntesten Loginsysteme (wie zB hier das Burning Board) geschrieben.

  • Worfür dann überhaupt ein capatcha? :D


    Naja, nach de ich hier mal nen Link zu meiner Seite gepostet habe, hat sich jemand von euch den Spaß gemacht mir 40 mal zu schreiben :D
    Evtl um mich darauf aufmerksam zu machen, ich weiß es nicht ^^

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!