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