Hi,
I will show you a very simple way to use codeigniter 3 CAPTCHA helper when submitting a form in your web application.
So... Ready, Set, Code !
For this, we will be using Welcome controller and welcome_message view. So the first step is to edit the code in the "index" method in "Welcome" controller and add 3 things.
$this->load->library('form_validation');
$this->load->helper('captcha');
$this->load->library('session');
- We load the form validation library in order validate the data when the user submit a form on the webpage.
 - We load the captcha helper that we will configure afterwards.
 - We will be using the session library in order to store the captcha value.
 
Now we will have to configure the CAPTCHA helper
$vals = array(
'word'          => rand(1,999999),
'img_path'      => './assets/captcha/images/',
'img_url'       => base_url('assets').'/captcha/images/',
'font_path'     => base_url('assets').'/captcha/fonts/XYZ.ttf',
'img_width'     => '150',
'img_height'    => 30,
'word_length'   => 8,
'colors'        => array(
               'background'     => array(255, 255, 255),
               'border'         => array(255, 255, 255),
               'text'           => array(0, 0, 0),
               'grid'           => array(255, 75, 100)
            )
        );
IMPORTANT NOTICE !
I forgot to mention before, you will have to set your project file structure as below if your configuration is like above.
your_ci_project
│
└───application
│
└───system
│
└───tests
│
└───index.php
│
└───.htaccess
│
└───assets
    │
    └───captcha
           │
           └───images
           │
           └───fonts
                 │
                 └───XYZ.ttf
You can find more details on Codeigniter User Guide .
After configuring it, call the function that will create the captcha and finally sending it to the "welcome_message.php" view.
$data['captcha'] = create_captcha($vals);
$this->load->view('welcome_message',$data);
To see the captcha in your view, just add this piece of code.
echo $captcha['image']
I hope everything is okay till now.
Time to validate !
In this part we will code the part where the user click on a submit button on the webpage and the controller will validate the captcha.
Let say we have a form in our view with a button in it.
<?php echo $captcha['image'] ?>
<input type="text" name="captcha">
<input type="hidden" value="<?php echo $captcha['word'] ?>" name="code">
<button name="submit_contact">Send</button>
As you can see in the above code, I have a input tag of type hidden whereby I stored the captcha string and when submitting the form, this data is also sent to the controller.
In order to avoid creating multiple methods, I will use the index one but will add an if/else conditional statement to check if a user submit a form. After that we will process the data.
if(isset($_POST['submit_contact'])):
   $this->session->set_userdata('captcha_answer',$this->input->post('code'));
   $this->form_validation->set_rules('captcha', 'Captcha', 'required|integer|callback_check_captcha');
   if($this->form_validation->run() == TRUE):
      $this->session->set_flashdata('positive','CAPTCHA VALIDATED SUCCESSFULLY');
      redirect(site_url());
   endif;
endif;
As you can see above, there is a callback for the submitted captcha in order to check whether it is the same or not as in the image.
public function check_captcha($string)
{
   if($string != $this->session->userdata('captcha_answer')):
      $this->form_validation->set_message('check_captcha', 'captcha incorrect');
      return false;
   else:
      return true; 
   endif;
}
After that, if you want you can destroy the session for captcha_answer.
That's it!
              
    
Top comments (2)
How to change font of captcha ?
Thanks for this, but I face an issue with directory permission then correct it