Descriere:Acest tutorial arata cum se poate crea CAPTCHA, cod de verificare anti-spam in PHP (CAPTCHA e acronimul de la: Completely Automated Public Turing test to tell Computers and Humans Apart).
Sunt prezentate doua functii pentru CAPTCHA: suma a doua numere, si cel mai mic numar.
Ideea este simpla: inainte de a genera codul HTML cu intrebarea de verificare CAPTCHA si caseta de adaugare raspuns, se creaza codul captcha si se retine in $_SESSION raspunsul corect. Apoi, cand se face verificarea raspunsului, se verifica daca acea sesiune exista si este egala cu raspunsul adaugat de utilizator.
Download:
Autor:
Sursa (Link-ul oficial): Propria parere:Nu l-am incercat.
Tutorialul:
CAPTCHA cu suma a doua numere
Aceasta functie poate fi utilizata pentru a crea un CAPTCHA de verificare cu suma a doua numere intre 1 si 50; salveaza in sesiune raspunsul corect.
Cod: Selectaţi tot
// creaza SESSION cu suma a doua numere. Primeste numele sesiunii
// returneaza un array cu numerele
// De la: // http://www.marplo.net/php-mysql/
function setCaptcha($ses_name) {
$nrs = array(mt_rand(1, 50), rand(1, 50)); // array cu 2 numere aleatorii, intre 1 si 50
// daca sesiunea exista o sterge, seteaza sesiunea cu suma $nrs[0] si $nrs[1]
if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); }
$_SESSION[$ses_name] = $nrs[0] + $nrs[1];
return $nrs; // returneaza' array-ul cu numerele
}Exemplu utilizare functie setCaptcha()
- Urmatorul cod genereaza o pagina HTML cu un formular cu sistem CAPTCHA de verificare. Codul captcha se modifica la fiecare generare a paginii.
Cod: Selectaţi tot
<?php
if(!isset($_SESSION)) session_start();
// creaza SESSION cu suma a doua numere. Primeste numele sesiunii
// returneaza un array cu numerele
// De la: // http://www.marplo.net/php-mysql/
function setCaptcha($ses_name) {
$nrs = array(mt_rand(1, 50), rand(1, 50)); // array cu 2 numere aleatorii, intre 1 si 50
// daca sesiunea exista o sterge, seteaza sesiunea cu suma $nrs[0] si $nrs[1]
if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); }
$_SESSION[$ses_name] = $nrs[0] + $nrs[1];
return $nrs; // returneaza' array-ul cu numerele
}
// apeleaza functia ce adauga raspunsul captcha in $_SESSION['captcha'], si preia numerele
$nrs = setCaptcha('captcha');
// seteaza sirul pt afisarea adunarii numerelor
$ver_question = $nrs[0] .' + '. $nrs[1];
?>
<!doctype html>
<html lang="ro">
<head>
<meta charset="utf-8" />
<title>Captcha anti-spam, Tutorial PHP - http://www.MarPlo.net/</title>
<meta name="description" content="Creare cod captcha anti-spam, Tutorial PHP de la: http://www.MarPlo.net/" />
<meta name="keywords" content="php tutorial, captcha, www.MarPlo.net" />
</head>
<body>
<form action="some_file.php" method="post">
Nume: <input type="text" name="yname" /><br/>
Cat face: <span style="font-weight:800; font-size:1.1em; color:#0001e8;">
<?php echo $ver_question; ?>
</span> <input type="text" name="vcptca" size="3" /><br/>
<input type="submit" name="fsbmt" value="Trimite" />
</form>
</body>
</html>Cod: Selectaţi tot
<?php
if(!isset($_SESSION)) session_start();
// daca formularul cu $_POST['vcptca'] e trimis, si $_SESSION['captcha'] exista
if(isset($_POST['vcptca']) && isset($_SESSION['captcha'])) {
// daca valoarea din 'vcptca' este egala cu cea din sesiune, afisaza Corect
// altfel, afisaza Incorect
if($_POST['vcptca'] == $_SESSION['captcha']) {
echo 'Corect '. $_SESSION['captcha'];
}
else {
echo 'Incorect.';
}
}
else {
echo 'Formular netrimis';
}Urmatoarea functie poate fi utilizata pentru un CAPTCHA cu cel mai mic numar. Returneaza un array cu 4 numere unice, alese aleator intre 1 si 100, raspunsul (cel mai mic numar) e retinut in $_SESSION.
Cod: Selectaţi tot
// creaza SESSION cu cel mai mic numar din 4 numere. Primeste numele sesiunii
// returneaza un array cu cele 4 numere
// De la: // http://www.marplo.net/php-mysql/
function setCaptcha2($ses_name) {
// creaza un array cu numere de la 1 la 100
$nrs = range(1, 100);
// amesteca elementele din $nrs, extrage si pastreaza primele 4
shuffle($nrs);
$nrs = array_slice($nrs, 0, 4);
// daca sesiunea exista o sterge, seteaza sesiunea cu cel mai mic numar
if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); }
$_SESSION[$ses_name] = min($nrs);
return $nrs; // returneaza array-ul cu numerele
}
