제목 | DB에서 불러온 값이 없을 때 아래와 같은 에러가 나옵니다. | ||
---|---|---|---|
글쓴이 | 송군 | 작성시각 | 2011/09/29 11:32:06 |
|
|||
상황은 이렇습니다. A PHP Error was encounteredSeverity: Notice Message: Undefined index: password Filename: controllers/member.php Line Number: 236
|
|||
다음글 | 변수 사용의 궁금증 (2) | ||
이전글 | hooks 사용해서 다국어 페이지를 만드는 중 입니다. (3) | ||
변종원(웅파)
/
2011/09/29 11:59:53 /
추천
0
|
한대승(불의회상)
/
2011/09/29 12:16:41 /
추천
0
password가 선언되어 있지 않나보네요.. ^^
member.php 열어서 password 라는 단어로 검색을 해보시면 오류 해결 하실듯.. |
송군
/
2011/09/29 14:28:13 /
추천
0
아이디가 틀렸는데도 다음 폼검증에서 콜백함수를 호출하는것 같습니다ㅠㅠ 아이디가 맞고 비번이 틀리면 비번이 틀렸다고 제대로 나옵니다. 아이디가 맞고 비번도 맞으면 로그인이 정상적으로 이루어 집니다. 아이디가 틀리면 비번 폼검증 콜백함수에서 에러가 나옵니다. function login() { $this->form_validation-> set_rules('user_id', 'User_id','xss_clean|required|callback_login_id'); $this->form_validation-> set_rules('password', 'Password', 'xss_clean|required|callback_login_password'); $this->input->post('user_id');// 패스워드 폼검증에서 이용 if($this->form_validation->run() == FALSE) { $data['sess'] = FALSE; $this->load->view('common/header_v', $data); $this->load->view('member/login'); $this->load->view('common/footer_v'); } else { $this->member_m->login(); redirect('pwoom'); } } //폼검증콜백함수_로그인↓ function login_id( $str ) { $this->db->where( 'm_id', $str ); $query = $this->db->get('Pwoom_member'); $result = $query->num_rows(); if( !$result ) { $this->form_validation->set_message('login_id', '일치하는 아이디가 없습니다.'); return FALSE; } else { return TRUE; } } function login_password( $str ) { $str = md5( $str ); $this->db->where( 'm_id', $this->input->post('user_id') ); $query = $this->db->get('Pwoom_member'); $result = array(); $result = $query->row_array(); if( $result['password'] == $str ) //오류나는 부분 : 아이디가 어긋나서 result[password]가 null일 때 에러가 나는듯합니다 { return TRUE; } else { $this->form_validation->set_message('login_password', 'password가 맞지 않습니다.'); return FALSE; } } |
송군
/
2011/09/29 15:06:41 /
추천
0
alert_helper로 두 함수에 alert을 시켜보았는데
아이디가 불일치 하는 경우에도 login_password 함수에서 alert이 나오는 것을 확인했습니다; |
변종원(웅파)
/
2011/09/29 15:16:12 /
추천
0
로직이 잘못됐는데요?
아이디 중복체크 하시는거 아닌가요? !$result -> 아이디 중복이 아닐 경우 true로 리턴해야 하는데 반대네요. 그리고 login_password() 이 함수의 용도는 뭔가요? 로그인 처리하는 함수가 따로 있는데 굳이 앞단에서 미리 로그인 되는지 체크할 필요가 있을까요? 로직을 분화하지 않고 섞어서 작업하면 나누는 의미가 없습니다. |
송군
/
2011/09/29 15:27:57 /
추천
0
웅파님 아닙니다.
아이디 중복체크가 아니라 입력받은 아이디가 DB에 있는지 체크하는 겁니다.^^; 그래서 값이 없을 때 FALSE를 반환한 거구요. login_password() 이 함수의 용도는 입력 받은 패스워드가 같이 입력받은 아이디의 비밀번호가 맞는지 검사하는 함수 입니다. |
변종원(웅파)
/
2011/09/29 19:44:56 /
추천
0
그게 중복체크입니다. ^^
값이 없으면 가입이 가능한 아이디이므로 통과를 시켜야죠. True.... 가입가능한 아이디인데 false를 주면.... 두번째도 앞단에서 할 필요가 있을까 하는겁니다. 어차피 뒷단에서 처리를 하는데요. 양쪽에 놔둘 필요가... 앞단에서 했다고 뒷단에서 안하면 보안문제 생길 수 있구요. |
송군
/
2011/09/29 22:13:52 /
추천
0
헉;; 웅파님 아닙니다. 아닙니다 |
한대승(불의회상)
/
2011/09/29 23:44:08 /
추천
0
ㅎㅎㅎ 결국 null 이 아니고 password 가 동일하면 되는군요.
오류난다고 생각되는 이부분을 if( $result['password'] == $str ) //오류나는 부분 : 아이디가 어긋나서 result[password]가 null일 때 에러가 나는듯합니다 요렇게 해보세요. $result = $query->row_array(); if(!empty($result) && $result['password'] == $str ) //오류나는 부분 : 아이디가 어긋나서 result[password]가 null일 때 에러가 나는듯합니다
|
변종원(웅파)
/
2011/09/30 09:53:38 /
추천
0
아. 메세지가 일치하는 아이디가 없습니다라고 되어 있어서 제가 착각을 했네요. ^^;
답은 불의회상님이... ^^ |
송군
/
2011/09/30 10:33:12 /
추천
0
불의회상님의 답변대로 하니 잘 돌아갑니다. |
소스상의 로직 문제인지 판단을 해야할거 같구요.
제가 보기엔 아이디가 틀렸다면 비번을 체크하기전에 먼저 폼에러를 뿌릴텐데
필요없는 변수를 콜백함수로 넘기시는건 아닌가 싶습니다.
콜백함수는 한번에 하나 처리하고 넘어가는거라 저렇게 나올 수가 없거든요.