ci_phper_mj 发表于 2011-11-19 22:56:40

如何刷新验证码

小弟目前用的是CI_2.0.3版本,想问一下群里的各位大大,在CI框架里面,刷新验证码如何实现(只刷新验证码,不刷新整个页面),望各位大大赐教,最好能够贴源码,小弟感激不尽。

qi_ruo 发表于 2011-11-20 14:42:12

本帖最后由 qi_ruo 于 2011-11-20 15:28 编辑

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><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>


MrLeonHuang 发表于 2014-4-30 10:33:18

qi_ruo 发表于 2011-11-20 14:42


非常感谢你的代码。
之前我一直把创建captcha写在login或者register的function里,还是你这么写比较好,captcha和登陆注册函数分离。

弱水河_kUW1u 发表于 2016-12-17 08:56:27

thenbsp 发表于 2011-12-25 19:04
费话不说

可是我的为什么就是显示不出来图片啊,在captcha文件下生成了图片啊

孤月蓝风 发表于 2011-11-20 00:03:45

其实我不懂,不过我想不是 JS 就是 AJAX

Уаиɡ_輄 发表于 2011-11-20 00:36:31

本帖最后由 Уаиɡ_輄 于 2011-11-20 00:37 编辑

原生的代码不知道怎么改.同求.同求.
想知道 captcha.helper.php 文件下怎么修改可实现刷新:
$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:}

ci_phper_mj 发表于 2011-11-20 09:49:27

孤月蓝风 发表于 2011-11-20 00:03 static/image/common/back.gif
其实我不懂,不过我想不是 JS 就是 AJAX

就是不知道怎么写。

ci_phper_mj 发表于 2011-11-20 09:52:47

Уаиɡ_輄 发表于 2011-11-20 00:36 static/image/common/back.gif
原生的代码不知道怎么改.同求.同求.
想知道 captcha.helper.php 文件下怎么修改可实现刷新:



什么乱七八糟的名字,你这代码有点乱,以后不好改。
改进一下,JS绑定事件一般写在后台,这样才能实现代码分离,比如CSS。
<img>那些杂七杂八的转义字符,换一下写法吧,由后台captcha生成,在分配给视图,或者后台生成src分配给视图。

Уаиɡ_輄 发表于 2011-11-20 15:27:38

ci_phper_mj 发表于 2011-11-20 09:52 static/image/common/back.gif
什么乱七八糟的名字,你这代码有点乱,以后不好改。
改进一下,JS绑定事件一般写在后台,这样才能实 ...

呵呵那个captcha.helper.php 是CI的配置文件.
如果可以在里面改当然是最简单的啦!:P

Уаиɡ_輄 发表于 2011-11-20 16:03:48

qi_ruo 发表于 2011-11-20 14:42 static/image/common/back.gif


这个还是只能点字刷新验证码.图片点击后就显示X了!

qi_ruo 发表于 2011-11-20 16:13:06

本帖最后由 qi_ruo 于 2011-11-20 16:17 编辑

Уаиɡ_輄 发表于 2011-11-20 16:03 static/image/common/back.gif
这个还是只能点字刷新验证码.图片点击后就显示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 static/image/common/back.gif
稍微修改一下就可以了
echo ''.$cap['image'].'';

:handshake 谢谢兄弟你的回答.

你的意思是把test.php里面的
echo $cap['image']; 换成
echo '<a href="javascript:void(0);"_onclick="get_captcha();">'.$cap['image'].'</a>';
可是还是不行。 :dizzy:我晕了! 能详细说说吗?谢谢!
页: [1] 2
查看完整版本: 如何刷新验证码