Hallo Leute!
Als erstes vornweg,dies ist mein aller erstes Tut überhaupt und ich hoffe ich schreibe es gut! Es wird dafür sicher viele andere und auch bessere Möglichkeiten geben dieses auszubauen. Ich habe mir hier ein ganz einfaches und simples Captcha geschrieben in der Art einer Gleichung. Ich eine Gleichung für besser,weil ein einfacher Zufallscode vieleicht doch zu einfach ist.
Spambots versuchen alle Felder in einem Fprmular auszufüllen und das auch ziemlich schnell (Ich glaube in Millisekunden,bin mir aber nicht sicher)!
In Form einer Gleichung haben es diese Bots aber schwer denn man braucht Zeit um diese auszurechnen und dann auch ein zu tippen,zuviel Zeit für einen Bot!
Genug der langen Rede fangen wir an!
Also als erstes legen wir uns mal zwei Dateien an, die eine nennen wir captcha.php und die andere formular.php (natürlich optional)!
So nachdem wir das gemacht haben erstellen wir uns in einem Grafik Programm ein png Bild (natürlich gehen auch andere Formate) und nennen dieses captcha_bg.png (optional)! Und natürlich eine Schriftdatei müssen wir uns in dem Verzeichnis wo wir unsere angelegten Dateien und das Bild rein gespeichert haben auch noch rein speichern. Dazu könnt einfach aus dem dem Ordner eures Systems eine Datei in euer Verzeichnis rein kopieren, ich habe mich für tahoma.ttf entschieden! Ihr könnt euch auch was anderes suchen,aber beachtet bitte nicht alle Schriftformate unterstützen Zeichen wie + oder =. Also testet das in einem Grafikprogramm vorher einfach aus ob das in der Schriftart unterstützt wird!
So und nun kommen wir zum Code,denn ich denke an Vorinfos reicht das aus!
Als erstes schreiben wir uns eine Funktion die uns einen zufälligen Wert generiert!
Funtion:
Ich nenne diese Funktion einfach generate_gleichung!
Den Parameter $legth1 = 3 sagt das ein Zufallswert maximal 3 Zeichen haben darf!
Dann benutze ich die Funktion
PHP: array_merge - Manual
und setze in der php funktion PHP: range - Manual
die Art der Zeichen fest die Vorkommen darf,da sies eine Gleichung ist beschränken wir uns auf Zahlen von 1 - 9. Natürlich kann man dann auch tief in die Mathematick gehen und x Gleichungen oder so erstellen,aber macht das wirklich Sinn?
Nachdem wird das gemacht haben nutzen wir die php funktion
PHP: shuffle - Manual
Anschlisend generieren bzw. bilden wir uns dann unseren String dazu nutzen wir die Funktionen
PHP: implode - Manual
PHP: array_slice - Manual
So damit haben wir die Funktion fertig! Nun wollen dazu kommen zwei Gleichungsteile zu erstelle mit denen dann natürlich auch ein Ergebnis erstellt werden kann was anschliesend dann den Code ergibt der eingegeben werden muss!
Code um die Gleichungsteile zu erstellen!
Wie ihr seht nutzen wir auch da wieder eine Funtion von php nämlich
PHP: rand - Manual
Wir erstellen also zwei Variablen eine $teil1 und eine $teil2! Bei diesen Variablen bringen wir auch unsere Funktion generate_gleichung zum Einsatz! Mit der Funktion rand(2,3) bilden wir dann einen String der je nach Zufall 2 oder auch 3 Zaichen haben kann!
So nun haben wir also auch unsere Gleichungsteile generiert und können nun eine Aufgabe erstellen die die Gleichung bildet!
Gleichungs Code:
Das Ergebniss der Gleichung speichern wir in einer SESSION Variablen damit arbeiten wir dann auch im anschliesenden Formular! Wie ihr die SESSION Variable nennt und bezeichnet ist völlig Wurscht!
So nun haben wir den Teil der Gleichung geschafft und das Ergebnis steht!
Kommen wir nun zum Teil des Bildes denn wir wollen das ja dann grafisch darstellen. Nun gut dann los fangen wir an!
Einen Strin ertsellen der die Gleichung enthält und im Bild eingesetzt wird!
Hier machen wir nichts besonderes die Gleichung wird eigentlich nur in einer Variablen $string gespeichert!
Nun kommen wir dazu das png Bild mit PHP zu erzeugen!
Dazu nutzen wir die php Funktion
PHP: imagecreatefrompng - Manual
und speichern das Ergebnis in der Variablen $png
Als nächstes legen wir fest wie unser Imagestring (unsere Gleichung) ausschauen soll!
Hier nutzen wir die Funktion
PHP: imagecolorallocate - Manual
Wir müssen hier nun wieder die Variable $png zum Einsatz bringen da ja in der Variablen unser erzeugtes png Bild steckt und auf dieses soll ja unser Gleichungsstring gelegt werden!
Normal werden ja Farbwerte Hexadezimal geschrieben nun in PHP geht das nicht da wird der Hexawert in drei Teilen Dezimal dargestellt!
Der Rot Heawert sieht so aus ff0000 und in der Funtion so dargestellt!
255,0,0
An diese Werte kommt ihr einfach über euren System Rechner. Aller 2 Hexacode stellen wird ein Dezimalwert erstellt! Ihr habt in euren Sytem Rechnung die Funktion Hexateile in Dezimalteile umzurechnen!
So und nun legen wir unseren Gleichungsstring auf das png Bild!
Hier nutzen wir die Funktion
PHP: imagettftext - Manual
Auch hier kommt wieder die Variable also unser erzeugtes png Bild zum Einsatz! In dieser Funtion können wir nun die Positionierung unseres Gleichungsstrings festlegen und einstellen!
Ich will die einzelnen Einstellungsparameter mal kurz darstellen!
15 = Schriftgröße des Strings
3 = Schräglage des Strings (ist die Null liegt er Waagerecht)
10 = Textausrichtung links (left)
30 = Textausrichtung in der Höhe (top)
So nun sind wir damit fertig und müssen nun nur noch unser Bild ausgeben! Dazu nutzen wir noch den header Content Type!
Dazu nutzen wir die Funktionen
PHP: imagepng - Manual
PHP: imagedestroy - Manual
So nun das war es und das Bild und der Code für ein Captcha ist fertig. Nun müssen wir den nur noch in einem Formular einbinden und dazu kommen wir jetzt!
Hier der Code der formular.php
Als erstes müssen wir die Datei mit session_start(); beginnen weil ja unser Ergebniscode in einer Session Variablen gespeichert ist und um den wieder verwenden zu können müssen eine session starten!
Auf den Formulatteil speziell möchte ich jetzt nicht eingehen sondern nur das was das Captcha angeht!
In diesem Block hier!
machen wir nun einen Vergleich der aussagt wenn unser Ergbnis aus der Gleichung nicht mit dem eingegeben im Textfeld übereinstimmt dann gib eine Warnung aus oder wenn es passt dann schicke ab und letie weiter!
So zum Abschluss seht ihr noch wie ihr das Captcha einbinden könnt!
Ihr legt also in eurem Formular ein Feld fest in das ihr dann das Ergebnis eingebt und ihr seht auch das in dem Html üblichen Tag für ein Bild nämlich <img src=""> in dem src Teil die captcha.php drin liegt!
Warum eine Datei in einm img einfügen? Nun ja in dieser PHP Datei ist ja ein Bild erstellt also sie stellt auch nur ein Bild dar,darum können wir diese auch da in den src Teil einbinden!
So das wars. Ich hoffel euch ein interessantes Tutorial geboten zu haben und das es euch ein wenig hilft!
mfg der Litter
Als erstes vornweg,dies ist mein aller erstes Tut überhaupt und ich hoffe ich schreibe es gut! Es wird dafür sicher viele andere und auch bessere Möglichkeiten geben dieses auszubauen. Ich habe mir hier ein ganz einfaches und simples Captcha geschrieben in der Art einer Gleichung. Ich eine Gleichung für besser,weil ein einfacher Zufallscode vieleicht doch zu einfach ist.
Spambots versuchen alle Felder in einem Fprmular auszufüllen und das auch ziemlich schnell (Ich glaube in Millisekunden,bin mir aber nicht sicher)!
In Form einer Gleichung haben es diese Bots aber schwer denn man braucht Zeit um diese auszurechnen und dann auch ein zu tippen,zuviel Zeit für einen Bot!
Genug der langen Rede fangen wir an!
Also als erstes legen wir uns mal zwei Dateien an, die eine nennen wir captcha.php und die andere formular.php (natürlich optional)!
So nachdem wir das gemacht haben erstellen wir uns in einem Grafik Programm ein png Bild (natürlich gehen auch andere Formate) und nennen dieses captcha_bg.png (optional)! Und natürlich eine Schriftdatei müssen wir uns in dem Verzeichnis wo wir unsere angelegten Dateien und das Bild rein gespeichert haben auch noch rein speichern. Dazu könnt einfach aus dem dem Ordner eures Systems eine Datei in euer Verzeichnis rein kopieren, ich habe mich für tahoma.ttf entschieden! Ihr könnt euch auch was anderes suchen,aber beachtet bitte nicht alle Schriftformate unterstützen Zeichen wie + oder =. Also testet das in einem Grafikprogramm vorher einfach aus ob das in der Schriftart unterstützt wird!
So und nun kommen wir zum Code,denn ich denke an Vorinfos reicht das aus!
Als erstes schreiben wir uns eine Funktion die uns einen zufälligen Wert generiert!
Funtion:
PHP-Code:
//Wichtig denn der Ergebnis wert wird anschliesend in einer Session Var
//gespeichert
session_start();
//Funktion um Gleichungsteile zu erstellen
function generate_gleichung($length1 = 3)
{
$char1 = array_merge(
range(1, 9)//Nur Zahlen 1-9 also keine 0
);
shuffle($char1);
return implode('', array_slice($char1, 0, $length1));
}
Den Parameter $legth1 = 3 sagt das ein Zufallswert maximal 3 Zeichen haben darf!
Dann benutze ich die Funktion
PHP: array_merge - Manual
und setze in der php funktion PHP: range - Manual
die Art der Zeichen fest die Vorkommen darf,da sies eine Gleichung ist beschränken wir uns auf Zahlen von 1 - 9. Natürlich kann man dann auch tief in die Mathematick gehen und x Gleichungen oder so erstellen,aber macht das wirklich Sinn?
Nachdem wird das gemacht haben nutzen wir die php funktion
PHP: shuffle - Manual
Anschlisend generieren bzw. bilden wir uns dann unseren String dazu nutzen wir die Funktionen
PHP: implode - Manual
PHP: array_slice - Manual
So damit haben wir die Funktion fertig! Nun wollen dazu kommen zwei Gleichungsteile zu erstelle mit denen dann natürlich auch ein Ergebnis erstellt werden kann was anschliesend dann den Code ergibt der eingegeben werden muss!
Code um die Gleichungsteile zu erstellen!
PHP-Code:
//Ersten Gleichungsteil erstellen
$teil1 = generate_gleichung(rand(2,3));//Erster Gleichungsteil min 2 Zeichen max. 3 Zeichen
//Ersten Gleichungsteil erstellen
$teil2 = generate_gleichung(rand(2,3));//Erster Gleichungsteil min 2 Zeichen max. 3 Zeichen
PHP: rand - Manual
Wir erstellen also zwei Variablen eine $teil1 und eine $teil2! Bei diesen Variablen bringen wir auch unsere Funktion generate_gleichung zum Einsatz! Mit der Funktion rand(2,3) bilden wir dann einen String der je nach Zufall 2 oder auch 3 Zaichen haben kann!
So nun haben wir also auch unsere Gleichungsteile generiert und können nun eine Aufgabe erstellen die die Gleichung bildet!
Gleichungs Code:
PHP-Code:
//Ergebnis in Session speichern
$_SESSION['resultat'] = $teil1 + $teil2;//Ergebnis der Gleichungsteile errechnen
So nun haben wir den Teil der Gleichung geschafft und das Ergebnis steht!
Kommen wir nun zum Teil des Bildes denn wir wollen das ja dann grafisch darstellen. Nun gut dann los fangen wir an!
Einen Strin ertsellen der die Gleichung enthält und im Bild eingesetzt wird!
PHP-Code:
//string fürs Bild
$string = $teil1." + ".$teil2." =";
Nun kommen wir dazu das png Bild mit PHP zu erzeugen!
PHP-Code:
//Png Captchabild darstellen
$png = imagecreatefrompng("captcha_bg.png");
PHP: imagecreatefrompng - Manual
und speichern das Ergebnis in der Variablen $png
Als nächstes legen wir fest wie unser Imagestring (unsere Gleichung) ausschauen soll!
PHP-Code:
//Hier den Gleichungsstring formatieren
$Textfarbe = imagecolorallocate($png, 255, 0, 0);
PHP: imagecolorallocate - Manual
Wir müssen hier nun wieder die Variable $png zum Einsatz bringen da ja in der Variablen unser erzeugtes png Bild steckt und auf dieses soll ja unser Gleichungsstring gelegt werden!
Normal werden ja Farbwerte Hexadezimal geschrieben nun in PHP geht das nicht da wird der Hexawert in drei Teilen Dezimal dargestellt!
Der Rot Heawert sieht so aus ff0000 und in der Funtion so dargestellt!
255,0,0
An diese Werte kommt ihr einfach über euren System Rechner. Aller 2 Hexacode stellen wird ein Dezimalwert erstellt! Ihr habt in euren Sytem Rechnung die Funktion Hexateile in Dezimalteile umzurechnen!
So und nun legen wir unseren Gleichungsstring auf das png Bild!
PHP-Code:
//Hier legen wir den Img String auf unser Bild
imagettftext($png, 15, 3, 10, 30, $Textfarbe, "tahoma.ttf", $string);
PHP: imagettftext - Manual
Auch hier kommt wieder die Variable also unser erzeugtes png Bild zum Einsatz! In dieser Funtion können wir nun die Positionierung unseres Gleichungsstrings festlegen und einstellen!
Ich will die einzelnen Einstellungsparameter mal kurz darstellen!
15 = Schriftgröße des Strings
3 = Schräglage des Strings (ist die Null liegt er Waagerecht)
10 = Textausrichtung links (left)
30 = Textausrichtung in der Höhe (top)
So nun sind wir damit fertig und müssen nun nur noch unser Bild ausgeben! Dazu nutzen wir noch den header Content Type!
PHP-Code:
header("Content-type: image/png");
imagepng($png);
imagedestroy($png);
PHP: imagepng - Manual
PHP: imagedestroy - Manual
So nun das war es und das Bild und der Code für ein Captcha ist fertig. Nun müssen wir den nur noch in einem Formular einbinden und dazu kommen wir jetzt!
Hier der Code der formular.php
PHP-Code:
<?php
error_reporting(E_ALL);
session_start();
if(isset($_POST['send']))
{
if($_SESSION['resultat'] != $_POST['code'])
{
echo "Der Code ist nicht korrekt,bitte noch mal!<br>
<a href=\"formular.php\">Zurück</a>";
exit();
}
else
{
header("Location: formular.php");
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<img src="captcha.php" border="0" title="Captcha"><br /><br />
Bitte das Gleichungsergebnis in das Feld eintragen!<br />
<input type="text" name="code" style="width: 50;">
<input type="submit" name="send" value="Checken">
</form>
Auf den Formulatteil speziell möchte ich jetzt nicht eingehen sondern nur das was das Captcha angeht!
In diesem Block hier!
PHP-Code:
if($_SESSION['resultat'] != $_POST['code'])
{
echo "Der Code ist nicht korrekt,bitte noch mal!<br>
<a href=\"formular.php\">Zurück</a>";
exit();
}
else
{
header("Location: formular.php");
}
So zum Abschluss seht ihr noch wie ihr das Captcha einbinden könnt!
PHP-Code:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<img src="captcha.php" border="0" title="Captcha"><br /><br />
Bitte das Gleichungsergebnis in das Feld eintragen!<br />
<input type="text" name="code" style="width: 50;">
<input type="submit" name="send" value="Checken">
</form>
Warum eine Datei in einm img einfügen? Nun ja in dieser PHP Datei ist ja ein Bild erstellt also sie stellt auch nur ein Bild dar,darum können wir diese auch da in den src Teil einbinden!
So das wars. Ich hoffel euch ein interessantes Tutorial geboten zu haben und das es euch ein wenig hilft!
mfg der Litter
Kommentar