2014-12-05 2 views
0

저는 CodeIgniter 초보자입니다. 특히이 경우에는 Form costruction과 같은 CI 기능을 탐색하기 시작했습니다. 나는 이것에 대한 문서를 이미 읽었으며 웹에서 검색했지만 해결책을 찾지 못했습니다.CodeIgniter에서 "A Database Error Occurred"1062 오류가 발생했습니다.

주된 문제점은 특정 값을 입력하면 해당 값이 고유해야한다는 필드를 지정하면 모든 것이 정상적으로 수행되지만, 그렇지 않으면 "데이터베이스 오류 발생했습니다 "1062 오류 (키"키 "에 대한 중복 입력"텍스트 "). 나는 잘못된 방식으로 뭔가를하고있다.

여기에서 코드를 설명합니다. 그 전에, 나는 그것을 읽었습니다. id_unique[tablename.tablefield]을 사용하려면 먼저 해당 필드에 대한 고유 ID를 설정해야합니다. 그게 내가 한 일입니다.

나에게 무슨 일이 일어 났는지 더 설명해 주시겠습니까? 여기

은 모델의 기능입니다 :

function save_users() { 

    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $email = $_POST['email']; 

    $sql = $this->db->query("INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."') "); 
} 

을 그리고 여기 컨트롤러 :

public function index() { 
    $this->load->helper(array('form', 'url')); 

    $this->load->library('form_validation'); 

     $this->form_validation->set_rules("username","username","trim|required|xss_clean|callback_username_check"); 
    $this->form_validation->set_rules("password","password","trim|required|md5"); 
      $this->form_validation->set_rules("email","email","trim|required|valid_email|is_unique[users.email]"); 

    if ($this->form_validation->run() == FALSE) 
    { 
     $this->load->view('myform'); 
    } 
    else 
    { 
     $this->load->view('formsuccess'); 
    } 
} 

public function username_check($str) { 

    if ($str != "admin") { 

     $this->load->model("new_model");    

     $this->form_validation->set_message("username_check", "The %s field cannot have username Test "); 
     $this->form_validation->set_message("is_unique[users.email]","Errore!"); 

     $this->new_model->save_users(); 

     return FALSE; 
    } else { 
     return TRUE; 
    } 
} 

답변

0

난 당신이 100 % 확인이 필요하고 무엇을하지만, 내가 만들 수있는 몇 가지 변화가있다 귀하의 코드에. 예를 들어, 콜백. 콜백 함수에서 사용자를 데이터베이스에 추가해야한다고 생각하지 않습니다.

양식 유효성 검사가 완료되면이 작업을 수행해야합니다.

컨트롤러를 변경합니다. 내가 무슨 짓을했는지

public function index() 
{ 
    $this->load->helper(array('form', 'url')); 
    $this->load->library('form_validation'); 
    $this->load->model('new_model'); 

    $this->form_validation->set_rules('username' 'Username', 'trim|required|xss_clean|callback_username_check'); 
    $this->form_validation->set_rules('password' 'Password', 'trim|required|md5'); 
    $this->form_validation->set_rules('email' 'Email Address', 'trim|required|xss_clean|valid_email|is_unique[users.email]'); 

    if (!$this->form_validation->run()) 
    { 
    $this->load->view('myform'); 
    } 
    else 
    { 
    // Now we add the entry to the database 
    if ($this->new_model->save_user()) 
    { 
     echo 'user added!'; 
    } 
    else 
    { 
     echo 'error within model'; 
    } 
    } 
} 


public function username_check($username) 
{ 
    if ($username == 'admin') 
    { 
    $this->form_validation->set_message('username_check', 'The %s cannot be "admin"'); 
    return false; 
    } 
    else 
    { 
    return true; 
    } 
} 

콜백 함수에서 데이터베이스 항목을 제거하고, 인덱스 기능으로이 이동하고, 양식 유효성 검사가 통과되면이 실행됩니다.

문제가 해결 되었습니까?

이제 함수를 실행하면 "모델 내의 오류"라고 표시됩니다. 이는 모델이 컨트롤러에 아무 것도 반환하지 않기 때문입니다. save_user 함수를 다음과 같이 수정하십시오.

function save_users() 
{ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $email = $_POST['email']; 
    $sql = $this->db->query("INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."') "); 
    return ($this->db->affected_rows() > 0) ? true : false; 
} 
+0

좋아, 한 가지 질문 : 왜 : if/else "if ($ this-> new_model-> save_users())"구문을 사용합니까? 미안하지만 "함수가 실행되면"의미하지는 않습니까? 그러나 당신은 그것을 어디에서 실행합니까? OOP 논리에 익숙하지 않아서 더 공부해야합니다. 두 번째는 다음과 같습니다 : ok, 논리는 실행 중입니다. 그러나 (내가 미리 이야기 한 경우) 위와 같이 실행하면 쿼리가 올바른 작업을 수행하는 경우에도 "모델 내의 오류"가 throw됩니다. (찾았습니까? 삽입하지 않음, 찾지 못함, 삽입) –

+0

함수가 실행되면 함수가 true를 반환하거나 false를 반환한다는 의미는 아닙니다. 나는 새로운 모델 기능으로 나의 대답을 수정할 것이다. – Craig

+0

Aaah ok ... 이제 이해했습니다. 귀하의 자세한 설명을 주셔서 감사합니다, 전에이 조건을 사용하지 마십시오 –

관련 문제