Home

Das Tippsforum

Du brauchst noch mehr Hilfe bei einem bestimmten Thema? Du hast einen unserer Tipps ausprobiert, aber es funktioniert immer noch nicht? Dann ist unser Tippsforum genau das richtige für dich.
Link zum Forum

Captcha mit PHP erstellen

Geschrieben in PHP Codeschnippsel am 28 Juli 2008

Jeder kennt ihn… Jedem nervt er… nur dem Admin nicht, denn so ein Sicherheitscode ist ziemlich nützlich, denn ohne ihn könnten Spambots die darauffolgende Seite x-mal aufrufen und viel Traffic verbrauchen.
Ihr könnt diesen Sicherheitscode z.B. bei Anmeldungen oder Kontaktformularen nutzen.

captcha.php:
Hier wird das Bild generiert

<?php
session_start();
$captcha = $_SESSION['captcha'];
//Folgende Farben ergeben folgenden Code, für die nächste Funktion: imagecolorallocate:, alternativ kann auch nach RGB gegooglet werden.
//schwarz: imagecolorallocate($bild,00,00,00)
//rot: imagecolorallocate($bild, 255,0,0)
//blau: imagecolorallocate($bild, 0,0,255)
//weiß: imagecolorallocate($bild, 255,255,255)
//gelb: imagecolorallocate($bild, 255,255,0)
//grün: imagecolorallocate($bild, 0,255,0)
$typ = 1;  //Wenn du ein Hintergrundbild statt einer Farbe willst, dann schreib da eine 1 hin, ansonsten eine 0
if($typ==0) {
$bild = imagecreatefrompng(’captcha.PNG’); //Bitte tragen Sie hier den Link zu dem Hintergrundbild ein.
$bildhoehe = imagesy($bild);
$bildbreite = imagesx($bild);
}
else {
$bildhoehe = 60;
$bildbreite = 200;
$bild = imagecreate($bildbreite, $bildhoehe);
imagecolorallocate($bild, 0,0,255); //Hintergrundfarbe
}
$text = imagecolorallocate($bild, 0, 0, 0); //Textfarbe
$font = 10;
$a = 20;
$x = floor($bildbreite/strlen($captcha))-5;
for($b=0; $b < strlen($captcha); $b++)
{
$c = mt_rand(2,$bildhoehe-20);
imagestring ($bild,$font,$a,$c, $captcha{$b}, $text);
$a = $a+$x;
}
if(function_exists(”imagegif”))
{
header(”Content-type: image/gif”);
imagegif($bild);
}
elseif (function_exists(”imagepng”))
{
header(”Content-type: image/png”);
imagepng($bild);
}
elseif (function_exists(”imagejpeg”))
{
header(”Content-type: image/jpeg”);
imagejpeg($bild, “”, 0.5);
}
?>

Nun kommen wir zur Eingabeaufforderung und Darstellung unseres Sicherheitscodes:

<?php
session_start();
function zufallscode()
{
mt_srand(crc32(microtime()));
$laenge = 5; //Hier kommt die Anzahl der Zeichen, die angezeigt werden sollen, rein
$zeichen = "abcdefghijklmnpqrstuvwxyz0123456789"; // Hier fügt ihr bitte alle Zeichen ein, die abgefragt werden sollen
$laenge_zeichen = strlen($zeichen)-1;
$code= "";
for($a=0; $a<$laenge; $a++) {
$code .= $zeichen{mt_rand(0, $laenge_zeichen)};
}
return $code;
}
$_SESSION['captcha'] = zufallscode();
?>
<form action=”abfrage.php” method=”post”>
<img src=”captcha.php” alt=”Captcha”>
<input type=”text” name=”captcha” maxlength=”10″><br />
<input type=”submit” value=”abfragen” /></form>

Nun kommen wir zur letzten Teil:
Die Abfrage, ob der Sicherheitscode auch richtig ausgefüllt wurde.
Den Teil kann man in eine extra Datei speichern und dann includen oder einfach in eine andere Datei kopieren:

abfrage.php:

<?php
session_start();
if($_POST['captcha'] == $_SESSION['captcha']) {
echo “Sicherheitscode stimmt”;
} else {
echo “Sie haben den Sicherheitscode nicht richtig eingegeben”;
}
?>