2012-12-10 56 views
1

我在CodeIgniter應用程序中實現recaptcha時遇到了問題。 問題是recapctha_challenge_field和recaptcha_response_field沒有被髮布,但是,recapctcha(和那些字段)在頁面上(表單內)是可見的。 recapctha_challenge_field和recaptcha_response_field出現在頁面的HTML中,但在發佈表單時不在標題中。Recaptcha不會在CodeIgniter項目中發佈

我已經下載了de recaptcha庫,並將它作爲CI的幫手添加進去。 在我的視圖中,我回顯了recaptcha_get_html($ publickey)(使用公鑰集)。 在我的控制器中,我加載了recaptchalib_helper並添加了爲recapctha_challenge_field設置表單驗證規則。

這是我的視圖:

<h1>Register</h1> 

<fieldset> 
    <legend>Personal information</legend> 

    <?php 
    echo form_open('login/create_user'); 

    echo form_label('First name:', 'first_name'); 
    echo form_input(
      array(
       'name' => 'first_name', 
       'id' => 'first_name', 
       'value' => set_value('first_name') 
      )  
    ); 

    echo form_label('Last name:', 'last_name'); 
    echo form_input(
      array(
       'name' => 'last_name', 
       'id' => 'last_name', 
       'value' => set_value('last_name') 
      ) 
    ); 

    echo form_label('Birth date:', 'birth_date'); 
    echo form_input(
      array(
       'name' => 'birth_date', 
       'id' => 'birth_date', 
       'value' => set_value('birth_date') 
      ) 
    ); 

    echo form_label('E-mail:', 'email'); 
    echo form_input(
      array(
       'name' => 'email', 
       'id' => 'email', 
       'value' => set_value('email') 
      ) 
    ); 
    ?> 
</fieldset> 

<fieldset> 
    <legend>Login information</legend> 

    <?php 
    echo form_label('Username:', 'username'); 
    echo form_input(
      array(
       'name' => 'username', 
       'id' => 'username', 
       'value' => set_value('username') 
      ) 
    ); 

echo form_label('Password:', 'password1'); 
echo form_password(
     array(
      'name' => 'password1', 
      'id' => 'password1', 
      'value' => set_value('password1') 
     ) 
); 

echo form_label('Confirm password:', 'password2'); 
echo form_password(
     array(
      'name' => 'password2', 
      'id' => 'password2', 
      'value' => set_value('password2') 
     ) 
); 

$publickey = "mypublickey"; // here I entered my public key 
echo recaptcha_get_html($publickey); 

echo form_label(nbs(1), 'submit'); 
echo form_submit(
     array(
      'name' => 'submit', 
      'id' => 'submit', 
      'value' => 'Registreren' 
     ) 
    ); 

    echo form_close(); 
    ?> 

    <?php echo validation_errors('<p class="error">'); ?> 
</fieldset> 
</div> 

,這是我的控制器的一部分:

function create_user() { 
    print_r($_POST);//for debugging 
    $this->load->library('form_validation'); 
    $this->load->model('user'); 

    $this->form_validation->set_rules('recaptcha_challenge_field', 'Captcha', 'callback_validate_captcha'); 
    $this->form_validation->set_rules('first_name', 'First name', 'trim|xss_clean|required'); 
    $this->form_validation->set_rules('last_name', 'Last name', 'trim|xss_clean|required'); 
    $this->form_validation->set_rules('email', 'E-mail', 'trim|xss_clean|valid_email|callback_is_email_available|required'); 

    $this->form_validation->set_rules('username', 'Username', 'trim|xss_clean|min_length[5]|callback_is_username_available|required'); 
    $this->form_validation->set_rules('password1', 'Password', 'trim|xss_clean|min_length[8]|max_length[32]|required'); 
    $this->form_validation->set_rules('password2', 'Confirm password', 'trim|xss_clean|matches[password1]|required'); 

    if ($this->form_validation->run() == FALSE) { 
     $this->signup(); 
    } else { 
     if ($this->user->create_user($this->input->post('username'),$this->input->post('password1'),$this->input->post('email'),$this->input->post('first_name'),$this->input->post('last_name'),$this->input->post('birth_date'))) { 
      $data['main_content'] = 'login/signup_successful'; 
      $this->load->view('includes/template', $data); 
     } else { 
      $this->load->view('login/signup_form'); 
     } 
    } 
} 

public function validate_captcha($recaptcha_challenge_field) { 
    $this->load->helper('recaptchalib'); 
    $privatekey = "myprivatekey";//this is et to my private key 
    $resp = recaptcha_check_answer ($privatekey, 
            $this->input->ip_address(), 
            $this->input->post("recaptcha_challenge_field"), 
            $this->input->post("recaptcha_response_field")); 

    if (!$resp->is_valid) { 
     $this->form_validation->set_message('validate_captcha', 'Invalid Capctha code entered.'); 
     return FALSE; 
    } else { 
     return TRUE; 
    } 
} 

的capctha字段未在HTTP頭中設置:

Form data: 
csrf_test_name:8cc3f2391784867df2d46f193a65a317 
first_name:Myfirstname 
last_name:Mylastname 
birth_date:10-12-2012 
email:[email protected] 
username:username 
password1:password 
password2:password 
submit:Register 

我究竟做錯了什麼?

你的真誠,

阿爾文

+0

你能添加你的視圖的代碼嗎?你有沒有檢查你的HTTP請求是否與變量一起發送?你可以使用你的瀏覽器的開發工具。 –

+0

我已經添加了我的代碼併發布了正在發送的HTTP表單數據。 – Alwin

回答

0

是否表單標籤不是表,TBODY或TR內開始?

+0

不,recapctcha表格在表單內而不是其他方式。看起來,這個js從recapcthalib助手添加的表單字段:不起作用。當我明確地添加它們時: