flogy92
Mitglied
Hallo Leute!
Ich habe schon mehrmals Captchas verwendet (erfolgreich). In diesem Falle will diese aber einfach nicht funktionieren. Ich habe drei Dateien, die dabei eine Rolle spielen:
- index.php
- registrieren.php
- captcha.php
In der index.php wird die session gestartet und alle anderen Seiten werden per include geladen, also auch die registrieren.php in der das Captcha angezeigt wird. In der registrieren und captcha Datei wird keine neue Session mehr gestartet. Das Problem ist nun aber, dass der Captchacode, den ich in die Session speichere irgendwie in der registrieren.php nicht ankommt. Das Captcha-Bild wird jedoch angezeigt.
Wenn ich also den Code ausgeben möchte und echo $_SESSION['captcha'] schreibe, wird einfach ein leerer String zurückgegeben :s
Hier noch der Code der Captcha-Datei:
Kann mir jemand helfen?
Vielen Dank im Voraus!
MfG flogy92
Ich habe schon mehrmals Captchas verwendet (erfolgreich). In diesem Falle will diese aber einfach nicht funktionieren. Ich habe drei Dateien, die dabei eine Rolle spielen:
- index.php
- registrieren.php
- captcha.php
In der index.php wird die session gestartet und alle anderen Seiten werden per include geladen, also auch die registrieren.php in der das Captcha angezeigt wird. In der registrieren und captcha Datei wird keine neue Session mehr gestartet. Das Problem ist nun aber, dass der Captchacode, den ich in die Session speichere irgendwie in der registrieren.php nicht ankommt. Das Captcha-Bild wird jedoch angezeigt.
Wenn ich also den Code ausgeben möchte und echo $_SESSION['captcha'] schreibe, wird einfach ein leerer String zurückgegeben :s
Hier noch der Code der Captcha-Datei:
PHP:
<?php
$CAPTCHA_LENGTH = 5; // Länge der Captcha-Zeichenfolge, hier fünf Zeichen
$FONT_SIZE = 16; // Schriftgröße der Zeichen in Punkt
$IMG_WIDTH = 144; // Breite des Bild-Captchas in Pixel
$IMG_HEIGHT = 35; // Höhe des Bild-Captchas in Pixel
// 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 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(150, 180), rand(190, 220), 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), 2); // einen zufälligen Farbwert definieren
$font = './waverf';
$y = 20 + rand(0, 10); // 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]) + 11; // Versucht aus den zuvor ermittelten Werten einen geeigneten Zeichenabstand zu ermitteln
}
$_SESSION['captcha'] = $captcha;
// Wir teilen dem Browser mit, dass er es hier mit einem JPEG-Bild zu tun hat.
header('Content-Type: image/jpeg', true);
imagejpeg($img); // Ausgabe des Bildes an den Browser
imagedestroy($img); // Freigeben von Speicher
?>
Kann mir jemand helfen?
Vielen Dank im Voraus!
MfG flogy92