Home » Captcha mit PHP erstellen

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";
}
?>

Verwandte Artikel

3 Kommentare to 'Captcha mit PHP erstellen'

Kommentare abonnieren per RSS or TrackBack to 'Captcha mit PHP erstellen'.

  1. Tim said,

    on August 5th, 2008 at 01:31

    Danke für das kleine Tutorial. Ist ja eigentlich ganz einfach seinen eigenen Captcha zu erstellen.

    Ich ich dachte immer es macht so viel Arbeit

  2. Webagentur said,

    on August 20th, 2008 at 12:06

    Finde ich auch … eigentlich sehr schön erklärt, nur leider wird bei mir noch nicht das Captcha angezeigt.

  3. admin said,

    on August 27th, 2008 at 12:21

    Du kannst dich ja mal im Forum melden. Eigentlich sollte der Codeschnipsel funktionieren

Kommentieren

XHTML: Du kannst folgende Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">