0

CodeIgniter 検証ライブラリと AJAX を使用してフォームを検証して送信する連絡先フォームがあります。次のステップは、Google の Captcha をフォームの CI に統合することでした。現在、公式チュートリアルには標準のphpセットアップのチュートリアルがあり、更新された投稿を見つけたCIの方法を試すことを好みました:

http://blog.russkern.com/integrating-recaptcha-into-codeigniter-forms/

私は彼の指示に従いましたが、関数を配置するという点でコントローラーを実装する方法と、他の AJAX / 検証ステートメントを使用した if ステートメントがわかりません。

誰かが以前にこの問題を抱えていましたか、それとも私がすでに持っているものに実装する方法はありますか? 関数が一番上にあるが、残りをコントローラーに統合している場合のフォーム検証の言葉。

これが私のコードです:

意見:

/* Form code is here /*

require_once('php/recaptchalib.php');
$publickey = "my.public.key";
echo recaptcha_get_html($publickey);

キャプチャ検証を含むコントローラー:

class Contact extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->library('session');
    $this->load->library('form_validation');
}

public function index() {

    $this->load->library('form_validation');

    $this->form_validation->set_rules('name','Name','trim|required|htmlspecialchars|max_length[30]|xss_clean');
    $this->form_validation->set_rules('email','Email Address','trim|valid_email|required|htmlspecialchars|max_length[100]|xss_clean');
    $this->form_validation->set_rules('message','Message','trim|required|htmlspecialchars|xss_clean');
    $this->form_validation->set_rules('recaptcha_challenge_field','challenge','trim|required|callback_captcha_check');
    $this->form_validation->set_error_delimiters('<div id="errors">&bull;&nbsp;','</div>');


    if($this->input->is_ajax_request()) {       
        $respond = array();
        if($this->form_validation->run() == FALSE) {
            $respond['result'] = 'false';
            $respond['errors'] = validation_errors();
        } else {
            $respond['result'] = 'true';
            $this->session->set_flashdata('success', 1);
            $respond['redirect'] = base_url().'contact';
        }
        return $this->output->set_output(json_encode($respond));
    } else {
        if($this->form_validation->run() == FALSE) {
            $respond['errors'] = validation_errors();   
        } else {
            $this->session->set_flashdata('success', 1);    
            redirect('contact');
        }
    }

        $data['page_title'] = 'Contact';
        $data['content'] = 'contact';   
        $this->load->view('template', $data);
} 


}

これが私のコントローラーに入れる必要があるものです...これをインデックス関数の上に置くと、検証が機能するので、機能することはわかっていますが、コントローラーに統合する方法がわかりません:

function captcha_check($str) {
    require_once('php/recaptchalib.php');
    $privatekey = "private.key";
        $resp = recaptcha_check_answer ($privatekey,
        $_SERVER["REMOTE_ADDR"],
        $_POST["recaptcha_challenge_field"],
        $_POST["recaptcha_response_field"]);


    if (!$resp->is_valid) {

    $this->form_validation->set_message('captcha_check', 'The reCAPTCHA wasn\'t entered correctly. Go back and try it again.');
    return FALSE;

// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn’t entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");

    } else {
    echo 'hello';
    }

}
4

2 に答える 2

0

次のようにキーを調整、整理、および変更することで、これが機能するようになりました。

ローカルホストで使用するようにキーを変更しました (ある時点で、コードが機能していましたが、これにより成功メッセージがスローされませんでした。)

recaptchalib ファイルをヘルパーに配置し、これをライブラリなどの他のファイルと共に一番上にロードしました。

公開鍵と秘密鍵を構成ファイルに入れて、これらをロードしました。

上記と同じ関数を使用しましたが、次のように公開鍵と秘密鍵を取得しました。

$data['html_captcha'] = recaptcha_get_html($this->config->item('publickey'));
$return = recaptcha_check_answer($this->config->item('privatekey'),
                                        $_SERVER["REMOTE_ADDR"],
                                        $this->input->post("recaptcha_challenge_field"),
                                        $this->input->post("recaptcha_response_field"));

if statement goes here...

そして私の見解では:echo $html_captcha;

于 2013-06-13T09:30:23.880 に答える
0

を使用して、別の関数から関数を呼び出すことができます$this->function_name()

class Contact extends CI_Controller {

        function __construct() 
        {
          //Lines of code
        } 

        public function index()
        {
          //Lines of codes
          $this->captcha_check(); // Insert the code wherever you want it to be called
        }

        function captcha_check()
        {
          //Lines of codes
        }
}
于 2013-06-12T17:14:12.540 に答える