我有一个联系表单,它使用CodeIgniter验证库和AJAX来验证和提交表单。我的下一步是将Google的Captcha整合到我的表单的CI中。现在官方教程有一个标准的PHP设置教程,我更喜欢尝试CI方式,我在这里找到了更新的帖子:
http://blog.russkern.com/integrating-recaptcha-into-codeigniter-forms/
我遵循他的指示,但我不确定如何在将函数和if语句放在我的其他AJAX /验证语句中来实现控制器。
以前有没有人遇到过这个问题,或者有没有办法在我已有的方面实施?我的表单验证单词,当函数位于顶部时,但它将其余部分集成在我的控制器中。
这是我的代码:
查看:
/* 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';
}
}
答案 0 :(得分: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
}
}
答案 1 :(得分: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;