This tutorial shows you how to create a simple anti-spam CAPTCHA verification code in PHP (CAPTCHA stands for: Completely Automated Public Turing test to tell Computers and Humans Apart).
Two functions for CAPTCHA: the sum of two numbers, and the lowest numbers.
The ideea is simple: before to generate the HTML code with the CAPTCHA question, and the input field for answer, we create the captcha code and save the correct answer into a $_SESSION. Then, when we want to check the captcha, we check if that session exists, and if it is the same with the answer added by the user.
// creates a SESSION with the sum of two numbers. Receives the session name // returns an array with the two numbers // From: // https://coursesweb.net/php-mysql/ function setCaptcha($ses_name) { $nrs = array(mt_rand(1, 50), rand(1, 50)); // array with 2 random numbers, between 1 and 50 // if session exists, delete it, sets session with the sum of $nrs[0] and $nrs[1] if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); } $_SESSION[$ses_name] = $nrs[0] + $nrs[1]; return $nrs; // returns the array with the numbers }• In the PHP script that uses $_SESSION you must have session_start() at the beginning of the php file.
<?php if(!isset($_SESSION)) session_start(); // creates a SESSION with the sum of two numbers. Receives the session name // returns an array with the two numbers // From: // https://coursesweb.net/php-mysql/ function setCaptcha($ses_name) { $nrs = array(mt_rand(1, 50), rand(1, 50)); // array with 2 random numbers, between 1 and 50 // if session exists, delete it, sets session with the sum of $nrs[0] and $nrs[1] if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); } $_SESSION[$ses_name] = $nrs[0] + $nrs[1]; return $nrs; // returns the array with the numbers } // call the function to set the captcha answer in $_SESSION['captcha'], and gets the numbers $nrs = setCaptcha('captcha'); // sets the captcha question $ver_question = $nrs[0] .' + '. $nrs[1]; ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Captcha anti-spam verification PHP Tutorial - https://CoursesWeb.net/</title> <meta name="description" content="PHP Tutorial, how to create simple a Captcha anti-spam verification, from https://CoursesWeb.net/" /> <meta name="keywords" content="php tutorial, captcha, coursesweb.net" /> </head> <body> <form action="some_file.php" method="post"> Name: <input type="text" name="yname" /><br/> What is the sum of: <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="send" /> </form> </body> </html>
<?php if(!isset($_SESSION)) session_start(); // if form with $_POST['vcptca'] is submited and $_SESSION['captcha'] exists if(isset($_POST['vcptca']) && isset($_SESSION['captcha'])) { // if the value added in 'vcptca' is equal with the value stored in session outputs Correct // otherwise, outputs Incorrect if($_POST['vcptca'] == $_SESSION['captcha']) { echo 'Correct '. $_SESSION['captcha']; } else { echo 'Incorrect answer.'; } } else { echo 'No form submited'; }
// creates a SESSION with the lowest number between four numbers. Receives the session name // returns an array with the four numbers // From: // https://coursesweb.net/php-mysql/ function setCaptcha2($ses_name) { // creates an array with values from 1 to 100 $nrs = range(1, 100); // randomizes the order of the elements in $nrs, extracts and keeps the first 4 items shuffle($nrs); $nrs = array_slice($nrs, 0, 4); // if session exists, delete it, sets session with the lowest number if(isset($_SESSION[$ses_name])) { unset($_SESSION[$ses_name]); } $_SESSION[$ses_name] = min($nrs); return $nrs; // returns the array with the numbers }- Then, just calls this function, setCaptcha2(), to get the array with 4 numbers (the lowest number will be stored in $_SESSION), and use implode() to get a string with the numbers, to add it in the verification question.
<?php // Here add the setCaptcha2() function // sets the captcha answer in $_SESSION['captcha'], and gets the numbers $nrs = setCaptcha2('captcha'); // sets the string with the numbers for verification question $ver_question = 'Add the lowest number ('. implode(', ', $nrs) .')'; echo $ver_question; // displays the string
<p>Address: <strong>http://CoursesWeb.net/</strong> - Tutorials.</p>
#id { font-weight: 800; }
function someFunction() { alert("CoursesWeb.net"); } setInterval("someFunction()", 2000);
$vname = 8; echo $vname;