CodeIgniter CAPTCHA
If you are currently building a website, chances are, one of these days, you will need to have a CAPTCHA installed on at least one of your pages. Now, there are plenty of ways to put a CAPTCHA on a webpage. For CodeIgniter users, this article will give you one solution how.
But first, what is a CAPTCHA and why do I need one?
The term CAPTCHA stands for Completely Automated Public Turing test to tell Computers and Humans Apart. As the meaning implies, it is a response test devised to make sure that the “test taker” is a person and not a computer.
This comes in handy when you want to prevent bots from spamming your website’s email, comments section, etc. In simplest terms, it prevents automated software from doing stuff that may degrade the quality of your web service.
How do I put one on my web pages?
For this article, we will be using a “reCAPTCHA”. A reCAPTCHA is a system owned by Google that uses a CAPTCHA to prevent bots from accessing restricted website areas. In order to be able to use one, you first need to sign up for a Google account.
After the signup, will be given a public key and a private key which will be you will be using and a bunch of files to download. Obviously, you need to download the files for PHP. There are also guides in different programming languages on how to install the reCAPTCHA on a webpage. Unfortunately, the guides don’t cover the CodeIgniter framework.
Lucky for you, you have found this article. Therefore, you are now going to have a good idea on how to use a reCAPTCHA for CodeIgniter.
Let’s get started!
Now, the only file you need is the recaptchalib.php, so first and foremost, you need to place the file in your directory.
After you have done so, it’s time for you to do some coding. I am using CodeIgniter version 2.0 by the way.
For your controller…
<?php class Recaptcha_page extends CI_Controller { function index() { // you obviously need this file ;) require('recaptchalib.php'); // the form validation library will be used to check whether or not // the value entered in the recaptcha is correct $this->load->library(array('form_validation')); // in the view, a hidden input with the name 'recaptcha' will be used so that // we can validate the recaptcha with our callback function named 'checkRecaptcha' $this->form_validation->set_rules('recaptcha', 'recaptcha', 'callback_checkRecaptcha'); // if the value entered in our recaptcha is erroroneous or if the user is // seeing the page for the first time, we will load the user test page if ($this->form_validation->run() == FALSE) { // set the public key needed for the recaptcha $data['publickey'] = '(insert public key here)'; // load the view with the recaptcha variable named as 'publickey' $this->load->view('recaptcha-page', $data); } else { $this->load->view('success'); } } function checkRecaptcha() { // initialize the variables needed to check the recaptcha $privatekey = '(insert private key here)'; $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); // if the value entered in the recaptcha is incorrect, set the error message then return false if (!$resp->is_valid) { $this->form_validation->set_message('checkRecaptcha', "Please try again. "); // returning false will set $this->form_validation->run() to false return false; } else { // returning false will set $this->form_validation->run() to true return true; } } }
For your view ( recaptcha-page.php ) ...
<form action="" method="post"> <!-- The form error message will be displayed here in case the value entered is incorrect. --> <?php echo form_error('recaptcha','<span class="warning">', '</span>'); ?> <p> <label>Type the words you see below: </label> <?php echo recaptcha_get_html($publickey); ?> <!-- We will use this hidden field to validate our recaptcha. --> <input type="hidden" name="recaptcha" value="recaptcha" /> </p> <p> <input type="submit" name="submit" value="Submit" /> </p> </form>