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

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


  1. 下载
    下载完压缩包后解压,并重命名为captchacode.php(我喜欢酷酷的名字)。复制captchacode.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论坛的原帖地址