2011-04-08 119 views
0

好吧,我已经在这个网站上看到过类似的问题,但他们没有掌握所有我在这个特定问题上寻找的手持细节!CodeIgniter reCaptcha问题

我在地狱使用验证码的JS版本和1.7.1笨

随着JS版做了一个PHP版本之间我把它显示在生成的HTML内,但我不知道怎么弄传递给PHP表单的正确结果。周围的表单当前只在PHP中发布是否存在“任何”文本输入,而不是如果它是正确的文本。我可以监控验证码文本输入字段以查看是否提交了任何内容,但这不会检查实际的JavaScript以获得正确的结果。我需要一个PHP函数调用,它可以从JavaScript通过Recaptcha.create生成的HTML中调用。

您可能会想:由于codeigniter是PHP,为什么不使用PHP版本的recaptcha?那么CodeIgniter结构是我处理过的最不直观的PHP和MVC结构。在我正在编辑的网站上查找必要的功能调用已经变成了逆向工程练习。

我也有一个PHP版本,这里是https://github.com/seanmcgary/Codeigniter-ReCaptcha,就像经典的CodeIgniter风格,文档基本上不存在。我知道这个版本适用于CodeIgniter 1.7,但我不知道它是什么版本的reCaptcha。

请不要将我链接到codeigniter wiki,只是相关的帮助。

由于一个版本可能更实用,它正变得令人费解地致力于实现JS版本和部分PHP版本。所以我问你们,谢谢!

回答

0

This wiki article and library are extremely simple。因为你不想只是一个链接,这里是一些来自wiki文章的示例代码,以帮助你入门。

该代码真的很自我解释。使用公钥和私钥设置您的配置,然后在您的控制器中加载格式验证库,并根据验证状态显示正确的视图。

配置/验证码:

$config['recaptcha'] = array(
    'public'=>'YOUR PUBLIC KEY', 
    'private'=>'YOUR PRIVATE KEY', 
    'RECAPTCHA_API_SERVER' =>'http://www.google.com/recaptcha/api', 
    'RECAPTCHA_API_SECURE_SERVER'=>'https://www.google.com/recaptcha/api', 
    'RECAPTCHA_VERIFY_SERVER' =>'www.google.com', 
    'RECAPTCHA_SIGNUP_URL' => 'https://www.google.com/recaptcha/admin/create', 
    'theme' => 'white' 
); 

控制器:

function index() 
    { 
    $this->load->library('recaptcha'); 
    $this->load->library('form_validation'); 
    $this->lang->load('recaptcha'); 
    $this->load->helper('form'); 

    if ($this->form_validation->run()) 
    { 
     $this->load->view('recaptcha_demo',array('recaptcha'=>'Yay! You got it right!')); 
    } 
    else 
    { 
     //the desired language code string can be passed to the get_html() method 
     //"en" is the default if you don't pass the parameter 
     //valid codes can be found here:http://code.google.com/apis/recaptcha/docs/customization.html#i18n 
     $this->load->view('recaptcha_demo',array('recaptcha'=>$this->recaptcha->get_html())); 
    } 
    } 
+0

好吧,我有一个建立已,但我不知道如何与表单的其余产品。有一个名称字段,电子邮件,电话号码 - 这些被检查以查看是否有任何内容,我需要的条件也从recaptcha代码中获得价值。我可以复制$ this-> load->库函数吗?此外,我没有任何名为helper的文件夹或该非易失性文件夹中名为form的文件 – CQM 2011-04-08 23:19:46

+0

表单助手是[内置助手](http://codeigniter.com/user_guide/helpers/form_helper.html)。我得到的印象你不明白[表单验证](http://codeigniter.com/user_guide/libraries/form_validation.html)类是如何工作的。你需要设置你的规则,比如'$ this-> form_validation-> set_rules('email','Email','required');'如果它们全部验证,那么'$ this-> form_validation-> run()'将返回true。这些文档通过示例对其工作原理进行了很好的解释。 – akpb 2011-04-10 01:32:29

+0

好的。所以我下载了代码。将所有文件移到适当的文件夹中。在config/recaptcha.php文件中设置键。然后,我有我的表单提交逻辑,我把$ this-> form_validation-> run()函数。然后在HTML中我做了什么?我需要显示用户输入的验证码。我看到谷歌的代码将php recaptcha添加到非代码点火器文档中,但我不确定哪些部分是相关的。我不知道我应该如何打电话给特定的文件。现在我有 – CQM 2011-04-12 19:52:05

0

我有我的想法上的验证码是如何工作的Codigniter。我无法解释给你听清楚,但我希望你能理解下面这个代码:

添加到您的配置文件

#google reCaptcha 
$config['recaptcha_sitekey'] = 'put site key'; //Recaptcha Site key 
$config['recaptcha_secretkey'] = 'put secret key'; //Recaptcha Secret Key 

将此代码添加到您的验证表单

$this->form_validation->set_rules('g-recaptcha-response', 'recaptcha validation', 'required|callback_validate_captcha'); 
     $this->form_validation->set_message('validate_captcha', 'Please check the the captcha form'); 

和不忘记将此添加到验证码所在的控制器中

//ADDITIONAL CODES 
    function validate_captcha() { 
     $captcha = $this->input->post('g-recaptcha-response'); 
     $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$this->config->item('recaptcha_sitekey')."&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']); 

     if ($response . 'success' == false) { 
      return FALSE; 
     } else { 
      return TRUE; 
     } 
    } 

A DD这个代码的形式,其中的reCAPTCHA会出现

<div class="g-recaptcha" data-sitekey="<?php echo $this->config->item('recaptcha_sitekey') ?>"></div> 

而且不`吨忘记的Javascript

<script src="https://www.google.com/recaptcha/api.js"></script> 

如果你想从主页面中出现两次验证码模态将此代码添加到您的模式

<script> 
    createRecaptcha(); 
    function createRecaptcha() { 
    grecaptcha.render("captcha", {sitekey: "<?php echo $this->config->item('recaptcha_sitekey') ?>", theme: "light"}); 
    } 
</script> 

添加在您想验证码会出现这个代码

<div id="captcha"></div> 

这是我所能做的^ _^

演示:https://www.waraywarayako.ph/