php学习:给CI框架添加验证码

2014-10-06
2 min read

这篇笔记是上个月给robin添加验证码功能的记录。起初在网上搜索php的验证码例程,最后在CodeIgniter论坛找到了别人写好的库,果断拿来使用了。


  1. 下载 下载完压缩包后解压,并重命名为captcha_code.php(我喜欢酷酷的名字)。复制captcha_code.php到项目的application/libraries里面。

  2. 修改controller/user.php文件 在空白区域添加函数:

     function captcha()
     {
     	$conf['name']='captcha'; //作为配置参数
     	$this->load->library('captcha_code',$conf);
     	$this->captcha_code->show();
     	$yzm_session=$this->session->userdata('captcha');//将验证码放在了缓存中
     }
    
  3. 修改view/login.php文件 添加一段

     <a href="javascript:reloadCode();"><img src="<?php echo site_url(user/captcha');?>" name="checkCodeImg" id="checkCodeImg" border="0" /></a>
    

    JS代码部分:

     function reloadCode() {
         var dom = document.getElementById("checkCodeImg");
         dom.src = "<?php echo site_url('user/captcha');?>?str=" + Math.random();
     }
    
  4. 页面js传值 照例前端把数据POST到后端去,在原有代码上修改

      function form_submit(){
        $.ajax({
        	'url' : '/user/check',
        	'type' : 'POST',
        	'data' : 	{'checknum':$.trim($("#checknum").val()),'submit':'submit'},
        	'dataType' : 'json',
        	'success' : function(data){
        		console.log(data); 
        		if(data == '1' ){ 
        			$.ajax({
        				'url' : '/user/login',
        				'type' : 'POST',
        				'data' : 		{'number':$.trim($("#number").val()),'password':$.trim($('#password').val()),'remember':$("#remember").val(),'submit':'submit'},
        				'dataType':'json',
        				'success' :function(data){
        				window.location = window.location.toString();
        },
        				'complete' :function (xhr, textStatus) {
        					if(xhr.status == '400'){
        						show_error_tips("密码或账号名出错");
        					}else if(xhr.status == '403'){
        						show_error_tips("账号已停用或出错");
        					}else if( xhr.status == 200 ){
        						if( textStatus == 'parsererror'){
        						var curl = xhr.getResponseHeader('x-req-path');
        						if( curl && curl.slice(5) != '/user' ){
        							window.location.href = curl;
        						}
        					}
        				}
        			}
        		});
        	}
        	else{
        		show_checknum_error_tips("验证码错误");
        	} 
        }
        });
      }
    
  5. 再修改controller/user.php文件 这次修改添加后台进行验证码校验的功能

      /**
      * 检查验证码 checknum 
      */
      function check(){
      $checknum = $this->input->post('checknum');
      $captcha_session = $this->session->userdata('captcha');
      if($checknum == $captcha_session){
      echo '1';
      }
      else{
      echo '2';
      }
      }
    
  6. 总结 这个功能其实很简单,就是搭积木一样的把别人成熟的库导入进入项目中引入排错,这也是积累经验的方式咯。

CI论坛的原帖地址

comments powered by Disqus