Captcha.php
Open een texteditor en sla een bestand met de volgende PHP code op als captcha.php:
<?php
// het random nr. aanmaken en gecodeerd opslaan in php sessie
session_start();
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
$im = imagecreatetruecolor(100, 38);
// Kleurenbepaling
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
imagefilledrectangle($im, 0, 0, 200, 35, $black);
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = 'font.ttf';
// schaduw toevoegen
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
// randomnr. toevoegen
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// voorkomen dat afbeelding ge-cached wordt
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// plaatje verzenden naar browser
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
Dit PHP script vormt de basis voor de captcha. Het creëert dmv een aantal GD library functies een plaatje met daarin een willekeurig vier-cijferig getal. Tevens wordt een php sessie gestart waarin het captcha getal na md5 codering wordt opgeslagen. Je kunt de hier gebruikte GD library functies terugvinden op php.net. Mocht het een spambot ooit lukken deze captcha op te lossen dan kun je bijv. de imagefilter() functie gebruiken voor verdere maskering.
Html formulier met captcha.php plaatje.
<html>
<head>
<title>html formulier met php captcha</title>
</head>
<body>
<form method="post" action="write.php">
<input class="input" type="text" name="norobot">
<img src="captcha.php"><input type="submit" value="Toevoegen">
</form>
</body>
</html>
Bovenstaande html code dien je op te slaan als apart html bestand, bijvoorbeeld met de naam captcha.html. Het moet in dezelfde directory staan als captcha.php.
Dit voorbeeld formulier bevat alleen het veld dat je gebruikt voor de captcha test. Je kunt dit aanvullen met formulier velden die je nodig hebt voor bijv. een gastenboek script, forum of mailform. De andere gegevens worden alleen verwerkt als de bezoeker erin slaagt de captcha op te lossen (en dus geen spambot is).
Bovenstaand HTML formulier verwijst naar een PHP script dat de gegevens verwerkt (in dit voorbeeld write.php genoemd). Een voorbeeld code voor dit php script vind je hieronder
Voorbeeld PHP CAPTCHA verwerking-script
De volgende PHP code vergelijkt de door de bezoeker ingevulde captcha gegevens met de variabele die tijdens de creatie van het captcha plaatje in de php sessie is opgeslagen (zie captcha.php). Indien ze gelijk zijn is de captcha geslaagd.
Deze php code sla je op in een apart bestand dat je write.php noemt.
<?php
session_start();
if (md5($_POST['norobot']) == $_SESSION['randomnr2'])
{ // plaats hier php code voor geslaagde captcha
echo "goedzo - u bent geen robot";
}
else
{ // plaats hier php code voor gefaalde captcha
echo "foei robot, foei foei foei!";
}
?>
Vergeet niet het font bestand (font.ttf) op te slaan in dezelfde directory als de andere bestanden. Zonder font bestand werkt de captcha niet.
Wil je weten hoe deze captcha eruit ziet? - zie het commentaar formulier onderaan deze pagina voor een voorbeeld.

