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.

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.
// creaza SESSION cu suma a doua numere. Primeste numele sesiunii
// returneaza un array cu numerele
// De la: // https://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
}
• In script-ul PHP care foloseste $_SESSION trebuie adaugat session_start() la inceputul fisierului php.

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.
<?php
if(!isset($_SESSION)) session_start();

// creaza SESSION cu suma a doua numere. Primeste numele sesiunii
// returneaza un array cu numerele
// De la: // https://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] .'&nbsp;+&nbsp;'. $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>

- In "some_file.php" se verifica daca e trimis campul cu raspunsul de la captcha, daca $_SESSION['captcha'] exista si este egala cu valoarea de la $_POST['vcptca'] (caseta in care utilizatorul a adaugat raspunsul).
<?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';
}

CAPTCHA cu cel mai mic numar

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.
// creaza SESSION cu cel mai mic numar din 4 numere. Primeste numele sesiunii
// returneaza un array cu cele 4 numere
// De la: // https://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
}
- Apoi se apeleaza functia setCaptcha2() pentru a obtine cele 4 numere (cel mai mic numar va fi retinut in $_SESSION), si se foloseste implode() ca sa fie adaugate numerele intr-un sir cu intrebarea de verificare.
<?php
// Aici se adauga functia setCaptcha2()

// seteaza $_SESSION['captcha'] cu raspunsul si obtine numerele
$nrs = setCaptcha2('captcha');

// seteaza sirul cu intrebarea de verificare
$ver_question = 'Add the lowest number ('. implode(', ', $nrs) .')';

echo $ver_question;        // afisaza sirul

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag HTML5 defineste un text marcat, evidentiat?
<mark> <embed> <span>
<p>Cursuri graruite: <mark>MarPlo.net</mark> , jocuri, anime.</p>
Ce pseudo-clasa CSS defineste un stil la element cand mouse-ul e deasupra lui?
:focus :hover :active
a:hover {
  font-weight: bold;
  color: #00da01;
}
Clic pe functia ce returneaza un sir cu un numar rotunjit la x decimale.
toPrecision(x) toFixed(x) floor(x)
var num = 12.34567;
num = num.toFixed(2);
alert(num);       // 12.35
Indicati functia PHP care adauga continutul unui fisier intr-un array.
[) file() readfile()
$arr = file("a_file.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
var_export($arr);
Clic pe raspunsul potrivit la intrebarea: "What time is it?"
On the 7th of July 1996 It is a quarter to 5. Nice weather.
What time is it? It is a quarter to 5.
- Cat este ora? E 5 fara un sfert.
Indicati raspunsul potrivit la intrebarea: "¿Qué hora es?"
Hace buen tiempo. En el 7 de julio de 1996 Son las tres menos cuarto.
¿Qué hora es? Son las tres menos cuarto.
- Cat este ora? E 3 fara un sfert.
Creare CAPTCHA cod verificare anti-spam

Last accessed pages

  1. Curs si Tutoriale Ajax (35732)
  2. Evenimente JavaScript (1352)
  3. Curs CSS Online Tutoriale CSS3 (40901)
  4. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (121962)
  5. Utilizare Cookie in JS (492)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1588)
  2. Curs HTML gratuit Tutoriale HTML5 (1190)
  3. Curs PHP MySQL, Tutoriale si Scripturi PHP (1141)
  4. Curs si Tutoriale Ajax (1055)
  5. Curs si Tutoriale JavaScript (1048)