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.
// 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.
<?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] .' + '. $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>
<?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'; }
// 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
<p>Cursuri graruite: <mark>MarPlo.net</mark> , jocuri, anime.</p>
a:hover { font-weight: bold; color: #00da01; }
var num = 12.34567; num = num.toFixed(2); alert(num); // 12.35
$arr = file("a_file.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); var_export($arr);
What time is it? It is a quarter to 5. - Cat este ora? E 5 fara un sfert.
¿Qué hora es? Son las tres menos cuarto. - Cat este ora? E 3 fara un sfert.