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">• ','</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';
}
}