Creează un CAPTCHA în PHP

Testele CAPTCHA sunt, la ora actuală, printre cele mai longevive forme de protecție împotriva spam-ului. CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart), reprezintă un tip de test automat, de tip provocare – răspuns, menit să determine dacă un utilizator este sau nu uman.

Videotutorialul de mai jos te va ajuta sa intelegi cum poti crea un captcha simplu utilizand doar PHP si putin HTML.Ideea scriptului este una simpla:

  • Prima data se creeaza o imagine si un string(in cazul nostru un string numeric)
  • Stringul trebuie sa ia o valoare aleatorie de fiecare data cand userul reimprospateaza pagina
  • Valoarea stringului este transmisa printr-o sesiune intr-o alta fila php
  • In fila respectiva se va verifica daca valoarea introdusa de user este identica cu cea din script

Iar pentru  cei mai nerabdatori mai jos puteti vedea cele 2 file PHP, captcha.php, respectiv simple.php.In captcha cream imaginea, iar in simple se afla forma ce contine campul pentru a introduce codul din imagine.

Captcha.php

<?php
session_start();
//Cream imaginea
$im=imagecreatetruecolor(70, 20);
//Culoarea de fundal a imaginii
$bg=imagecolorallocate($im, 0, 0, 255);
imagefill($im, 0, 0, $bg);

//Culoarea la string
$text_color=imagecolorallocate($im, 255, 255, 255);
//O valoare aleatorie pe care trebuie sa o introduca userul
$rand=rand(10000, 50000);
imagestring($im, 5, 2, 2, $rand, $text_color);
//Specificam browser-ului ca este vorba de o imagine
header('Content-type:image/jpeg');
//Cream imaginea ca jpeg pentru a o vizualiza
imagejpeg($im);

//Cream o sesiune ce memoreaza valoarea din $rand
$_SESSION['check']=$rand;
?>

Iar acum simple.php:

<?php session_start(); ?>
<form action="simple.php" method="POST">
    <img src="captcha.php" alt=""><br>
    <input name="check" required="" type="text">
    <input name="submit" type="submit" value="Verifica">
</form>
<?php
if(isset($_POST['submit'])) {
	$check=$_POST['check'];
    //Verificam daca codul introdus de user este cel corect
	if($check == $_SESSION['check']) {
		echo "Cod introdus corect!";
	}
	else echo "Cod INCORECT!";
}
?>

Leave a Comment