2012-06-21 3 views
2

아마 간단 할 수도 있지만 내 문제가있다. 내 사용자 시스템에 간단한 captcha를 구현했지만 captcha가 올바른지 확인하기 위해 콜백 폼 유효성 검사를 사용할 수 없다. .Codeigniter 폼 유효성 검사 콜백이 작동하지 않음

답변을 사용자 세션에 저장하고 양식 유효성 검사에서 올바른지 확인합니다.

당신은 여기 살고 볼 수 있습니다 http://77.96.119.180/beer/user/register 맥주에 대한 참조를 용서하시기 바랍니다) 여기

내 코드입니다 :

여기
$this->form_validation->set_rules('captcha', 'Image verification', 'trim|required|xss_clean|integer|callback_captcha_check'); 

양식

// CAPTCHA 
$random_word = rand(10000, 99999); 
$vals = array(
    'word' => $random_word, 
    'img_path' => './captcha/', 
    'img_url' => 'http://77.96.119.180/beer/captcha/', 
    'font_path' => './captcha/fonts/pdark.ttf', 
    'img_width' => '150', 
    'img_height' => 50, 
    'expiration' => 7200 
); 

$cap = create_captcha($vals); 

// Store captcha answer in session 
$this->session->set_userdata('captcha_answer', $random_word); 

$content .= form_label('Please enter the numbers in the box to verify you are human (Hint: Only numbers will appear)', 'captcha'); 
$content .= '<div class="left" style="margin-left:20px;">' . $cap['image'] . '</div>'; 
$content .= form_input(array('name' => 'captcha', 'value' => '', 'class' => 'right', 'style' => 'width:75%; margin-top:5px;')); 

의 일부입니다 콜백 함수는 다음과 같습니다

public function captcha_check($str) 
    { 
     if ($str == $this->session->userdata('captcha_answer')) 
     { 
      // Captcha is correct 
      $this->form_validation->set_message('captcha', 'The %s was wrong, please try again'); 
      return FALSE; 
     } 
     else 
     { 
      return TRUE; 
     } 
    } 
+0

당신이 ($ str을) 위해서 var_dump 경우는 종료; 콜백에서 문자열을 보여 주나요? – Rooster

+0

아니, 나는 에코 "안녕하세요"추가 시도; 페이지에 표시되지 않으므로 – Adam

+0

이라는 콜백 함수가 호출되지 않습니다. 콜백 함수가 폼 유효성 검사 규칙을 설정하고 폼을 처리하는 컨트롤러와 동일한 컨트롤러에 있습니까? – Rooster

답변

2

귀하의 유효성 검사 규칙이 콜백 기능에서 취소되었습니다. 진실로 돌아오고 그릇된 논리를 되 돌리는 것이 필요합니다.

그냥이에 if 문을 변경 :

if ($str != $this->session->userdata('captcha_answer')) 
+0

하하, 나는 그것이 간단하다고 생각했다! 그래도 작동하지만 오류가 발생합니다. 필드 이름에 해당하는 오류 메시지에 액세스 할 수 없습니다. 하지만 해결할 수 있습니다 – Adam

+0

모든 해결, 많은 감사합니다 – Adam