2011-04-08 121 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/