Tutorials von Thomas Frei-Herrmann
Formular - mit eigenem Captcha-Code - nur für fortgeschrittene Benutzer geeignet
Dies ist eine Variante von diesem Formular. Guckt bitte dort für die genaue Einbauanleitung. Hier beschreibe ich nur den Captcha-Code.
Ich erhalte eine Mail und nach dem Senden wird auf diese Seite zurückgekehrt. Lasst “Kopie an Benutzer” angehakt um die gleiche Mail selbst zu erhalten. Ihr dürft gerne testen - ich werde allerdings nicht antworten.
Bitte guckt Euch zunächst die Beschreibung der Skripte hier an.
Auf dieser Seite könnt Ihr Euch ein Hintergrundbild (captcha.PNG) für das Captcha downloaden.
Auf dieser Seite die Datei XFILES.TTF für die hier angewendete Schrift für das Captcha.
Bitte erstellt Euch einen Ordner, den Ihr
captcha
nennt. In diesen Ordner gehören dann folgende Dateien:
Kopiert dann diesen gesamten Ordner “captcha” in Euer Stammverzeichnis (Root) auf Euren Server, also dort, wo sich auch Eure Startseite, die “index.html” befindet.
Kopiert Euch das PHP-Skript für die Erstellung des Captcha-Codes und speichert es ab als
captcha.php
Hier müsst Ihr die Pfadangebe zu Eurem Verzeichnis “captcha” noch anpassen, damit die Schrift auch gefunden werden kann. Auf meiner Seite liegt dieses Verzeichnis von der “Root” also hier:
/nof/Formular-Captcha-Anzeige-Text/captcha/
<?php
session_start();
unset($_SESSION['captcha_spam']);
function randomString($len) {
function make_seed(){
list($usec , $sec) = explode (' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
//Der String $possible enthält alle Zeichen, die verwendet werden sollen
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text = randomString(5); //Die Zahl bestimmt die Anzahl stellen
$_SESSION['captcha_spam'] = $text;
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
$ttf = $_SERVER['DOCUMENT_ROOT']."/nof/Formular-Captcha-Anzeige-Text/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);
?>
Nun zieht Ihr Euch, an der Stelle an der das Captcha erscheinen soll, im Formular ein Textfeld auf und fügt die Verlinkung zu der Datei “captcha.php” in den HTML-Code Editor dieses Textfeldes ein. Bei mir sieht das so wie unten aus, da sich mein Formular auf meiner Startseite (“Home”) befindet nur mit einem Punkt ./
Von einer Unterseite müsste die relative Pfadangabe zwei Punkte haben ../
<img src="./captcha/captcha.php" border="0" title="Sicherheitscode">
Darunter zieht Ihr Euch ein Formular-Eingabefeld auf, dass den Namen und die ID “sicherheitscode” tragen muss, damit es im Skript unten auch erkannt wird.
Diese Seite mit dem Formular unter > “Bearbeiten” > “Benutzerdefinierte Namen” auf die Dateierweiterung .php stellen.
Das Mail-Skript (unten) mit Euren Daten ändern und in die Layout-HTML dieser gleichen Seite kopieren.
Hier haben meine Formular-Felder die Feldnamen: Name, Ort, E-Mail und Nachricht und für die Checkbox als Feldname “UserSend”
Die Teile des Skriptes, die den Captcha-Code betreffen, sind hier gelb markiert.
Layout markieren > Fenster “Layout-Eigenschaften” > “Beginn der Seite” (keine Leerzeile oben lassen) einfügen
<?php
// SESSION auf dieser Seite öffnen - solange das auf der gleichen Seite stattfindet, könnte man auch eine einfache Variable nehmen.
@session_start();
$timenow=time();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
if (isset($_POST['action']) && ($_POST['action']=='send')) {
if (($timenow-$_POST['zeit'])<=10) { // 10, 20, .... - sind die Sekunden für eine einfache Spam-Kontrolle
/* SPAM ANGRIFF - nichts wird gesendet und es wird auf diese Formular-Seite zurückgekehrt, falls keine 10 Sekunden gewartet */
} else {
// SESSION-Variable zur Anzeige, wenn das Formular gesendet wurde
$_SESSION['AnzeigeAufSeite']="JA";
$admin = 'Webmaster@DeineDoamin.de';
$useremail = $_POST['E-Mail'];
// diese Zeile unten mit Deiner Message beschreiben, die in der Betreff-Zeile der Mail erscheinen soll.
$Msg = "Mail von meiner Formular-Seite";
// diese Zeile unten mit Der Message für die Kopie an User beschreiben, die in der Betreff-Zeile der Mail erscheinen soll
$UserMsg = "Guten Tag, dies ist eine Kopie Deiner Nachricht an Tommy";
// Inhalt der Mail als Variable “UserData”, der Punkt verbindet die Zeilen zu einer Variable, die als Inhalt der Mail gesendet wird.
$UserData = "Name: " . $_POST["Name"] . "\r\n";
$UserData .= "Ort: " . $_POST["Ort"] . "\r\n";
$UserData .= "e-Mail: " . $_POST["E-Mail"] . "\r\n";
$UserData .= "Nachricht: " . $_POST["Nachricht"] . "\r\n\r\n";
$UserData .= "Vielen Dank für diese Nachricht, ich werde nicht antworten";
// Mail an Absender senden, wenn dieser das angehakt hatte (bei "From:" noch Deine korrekte Mail-Adresse als Absender eintragen)
if (isset($_POST['UserSend']) && ($_POST['UserSend']=='on'))
{
mail($useremail, $UserMsg, $UserData, "From:Webmaster@DeineDomain.de");
}
// Mail an Webmaster senden
mail($admin, $Msg, $UserData, "From:$useremail");
// hier wird auf die Seite weitergeleitet, auf der dieses Formular eingebaut ist - bei mir also auf die gleiche Seite “index.php”
@header("location: ./index.php");
exit;
}
}
}
?>