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.

PHP Object-Oriented Solutions
PHP Object-Oriented Solutions

If you want to use PHP frameworks, you have to learn object-oriented programming with PHP first.

 
This is how a reCAPTCHA looks like.
This is how a reCAPTCHA looks like.


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>

More by this Author


Comments 2 comments

Henrique Crachat profile image

Henrique Crachat 4 years ago

Soooo were is the file to download sir?


Johnf354 2 years ago

When choosing the colours for you office, there are a few basic points to consider. adeckefgecdd

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    Click to Rate This Article
    working