CodeIgniter CAPTCHA validation
* Example of captcha validation without database useage * Instead of it used session to store captcha value * The images will be deleted after the use
public function index(){ $this->load->helper(array('form', 'url','captcha')); $this->load->library('form_validation'); $this->form_validation->set_error_delimiters('<div class="error">', '</div>'); $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); $this->form_validation->set_rules('captcha', 'Captcha', 'callback_validate_captcha'); if($this->form_validation->run() == FALSE) { $original_string = array_merge(range(0,9), range('a','z'), range('A', 'Z')); $original_string = implode("", $original_string); $captcha = substr(str_shuffle($original_string), 0, 6); //Field validation failed. User redirected to login page $vals = array( 'word' => $captcha, 'img_path' => './captcha/', 'img_url' => 'http://mycodeignitor.org/captcha/', 'font_path' => BASEPATH.'fonts/texb.ttf', 'img_width' => 150, 'img_height' => 50, 'expiration' => 7200 ); $cap = create_captcha($vals); $data['image'] = $cap['image']; if(file_exists(BASEPATH."../captcha/".$this->session->userdata['image'])) unlink(BASEPATH."../captcha/".$this->session->userdata['image']); $this->session->set_userdata(array('captcha'=>$captcha, 'image' => $cap['time'].'.jpg')); $this->load->view('index_index',$data); } else { if(file_exists(BASEPATH."../captcha/".$this->session->userdata['image'])) unlink(BASEPATH."../captcha/".$this->session->userdata['image']); $this->session->unset_userdata('captcha'); $this->session->unset_userdata('image'); redirect('home', 'refresh'); }}public function validate_captcha(){ if($this->input->post('captcha') != $this->session->userdata['captcha']) { $this->form_validation->set_message('validate_captcha', 'Wrong captcha code, hmm are you the Terminator?'); return false; }else{ return true; }}
I suggest you to use recaptcha which is easy to implement in codeigniter: http://codeigniter.com/wiki/ReCAPTCHA