Scripts
Som captcha
Hier is mijn bijdrage voor een captcha script die niet zo vervelend is dat je waardevolle bezoekers een code moeten overtypen. Tevens leren ze ervan om uit het hoofd te leren rekenen ;-) Het script maakt een plaatje aan en slaat het antwoord in een sessie op en dit kun je controleren door een POST-waarde hiermee te vergelijken. Klinkt lastig? Bekijk dan de twee scripts maar eens, voorzien van commentaar zodat het makkelijk te begrijpen is. Enjoy :-) Voorbeeld: http://www.globallife.nl/captcha
captcha.php
<?php
// Start de sessie om de som te onthouden
session_start();
// Array met mogelijke getallen in tekstformaat
$aGetallen = array('één', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'dertien', 'veertien', 'vijftien');
// Aanmaken van de getallen en bekijken of het een mogelijke aftreksom is, anders wordt het een optelsom
$iGetal_1 = rand(1, count($aGetallen));
$iGetal_2 = rand(1, count($aGetallen));
$bOptelsom = ($iGetal_1 < $iGetal_2 || $iGetal_1 - $iGetal_2 < 1) ? true : false;
// Bekijken of het een optelsom of aftreksom is en vervolgens opslaan in een sessie
$_SESSION['som_antwoord'] = ($bOptelsom) ? $iGetal_1 + $iGetal_2 : $iGetal_1 - $iGetal_2;
// De string die uiteindelijk in het plaatje komt te staan
$sSom = $aGetallen[$iGetal_1 - 1].' '.(($bOptelsom) ? 'plus' : 'min').' '.$aGetallen[$iGetal_2 - 1];
// Maak het plaatje aan, met als breedte (aantal letters van de string * 9)px om ervoor te zorgen dat de tekst precies past, hoogte is 15px
$plaatje = imagecreate(strlen($sSom) * 9, 15);
// Achtergrondkleur en tekstkleur instellen
$achtergrond = imagecolorallocate($plaatje, 255, 255, 255);
$tekstkleur = imagecolorallocate($plaatje, 0, 0, 0);
// Schrijf de tekst in het plaatje
imagestring($plaatje, 5, 0, 0, $sSom, $tekstkleur);
// De browser het plaatje laten zien en vervolgens het plaatje vernietigen
header('Content-type: image/png');
imagepng($plaatje);
imagedestroy($plaatje);
?>
index.php
[code]<?php
// Start de sessie om de som op te halen
session_start();
// Er is gepost, doe de controle of er iets ingevuld is
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['antwoord']) && isset($_SESSION['som_antwoord'])) {
// Kijk of het ingevulde antwoord overeen komt met het daadwerkelijke antwoord en vervolgens het resultaat echo'en
echo ($_POST['antwoord'] == $_SESSION['som_antwoord']) ? 'Goed' : 'Fout';
}
}
// En tot slot het formulier, klik op de som voor een nieuwe som
?>
<form method="post" action=""><p>
Wat is het antwoord op de volgende vraag?<br />
<img alt="" src="captcha.php" onclick="this.src='captcha.php?'+Math.floor(Math.random()*9999999)" /><br />
<input type="text" name="antwoord" /><br /><br />
<input type="submit" value="Verzenden" /> <input type="reset" value="Herstel" />[/code]
Reacties
0