저는 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;
}
}
좋아, 한 가지 질문 : 왜 : if/else "if ($ this-> new_model-> save_users())"구문을 사용합니까? 미안하지만 "함수가 실행되면"의미하지는 않습니까? 그러나 당신은 그것을 어디에서 실행합니까? OOP 논리에 익숙하지 않아서 더 공부해야합니다. 두 번째는 다음과 같습니다 : ok, 논리는 실행 중입니다. 그러나 (내가 미리 이야기 한 경우) 위와 같이 실행하면 쿼리가 올바른 작업을 수행하는 경우에도 "모델 내의 오류"가 throw됩니다. (찾았습니까? 삽입하지 않음, 찾지 못함, 삽입) –
함수가 실행되면 함수가 true를 반환하거나 false를 반환한다는 의미는 아닙니다. 나는 새로운 모델 기능으로 나의 대답을 수정할 것이다. – Craig
Aaah ok ... 이제 이해했습니다. 귀하의 자세한 설명을 주셔서 감사합니다, 전에이 조건을 사용하지 마십시오 –