2011-11-18 5 views
18

전자 메일과 암호가 데이터베이스의 값과 일치하는지 확인하는 로그인 양식에 기능이 있습니다.이 기능을 사용하면 사용자를 시스템에 기록합니다.사용자 정의 codeigniter 유효성 검사 규칙 만들기

이 함수가 false를 반환하면 유효성 검사 오류가 표시됩니다.

제 문제는 어떻게 만드는지에 대해 확신 할 수 없다는 것입니다. 메시지는 비밀번호와 이메일 입력란과 관련이 있으므로 각 입력란에 대한 규칙 하나만 표시하면됩니다.

나는 이것을 달성하기 위해 플래시 데이터를 사용해 보았지만 페이지가 새로 고쳐질 때만 작동합니다.

$this->members_model->validate_member()에 대해서만 새 유효성 검사 규칙을 어떻게 만듭니 까?

$this->form_validation->set_error_delimiters('<div class="error">', '</div>'); 
     $this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email'); 
     $this->form_validation->set_rules('password', '"Password"', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $viewdata['main_content'] = 'members/login'; 
      $this->load->view('includes/template', $viewdata); 
     } 
     else 
     {  
       if($this->members_model->validate_member()) 
       { 

답변

38

당신은 예를 들어, callbacks를 참조하십시오 규칙에 callback_를 사용합니다.

$this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email|callback_validate_member'); 

컨트롤러에이 메소드를 추가하십시오. 이 방법은 true 또는 당신은 다음의 경우에 해당 오류를 만들 필요가

function validate_member($str) 
{ 
    $field_value = $str; //this is redundant, but it's to show you how 
    //the content of the fields gets automatically passed to the method 

    if($this->members_model->validate_member($field_value)) 
    { 
    return TRUE; 
    } 
    else 
    { 
    return FALSE; 
    } 
} 

FALSE 유효성 검증이 CodeIgniter의의 폼 검증 라이브러리를 확장하고 달성하기

$this->form_validation->set_message('validate_member','Member is not valid!'); 
+2

이름이 더 좋을 것이다 당신의 새로운 생성 규칙 TRUE 또는 FALSE

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); class MY_Form_validation extends CI_Form_validation { protected $CI; public function __construct() { parent::__construct(); // reference to the CodeIgniter super object $this->CI =& get_instance(); } public function access_code_unique($access_code, $table_name) { $this->CI->form_validation->set_message('access_code_unique', $this->CI->lang->line('access_code_invalid')); $where = array ( 'access_code' => $access_code ); $query = $this->CI->db->limit(1)->get_where($table_name, $where); return $query->num_rows() === 0; } } 

지금 당신은 쉽게 추가 할 수 있습니다 – Ivan

+0

를 반환해야하지만,에 추가 할 수 있습니다 가독성, 감사합니다 –

+6

필요하지 않을 수 있지만 맨 앞줄은 "/ controller_name/validate_member/blah"를 통해 접근 할 수 없도록합니다 ... 이중 밑줄을 사용하면 완벽하게 허용됩니다 IMO "callback__validate_member";) –

5

한 가장 좋은 방법은 실패 반환해야합니다. 데이터베이스 테이블 usersaccess_code 필드에 대해 access_code_unique이라는 사용자 지정 유효성 검사기를 만들려고한다고 가정 해 보겠습니다.

당신이해야 할 일은 MY_Form_validation.php이라는 클래스 파일을 application/libraries 디렉토리에 생성하기 만하면됩니다. 방법은 그것은 필요는 없습니다 @Ivan 항상 ... "_validate_member"

$this->form_validation->set_rules('access_code', $this->lang->line('access_code'), 'trim|xss_clean|access_code_unique[users]'); 
관련 문제