Captcha Tutorial - Einbindung
Autor
Flitze
Klicks 72037
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, Einbindung, Implementierung, Nutzen auf der Webseite
Klicks 72037
Rating für Captcha Tutorial
6.4 von 10
Bewertungen41
Stand
20.06.2010
6.4 von 10
Bewertungen41
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, Einbindung, Implementierung, Nutzen auf der Webseite
Breadcrumb:
Tutorials » Captcha Tutorial » Captcha Tutorial - Einbindung
4. Einbindung des Captchas
[ADSENSE_LINE]Sinnvollerweise muss beim Erzeugen des Formulars ein Wert erzeugt werden, der dann in die Grafik geschrieben wird und auch nach dem Absenden des Formulars noch verfügbar ist. Schließlich müssen wird die Benutzereingabe mit diesem Wert vergleichen. Um diesen Wert zu übergeben gibt es mehrere Möglichkeiten - übergeben per $_GET oder $_POST, Speichern in einer Session, Setzen eines Cookies oder Speichern in einer Datenbank.$_GET und $_POST würde ich nicht empfehlen, da der Wert dann irgendwo im Quelltext steht und der Bot unser Captcha einfach umgehen kann.
Von den anderen 3 Möglichkeiten würde ich keine favorisieren, benutze aber selbst die Session Methode, da sie meiner Meinung nach am einfachsten zu implementieren ist. Bei den Cookies muss auf wegen des Headers aufgepasst werden und ein Eintrag in eine Datenbank + dessen auslesen erfordert mehr Code als das einfache Speichern in einer Session.
Hier mal ein Beispielformular:
PHP:
<?php
error_reporting(E_ALL);
session_start();
// Werte initialisieren
if(!isset($_SESSION['Name']))
$_SESSION['Name']=isset($_POST['Name'])?$_POST['Name']:'';
if(!isset($_SESSION['Email']))
$_SESSION['Email']=isset($_POST['Email'])?$_POST['Email']:'';
if(!isset($_SESSION['Captcha']))
$_SESSION['Captcha']=rand(5,15);
if(isset($_POST['submit']) AND $_POST['submit'] == 'Testen'){
$errors = array();
if(!isset($_SESSION['Name'], $_SESSION['Email'], $_SESSION['Captcha'], $_POST['Captcha']))
$errors[] = "Nicht alle Werte vorhanden!";
else{
if($_SESSION['Captcha'] != $_POST['Captcha'])
$errors[] = "Falscher Sicherheitscode!";
}
if(count($errors)){
echo "Folgende Fehler traten auf: <br />\n";
foreach($errors as $error)
echo $error."\n<br />\n";
}
else{
echo "Richtiger Code!<br />\n";
echo "Daten:<br />\n";
echo "<br />\n";
echo "Name -> ".$_SESSION['Name']."<br />\n";
echo "Email -> ".$_SESSION['Email']."<br />\n";
echo "Captcha -> ".$_SESSION['Captcha']."<br />\n";
echo "<br />\n";
// Daten löschen
unset($_SESSION['Name']);
unset($_SESSION['Email']);
unset($_SESSION['Captcha']);
}
}
else{
echo "<form ".
" action = formular.php".
" method = post>";
echo "Name:".
"<input type=\"text\" name=\"Name\" value=\"".$_SESSION['Name']."\" />\n";
echo "Email:".
"<input type=\"text\" name=\"Email\" value=\"".$_SESSION['Email']."\" />\n";
echo "Sicherheitscode:".
"<img src=\"captcha.php\" />\n".
"<input type=\"text\" name=\"Captcha\" />\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Testen\" />\n";
echo "</form>\n";
}
?>
Wie man sieht binde ich das Captcha über
PHP:
<?php
echo "Sicherheitscode:".
"<img src=\"captcha.php\" />\n".
"<input type=\"text\" name=\"Captcha\" />\n";
?>
ein. Deshalb muss ich meine Captcha-Klasse in der Datei captcha.php speichern. Da ich auf einen in einer Session gespeicherten Wert zugreife, muss ich auch in captcha.php eine Session starten.
PHP:
<?php
error_reporting(E_ALL);
session_start();
class Captcha {
// siehe oben
}
$Sign = new Captcha(200,100);
$Sign->setBGColor(231,231,231);
for($i=0; $i<5; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$Sign->setElementAttributes($r,$g,$b,1,5);
$Sign->createLines();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$Sign->setElementAttributes($r,$g,$b,1,rand(10,30));
$Sign->createCircles();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$Sign->setElementAttributes($r,$g,$b,1,rand(10,30));
$Sign->createStars();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$Sign->setElementAttributes($r,$g,$b,1,rand(10,30));
$Sign->createRectangles();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$Sign->setElementAttributes($r,$g,$b,1,rand(10,30));
$Sign->createTriangle();
}
$Sign->setFontColor(30,30,30);
$Sign->createText(rand(100000,999999));
$Sign->setFontColor(0,0,0);
// Rechenaufgabe mit dem Wert aus der Session erzeugen
$Sign->createArithmetic($_SESSION['Captcha']);
$Sign->createCaptcha();
?>
So das wär’s
Zurück zur vorigen Seite:
Captcha Tutorial - Störelemente Bewerten