2010-07-22 10 views
2

codeigniter에 콜백 함수를 작성하여 데이터베이스에 특정 레코드가 있는지 확인하고 오류가 반환되는지 확인하려고합니다.sql + codeigniter가있는 폼 유효성 검사

제어기에서와 관계있는 코드이다

function firstname_check($str) 
{ 

    if($this->home_model->find_username($str)) return false; 
    true; 
} 

그런 다음 모델은 I find_username() 함수를 사용하여 데이터베이스를 확인한다.

function find_username($str) 
{ 
    if($this->db->get_where('MasterDB', array('firstname' => $str))) 
    { 
    return TRUE; 
    } 

    return FALSE; 
    } 

테스트에서 firstname_check 함수를 사용했으며 작동합니다. 나는 비슷한 것을했다

function firstname_check($str) 
{ 

    if($str == 'test') return false; 
    true; 
} 

그리고 그 경우에는 효과가 있었다. 내 모델의 기능이 왜 필요한지하지 못하는 이유는 확실하지 않습니다. 그리고지도가 인정 될 것입니다.

답변

1
if($this->home_model->find_username($str)) return false; 
    true; 

위의 코드 스 니펫이 주어지면 실제로 반환하지 않습니다. 그 코드가 오타가 아닌 것이면 다음과 같아야합니다.

if($this->home_model->find_username($str)) return false; 
    return true; 

오타가 없었으므로 수정해야합니다.

편집 :

function firstname_check($str) 
{ 
    return $this->home_model->find_username($str); 
}
+0

합니다. 발견해야 할 문자열이 있지만 그렇지 않습니다. 그래서 항상 false를 반환합니다. – Trent

0

그래서 솔루션, if 문에서 쿼리 문을 복용 배치 영역 : 함수가 true를 반환 이후 또한 바로이 작업을 수행 할 수/false를 if 문에 대한 필요가 없습니다 var에 넣은 다음 행을 계산하고 행이> 0이면 무효화합니다.

이것은 내가 원하는 것보다 복잡하지만.

0

이름이 혼란 스럽습니다. 모델 함수는 'find_username'이라고하지만 이름을 찾습니다. 테이블 이름은 'MasterDB'입니다. 데이터베이스 이름처럼 들립니다. '사용자'또는 이와 비슷한 이름으로 지정하면 안됩니까? 나는이처럼 써서 :

모델 기능 :

function user_exists_with_firstname($firstname) 
{ 
    $sql = 'select count(*) as user_count 
      from users 
      where firstname=?'; 
    $result = $this->db->query($sql, array($firstname))->result(); 
    return ((int) $result->user_count) > 0; 
} 

검증 콜백 기능 : 나는 그것을 위해서 var_dump를 사용하여 쿼리에 있어요 것으로 나타났습니다

function firstname_check($firstname) 
{ 
    return !$this->user_model->user_exists_with_firstname($firstname); 
}