Seite 1 von 1

Captcha für Kontaktformular

Verfasst: Fr 16. Jan 2009, 12:35
von Vetinari
hallo,

habe mir mal alles unter dem suchbegriff "captcha" und 4.6x durchgelesen und teilweise auch ausprobiert.
aber irgendwie funktionierte es nicht. nun will ich mir selbst eine lösung stricken - nach dem muster: eigenes modul ruft externe captcha.php auf, welche sich in einem eigenen unterordner unter "cms" befindet. dort liegen auch das entsprehende bild und die schriftart für das captcha.
außerhalb von contenido funktioniert auch alles bestens, aber im cms wird einfach kein bild aufgebaut.

die zentrale funktion der captcha.php ist ja diese hier:

Code: Alles auswählen

   header('Content-type: image/png'); 
   $img = ImageCreateFromPNG('captcha.png'); //Backgroundimage 
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe 
   $ttf = $_SERVER['DOCUMENT_ROOT']."/captcha/XFILES.TTF"; //Schriftart 
   $ttfsize = 25; //Schriftgrösse 
   $angle = rand(0,5); 
   $t_x = rand(5,30); 
   $t_y = 35; 
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text); 
   imagepng($img); 
   imagedestroy($img); 
wenn ich die seite aufrufe, sehe ich an stelle des bildes einen kleinen senkrechten strich, aber das bild wird nicht aufgebaut.
wo liegt mein fehler?

gruss, martin

Re: Captcha für Kontaktformular

Verfasst: Di 14. Apr 2009, 11:15
von nicnac
hi,
hast Du eine Lösung gefunden?
Würde mich auch interessieren...
Wenn du keine fehlermeldung erhälst --> liegt es vielleicht daran, dass Du keine Angaben für die Bildgröße machst im Modul, also Höhe und Breite?
Der IE mag das ja gar nicht und stellt nix dar.

Re: Captcha für Kontaktformular

Verfasst: Di 14. Apr 2009, 12:18
von Vetinari
hi nicnac,

ich habe folgende lösung mit einer externen datei captcha.php. diese liegt in einem ordner 'captcha' direkt unter 'cms' zusammen mit dem hintergrundbild und der schriftart (getestet in firefox 2 + 3 und ie 7):

1. aufruf:

Code: Alles auswählen

<form name=\"formular\" method=\"post\" action=\"captcha/captcha.php?doit=check\">
...
<img src=\"captcha/captcha.php?doit=gen\" border=\"1\" alt=\"Sicherheitscode\" title=\"Sicherheitscode\" />
...
2. captcha.php:

Code: Alles auswählen

<?php

/*-------------------------------------------------------------- 
Artikel: Sicherheitsfeld mit PHP, GDlib und Freetype ----
Internet: www.contentcharge.de , Mail: info@contentcharge.de
Disclaimer: Fuer den Einsatz dieses Scriptes und
evtl. daraus resultierenden Folgen uebernehmen wir 
keine Haftung.

Article: Securityfield (captcha) with PHP, GDlib and Freetype
Contact: www.contentcharge.de, Mail: info@contentcharge.de
Disclaimer: We are not responsible for the use of this ressource
in part or whole. So use at your own risk.

Copyright 2004 Contentcharge-Media, Christian Lehmann
---------------------------------------------------------------*/

$wert = Array('hier habe ich einfach 10 vorgegebene buchstaben-zahlen-kombination eingegeben im stil von: '123X45', da eine automatische lösung irgendwie nicht funktionierte');

if($_GET['doit'] == "check") {
    
 if(in_array($_POST['Security'], $wert)) {
        
  if($_POST['Speichern']) {

   mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom);

 exit; }
 
 }
 
} elseif ($_GET['doit'] == "gen") {
    header('Content-type: image/png');
    $img = ImageCreateFromPNG('security_background.png');
    $text = $wert[rand(0,count($wert)-1)];
    $color = ImageColorAllocate($img, 0, 0, 0);
    $ttf = 'XFILES.TTF';
    $ttfsize = 25; 
    $angle = rand(0,5); 
    $text_x = rand(5,30);
    $text_y = 35;
    imagettftext($img, $ttfsize, $angle, $text_x, $text_y, $color, $ttf, $text);
    imagepng($img);
    imagedestroy($img);
}

?>
gruss, martin

Re: Captcha für Kontaktformular

Verfasst: Di 14. Apr 2009, 12:41
von nicnac
hey, super.
Danke.
Und was war mit dem geschilderten Problem?

Re: Captcha für Kontaktformular

Verfasst: Di 14. Apr 2009, 12:49
von Vetinari
hmm, das hatte ich zwischenzeitlich auch nochmal, aber das lag nur daran, dass der code irgendwo einen fehler hatte - wo weiss ich nicht mehr :lol:

martin