Prima di tutto vediamo il contenuto della classe:
<?php class Captcha { /** * Classe captcha.php - da www.opencart.com */ protected $code; protected $width = 35; protected $height = 150; function __construct() { $this->code = substr(sha1(mt_rand()), 17, 6); } function getCode(){ return $this->code; } function showImage() { $image = imagecreatetruecolor($this->height, $this->width); $width = imagesx($image); $height = imagesy($image); $black = imagecolorallocate($image, 0, 0, 0); $white = imagecolorallocate($image, 255, 255, 255); $red = imagecolorallocatealpha($image, 255, 0, 0, 75); $green = imagecolorallocatealpha($image, 0, 255, 0, 75); $blue = imagecolorallocatealpha($image, 0, 0, 255, 75); imagefilledrectangle($image, 0, 0, $width, $height, $white); imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $red); imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $green); imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $blue); imagefilledrectangle($image, 0, 0, $width, 0, $black); imagefilledrectangle($image, $width - 1, 0, $width - 1, $height - 1, $black); imagefilledrectangle($image, 0, 0, 0, $height - 1, $black); imagefilledrectangle($image, 0, $height - 1, $width, $height - 1, $black); imagestring($image, 10, intval(($width - (strlen($this->code) * 9)) / 2), intval(($height - 15) / 2), $this->code, $black); header('Content-type: image/jpeg'); imagejpeg($image); imagedestroy($image); } } ?>Utilizzare questa classe è alquanto semplice: poniamo infatti di dover usare una pagina php per la registrazione dell'utente chiamata register.php. Questa pagina avrà un form che invierà i dati alla pagina stessa, dopo il submit dell'utente.
Abbiamo bisogno di una ulteriore pagina, chiamata immagineCaptcha.php.
Tra i campi che andremo a controllare, ci sarà anche il codice captcha, salvato in una variabile di sessione. Per spiegarmi meglio, immagineCaptcha.php sarà così composto:
<?php session_start(); include("captcha.php"); $c = new Captcha(); // Si salva il getCode in sessione $_SESSION['code'] = $c->getCode(); $c->showImage(); ?>
Nella pagina register.php, ci sarà sia il form che il controllo del form stesso:
<?php session_start(); if(isset($_POST['email'])) { //Form inviato if($_SESSION['code']==$_POST['code']) { //controllo captcha andato a buon fine //qui funzione di registrazione } } else { //Mostro il form ?> <form method="post" action="register.php"> <input type="text" name="email"/> <input type="text" name="code"/> <img src="immagineCaptcha.php"/> <input type="submit"/> </form> <?php } ?>