Captcha einfachen Wert übergeben

sonicks

Erfahrenes Mitglied
Hallo,

Ich generiere mit diesem Tutorial (http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html) ein Captcha, was auch alles super funktioniert. (Das Obere von den zwei)

Jetzt möchte ich natürlich den Wert, den das Bild anzeigt auch übergeben können, um ihn mit dem eigegebenen Wert vom User zu vergleichen. Im zweiten Tutorial wird MySQL verwendet, was ich aber nicht unbedingt möchte.

captcha.php
Code:
<?php

    $CAPTCHA_LENGTH = 5;    // Länge der Captcha-Zeichenfolge, hier fünf Zeichen
    $FONT_SIZE      = 18;   // Schriftgröße der Zeichen in Punkt
    $IMG_WIDTH      = 170;  // Breite des Bild-Captchas in Pixel
    $IMG_HEIGHT     = 60;   // Höhe des Bild-Captchas in Pixel

    // Liste aller verwendeten Fonts
    $FONTS[] = './ttf/fat';
    $FONTS[] = './ttf/un';

    // Unser Zeichenalphabet
    $ALPHABET = array('A', 'B', 'C', 'D', 'E', 'F', 'G',
                      'H', 'Q', 'J', 'K', 'L', 'M', 'N',
                      'P', 'R', 'S', 'T', 'U', 'V', 'Y',
                      'W', '2', '3', '4', '5', '6', '7');

    // Wir teilen dem Browser mit, dass er es hier mit einem JPEG-Bild zu tun hat.
    header('Content-Type: image/jpeg', true);

    // Wir erzeugen ein leeres JPEG-Bild von der Breite IMG_WIDTH und Höhe IMG_HEIGHT
    $img = imagecreatetruecolor($IMG_WIDTH, $IMG_HEIGHT);

    // Wir definieren eine Farbe mit Zufallszahlen
    // Die Farbwerte sind durchgehend und absichtlich hoch (200 - 256) gewählt,
    // um eine "leichte" Farbe zu erhalten
    $col = imagecolorallocate($img, rand(200, 255), rand(200, 255), rand(200, 255));

    // Wir füllen das komplette Bild mit der zuvor definierten Farbe
    imagefill($img, 0, 0, $col);

    $captcha = ''; // Enthält später den Captcha-Code als String
    $x = 10; // x-Koordinate des ersten Zeichens, 10 px vom linken Rand


    for($i = 0; $i < $CAPTCHA_LENGTH; $i++) {

        $chr = $ALPHABET[rand(0, count($ALPHABET) - 1)]; // ein zufälliges Zeichen aus dem definierten Alphabet ermitteln
        $captcha .= $chr; // Der Zeichenfolge $captcha das ermittelte Zeichen anfügen

        $col = imagecolorallocate($img, rand(0, 199), rand(0, 199), rand(0, 199)); // einen zufälligen Farbwert definieren
        $font = $FONTS[rand(0, count($FONTS) - 1)]; // einen zufälligen Font aus der Fontliste FONTS auswählen

        $y = 25 + rand(0, 20); // die y-Koordinate mit einem Mindestabstand plus einem zufälligen Wert festlegen
        $angle = rand(0, 30); // ein zufälliger Winkel zwischen 0 und 30 Grad

        /*
         * Diese Funktion zeichnet die Zeichenkette mit den
         * gegeben Parametern (Schriftgröße, Winkel, Farbe, TTF-Font, usw.)
         * in das Bild.
         */
        imagettftext($img, $FONT_SIZE, $angle, $x, $y, $col, $font, $chr);

        $dim = imagettfbbox($FONT_SIZE, $angle, $font, $chr); // ermittelt den Platzverbrauch des Zeichens
        $x += $dim[4] + abs($dim[6]) + 10; // Versucht aus den zuvor ermittelten Werten einen geeigneten Zeichenabstand zu ermitteln
    }

    imagejpeg($img); // Ausgabe des Bildes an den Browser
    imagedestroy($img); // Freigeben von Speicher 
   
?>

formular.php
Code:
<img src="captcha_inc.php">

Nun wird im Tutorial gesagt, dass $captcha den Wert der Zeichenkette enthält. Wenn ich $captcha aber ausgebe, egal ob in der formular.php oder im captcha.php wird mir gar nichts angezeigt, was wohl soviel heißt, dass $captcha nichts enthält oder?
Wie kann ich nun also den Wert bekommen, um ihn mit dem Eingabefeld zu vergleichen?

Danke schonmal im Vorraus

MfG
 
Ändere mal den Inhaltstyp, der bei der Auslieferung angegeben wird (momentan in deinem Beispiel „image/jpeg“), in „text/plain“.
 
Ok hab ich gemacht, wenn ich dann aber direkt auf die captcha.php zugreifen will, dann will FF die Datei runterladen.
Und im formular.php ist $captcha immer noch unbestimmt.

Grüße
 
Wenn er die Ausgabe herunterladen will, hast du etwas falsch gemacht. Wie folgt sollte es aussehen:
PHP:
header('Content-Type: text/plain', true);
Die $captcha-Variable wird zudem außerhalb des „captcha.php“-Skripts nie verfügbar sein, da sie ja nur in diesem Skript definiert wurde.
 
Ja, selbst wenn ich deinen Code jetzt rüberkopier will FF die Datei runterladen. Im IEX gehts, $captcha wird jedoch auch nicht angezeigt.

Gibt es ne Möglichkeit, die Variable aus dem Script herraus zu holen wenns über das Bild aufgerufen wird?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück