用户
 找回密码
 入住 CI 中国社区
搜索
查看: 17507|回复: 18
收起左侧

[版本 2.x] 如何刷新验证码

  [复制链接]
发表于 2011-11-19 22:56:40 | 显示全部楼层 |阅读模式
  小弟目前用的是CI_2.0.3版本,想问一下群里的各位大大,在CI框架里面,刷新验证码如何实现(只刷新验证码,不刷新整个页面),望各位大大赐教,最好能够贴源码,小弟感激不尽。
发表于 2011-11-20 14:42:12 | 显示全部楼层
本帖最后由 qi_ruo 于 2011-11-20 15:28 编辑
PHP复制代码
class Test extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url');
    }
 
    public function get_captcha()
    {
        if ($this->input->is_ajax_request()) {
            $this->load->helper('captcha');
            $vals = array(
                'img_path' => './captcha/',
                'img_url' => base_url().'captcha/'
            );
            $cap = create_captcha($vals);
 
            $data = array(
                'captcha_time' => $cap['time'],
                'ip_address' => $this->input->ip_address(),
                'word' => $cap['word']
            );
            $query = $this->db->insert_string('captcha', $data);
            $this->db->query($query);
 
            echo $cap['image'];
        } else {
            show_404();
        }
    }
 
    public function captcha_form()
    {
        $this->load->view('captcha_form');
    }
}
复制代码

HTML复制代码
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Captcha Form</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<script type="text/javascript">
function get_captcha() {
    $.get("<?php echo site_url('test/get_captcha');?>", function(data){
        $('#captcha-image').html(data);
    });
};
$(function(){
    get_captcha();
    $('#reload-captcha').click(get_captcha);
})
</script>
</head>
<body>
    <form method="post">
        <p id="captcha-image"></p>
        <p><a href="javascript:void(0);" id="reload-captcha">Reload Captcha</a></p>
        <p><input type="text" name="captcha" /></p>
        <p><input type="submit" value="submit" /></p>
    </form>
</body>
</html>
复制代码



发表于 2014-4-30 10:33:18 | 显示全部楼层

非常感谢你的代码。
之前我一直把创建captcha写在login或者register的function里,还是你这么写比较好,captcha和登陆注册函数分离。
发表于 2016-12-17 08:56:27 | 显示全部楼层

可是我的为什么就是显示不出来图片啊,在captcha文件下生成了图片啊
发表于 2011-11-20 00:03:45 | 显示全部楼层
其实我不懂,不过我想不是 JS 就是 AJAX
发表于 2011-11-20 00:36:31 | 显示全部楼层
本帖最后由 Уаиɡ_輄 于 2011-11-20 00:37 编辑

原生的代码不知道怎么改.同求.同求.
想知道 captcha.helper.php 文件下怎么修改可实现刷新:
HTML复制代码
$img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" onclick=\"this.src='<?php echo site_url(/register/index/)?>?rand=' + Math.random();\" style=\"border:0;\" alt=\" \" />";
复制代码

不知道哪出问题了,请高人出手顺便也给解决了吧!{:soso_e183:}
 楼主| 发表于 2011-11-20 09:49:27 | 显示全部楼层
孤月蓝风 发表于 2011-11-20 00:03
其实我不懂,不过我想不是 JS 就是 AJAX

就是不知道怎么写。
 楼主| 发表于 2011-11-20 09:52:47 | 显示全部楼层
Уаиɡ_輄 发表于 2011-11-20 00:36
原生的代码不知道怎么改.同求.同求.
想知道 captcha.helper.php 文件下怎么修改可实现刷新:

  什么乱七八糟的名字,你这代码有点乱,以后不好改。
  改进一下,JS绑定事件一般写在后台,这样才能实现代码分离,比如CSS。
  <img>那些杂七杂八的转义字符,换一下写法吧,由后台captcha生成,在分配给视图,或者后台生成src分配给视图。
发表于 2011-11-20 15:27:38 | 显示全部楼层
ci_phper_mj 发表于 2011-11-20 09:52
什么乱七八糟的名字,你这代码有点乱,以后不好改。
  改进一下,JS绑定事件一般写在后台,这样才能实 ...

呵呵  那个captcha.helper.php 是CI的配置文件.
如果可以在里面改  当然是最简单的啦!
发表于 2011-11-20 16:03:48 | 显示全部楼层
qi_ruo 发表于 2011-11-20 14:42

这个还是只能点字刷新验证码.图片点击后就显示X了!
发表于 2011-11-20 16:13:06 | 显示全部楼层
本帖最后由 qi_ruo 于 2011-11-20 16:17 编辑
Уаиɡ_輄 发表于 2011-11-20 16:03
这个还是只能点字刷新验证码.图片点击后就显示X了!

稍微修改一下就可以了
echo '<a href="javascript:void(0);"  _onclick="get_captcha();">'.$cap['image'].'</a>';
发表于 2011-11-20 20:44:00 | 显示全部楼层
qi_ruo 发表于 2011-11-20 16:13
稍微修改一下就可以了
echo ''.$cap['image'].'';

谢谢兄弟你的回答.

你的意思是把test.php里面的
PHP复制代码
echo $cap['image'];
复制代码
换成
PHP复制代码
echo '<a href="javascript:void(0);"  _onclick="get_captcha();">'.$cap['image'].'</a>';
复制代码

可是还是不行。   我晕了! 能详细说说吗?谢谢!

本版积分规则