PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Captcha mit G, D2 funktioniert nicht



Vampir87
30.07.2008, 18:14
Tach zusammen,

ich hab mir mal ein Skript aus einen Tutorial angeschaut und es versucht, nur leider funktioniert er nicht, kann mir jemand sagen wieso.

Ich hab die nötigen Bedingungen erfüllt und dennoch läuft es nicht bei mir.

http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

Hab schon den Autor des Tutorial angeschrieben und bisher keine Rückmeldung, vill könnt ihr mir helfen.

blackberry
30.07.2008, 18:35
Welchen Code davon hast du genommen.
Ist bei deiner PHP Installation php_gd2.dll eingestellt?

Vampir87
30.07.2008, 19:27
ich hab beides ausprobiert, dennoch läuft nichts davon.
Die GD ist eingeschaltet und ist sieht genau so aus, wie der Autor das
vorgegeben hat.

alles auf enabled, zumindest sehe ich das unter phpinfo() bei xampp.
Also alles auf Standard bei xampp.

blackberry
30.07.2008, 19:38
Probier mal das aus:


<?php
$img = imagecreate(300, 300);
/* der erste Aufruf von imagecolorallocate bestimmt die Hintergrundfarbe */
imagecolorallocate($img, 0, 0, 0);

imagestring($img, 1, 40, 40, 'www.FrEe-hAcK.com', imagecolorallocate($img, 255, 0, 0));

header('Content-Type: image/png');
imagepng($img, 'saved.png'); /* einmal als datei, einmal für den browser*/
imagepng($img);
imagedestroy($img);

?>

Vampir87
30.07.2008, 19:55
das geht ^^ schon mal ein Anfang, danke

blackberry
30.07.2008, 19:57
Dann liegt es wahrscheinlich daran, dass du die fonts die er benutzt nicht hast....

Vampir87
30.07.2008, 20:01
ich hab eigene benützt die im gleichen Verzeichnis
$_FONT[]='font.ttf';

Added after 8 minutes:

Ich hab jetzt einiges noch raus genommen, Schriftart, Schriftgröße und ermitteln von dem Abstand und nun sagt er mir das bei Zeile 71 was nicht stimmt.... ich könnt Code.


if(mysql_num_rows($result) > 0) {

$sql = 'UPDATE
`captcha`
SET
`captcha_time` = '.time().',
`captcha_captcha` = \''.$captcha.'\'
WHERE
`captcha_phpsessid` = \''.$_GET['PHPSESSID'].'\'
LIMIT
1';
mysql_query($sql, $link);

} else {

$sql = 'INSERT INTO
`captcha`
(
`captcha_phpsessid`,
`captcha_time`,
`captcha_captcha`
)
VALUES
(
\''.$_GET['PHPSESSID'].'\',
'.time().',
\''.$captcha.'\'
)';
mysql_query($sql, $link);
}

blackberry
30.07.2008, 20:30
Sieht auf den ersten Blick ok aus...
Trotzdem alle vom user kommenden datein ($_GET['PHPSESSID']) mit mysql_escape_string absichern, falls magic_quotes_gcp in der PHP.ini aus ist hast du da sonst ne SQL Injection drin :)

Vampir87
30.07.2008, 20:37
Ich hab jetzt alles noch mal aktualisiert und alles was mit Font oder anderen Schrift Eigenschaften zu tun hat raus genommen, jetzt nervt die header() Funktion.

Das mit der PHPSESSID versteh ich nicht wirklich.

Das hab ich bisher

<?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
$font="Arial";
// Liste aller verwendeten Fonts
// $FONTS[] = 'Adventure';
// $FONTS[] = './ttf/actionjf';
// $FONTS[] = './ttf/minyaf';

// 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 = 1; // x-Koordinate des ersten Zeichens, 10 px vom linken ";


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, 3 , 1 , 2, 3, $col, $font, "test");

$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

$link = mysql_connect('localhost', 'root');
mysql_select_db('tutorial', $link);

$sql = 'SELECT
*
FROM
`captcha`
WHERE
`captcha_phpsessid` = \''.$_GET['PHPSESSID'].'\'
LIMIT
1';

$result = mysql_query($sql, $link);

if(mysql_num_rows($result) > 0) {

$sql = 'UPDATE
`captcha`
SET
`captcha_time` = '.time().',
`captcha_captcha` = \''.$captcha.'\'
WHERE
`captcha_phpsessid` = \''.$_GET['PHPSESSID'].'\'
LIMIT
1';
mysql_query($sql, $link);

} else {

$sql = 'INSERT INTO
`captcha`
(
`captcha_phpsessid`,
`captcha_time`,
`captcha_captcha`
)
VALUES
(
\''.$_GET['PHPSESSID'].'\',
'.time().',
\''.$captcha.'\'
)';
mysql_query($sql, $link);
}

$sql = 'DELETE FROM
`captcha`
WHERE
`captcha_time` <= '.(time() - 300);

mysql_query($sql, $link);
mysql_close($link);
?>

Vampir87
12.08.2008, 17:44
Guten Tag zusammen,

ich reg mich jetzt wieder mal auf, wegen einen Captcha Code. Ich hab schon mehrere Codes versucht und ausprobiert, keiner davon funktioniert wirklich auf meinen xampp.
Alles ist aktiv was sein soll und so, es ist eine aktuelle Version, die ich erst vor paar Tagen heruntergeladen habe.
Ich hab mir jetzt nach sehr langer mühe mit Hilfe ein Code geschrieben, der mir einen Captcha erstellt und ausgiebt.
Was ich noch schaffen muss, ist halt die überprüfung.
Aber mal zurück zu meinen Problem,
wieso kann ich keinen dieser Codes ausführen?
http://selfphp.de/kochbuch/kochbuch.php?code=22
http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

Es findet keine Ausgabe statt. Was mach ich falsch.
Der Code den ich mit viel Hilfe geschrieben hab sieht so aus und der geht auch, bis auf die Überprüfung, die ich auch noch irgendwie machen muss.


<?php
$img = imagecreate(100, 40);

/* der erste Aufruf von imagecolorallocate bestimmt die Hintergrundfarbe */
imagecolorallocate($img, rand(20,140), rand(0,200), rand(40,60));
$ALFABET=array('Martin','Devil','291287','Freunde' ,'Bund','schade', 'Kopf',
'ABC','alarm','Hund','Katze','666','dick','danke', 'meins',
'Hallo','Maus','Lisa','Wolf','Sommer','Winter','Wi nd',
'Bruder','Schwester','Gothic','Girl','Boy','loser' ,
'Winner','Lepi','Computer','Ball','Schwein','Eins' ,
'Dusche','Haus','Klaus','Nick','Musik','Hitze',
'Bett','sexy','Augen','Bein','liegen','luft');
$code='';

$code=$ALFABET[rand(0, count($ALFABET) -1)];
$ch=$code;
imagestring($img, 3, 10, 13, $code,imagecolorallocate($img, 1, 0, 0));

header('Content-Type: image/png');

imagepng($img, 'captcha.png'); /* einmal als datei, einmal für den browser*/
imagepng($img);
imagedestroy($img);


?>