CI 묻고 답하기

제목 ID 중복값 관련 문의 있습니다.
글쓴이 amkor 작성시각 2015/09/03 18:30:41
댓글 : 12 추천 : 0 스크랩 : 0 조회수 : 15184   RSS
		if ($sqlkey == "chkID") { // 아이디 중복 체크
			$ADM_ID  	 = get_seg("ADM_ID");
		
			
			$data_view = $this->mCommon->get_data("테이블명", array('ADM_ID' => $ADM_ID));
	   var_dump($data_view["ADM_ID"]);
			if (!$data_view["ADM_ID"]){
				echo "true";
			}	
			else{
				echo "false";
			}	
		}


일단 아작스로 통해서 온 ID값이 중복을 체크 하는데요

소스 보시면 모델 get_data함수를 통해 where절 이용해 만약 입력한 id 값이 있으면
$data_view["ADM_ID"] 이라는 변수에 값이 있을것이고

만약 DB상에 입력한 id값이 없으면
$data_view["ADM_ID"] 이라는 변수에 값이 NULL 이라는 값이 나옵니다.

문제는 값이 없으면 NULL값은 정상적으로 나옵니다.

그러나

            if (!$data_view["ADM_ID"]){

이 구문에서 에러가 나오네요


에러는

A PHP Error was encountered

Severity: Notice

Message: Undefined index: ADM_ID

Filename: member/cMemRegister.php

Line Number: 55


이라고 나와서 echo 가 true라고 나오기 나옵니다.



문제는 여기서 부터 입니다.


 

				$.ajax({
					type:"post",
					url :"/해당링크/",
					data: ajfData,
					success : function(response) {
						if(response=="true") {
							chkIDVal.innerHTML = "사용 가능한 관리자 ID : "+$("#ADM_ID").val();
							chkID.innerHTML = $("#ADM_ID").val();
							$("#ADM_PW").focus();
						}
						else {
							alert("관리자 ID가 중복되었습니다.");
							chkIDVal.innerHTML = '';
							chkID.innerHTML = "";
							$("#ADM_ID").val("");
							$("#ADM_ID").focus();
						}
					}
				});



 






echo가 true면
if(response=="true") { 여기 안으로 빠져 가야하는데

response 찍어봐서 확인해보니
true 만 나오면 되겠지만
저위에 나오는 에러구문까지 나와서 else로 빠져 나가네요.
저 에러구문만 안나게 하면 되는데 방법이 없을까요?
 다음글 포럼 search_m 소스 중 2가지 질문 (8)
 이전글 CI ORACLE SEQ.NEXTVAL 이 두개씩 증가... (3)

댓글

IamMonk / 2015/09/03 21:02:03 / 추천 0
if (!$data_view["ADM_ID"])
구문을 empty()함수로 바꿔서 체크해보면 어떨까요?
if (empty($data_view["ADM_ID"]) == FALSE)
같이요.
모델에서 $data_view["ADM_ID"]에 빈 Array값이 넘어오는 듯 한데요.
amkor / 2015/09/03 22:06:49 / 추천 0
그래도 안되네요 ㅠ,ㅠ 값은 정상적으로 오는데 저 에러 문구 때문에 ㅠ,ㅠ
IamMonk / 2015/09/03 22:28:40 / 추천 0
var_dump($data_view)
출력값을 알 수 있을까요?
Query결과를 Array로 받나요 아니면 Object로 받나요?
IamMonk / 2015/09/03 22:48:57 / 추천 0
if(!@$data_view["ADM_ID"])
        {
            echo "true";
        }
        else 
        {
            echo "false";
        }
이것도 하나의 방법입니다만 $data_view["ADM_ID"]가 정말 어떤상탠지 잘 모르는 상태라 좀 불안하네요.
 
amkor / 2015/09/04 08:27:02 / 추천 0
IamMonk> 답변 감사합니다  
var_dump($data_view) 해당 값은
-만약 중복되지 않는 경우 라면
array(0) { } 
-만약 중복되는 경우 라면
array(12) { ["IDX"]=> string(1) "1" ["ADM_ID"]=> string(7) "ID값" ["ADM_PW"]=> string(6) "비밀번호" ["ADM_NAME"]=> string(9) "이름" ["ADM_LEVEL"]=> string(3) "DEV" ["REGDATE"]=> string(19) "2013-06-25 00:00:00" ["LAST_LOGIN_DATE"]=> string(19) "2015-09-04 08:54:50" ["USG_YN"]=> string(1) "Y" ["UPDATEDATE"]=> NULL ["ADM_EMAIL"]=> NULL ["TEL"]=> NULL ["MOBILE"]=> NULL }

이렇게 나옵니다.
 
amkor / 2015/09/04 08:28:31 / 추천 0
IamMonk> 
if(!@$data_view["ADM_ID"])
이렇게 하면 일단 에러문구는 안나오는데요 ㅠ,ㅠ 감사합니다.

정상적으로 true 아니면 false가 나옵니다.

그러나

view페이지에 








amkor / 2015/09/04 08:29:23 / 추천 0
    $.ajax({
     type:"post",
     url :"/syh/member/cMemRegister/admMemProcess/params/",
     data: ajfData,
     success : function(response) {
      if(response=='true') {
       chkIDVal[removed] = "사용 가능한 관리자 ID : "+$("#ADM_ID").val();
       chkID[removed] = $("#ADM_ID").val();
       $("#ADM_PW").focus();
      }
      else {
       alert("관리자 ID가 중복되었습니다.");
       chkIDVal[removed] = '';
       chkID[removed] = "";
       $("#ADM_ID").val("");
       $("#ADM_ID").focus();
      }
     }
    });
amkor / 2015/09/04 08:30:51 / 추천 0
05번째줄 response을 alert로 때러보니 

정상적으로 true 아니면 false가 나옵니다.

문제는 분명 true인데  

if(response=='true') {

이쪽으로 빠지지 않고

else { 빠져나가네요.

무엇이 문제인지...ㅠ.ㅠ
한대승(불의회상) / 2015/09/04 08:33:45 / 추천 0
"Message: Undefined index: ADM_ID" 이 메시지는 배열에 해당 인덱스 자체가 없을 때 나오는 에러 입니다.
admin이 맞다면 해당 데이터가 배열로 나오겠지만 admin이 아니면 null 이 나오겠지요.
아래처럼 if문 수정이 필요 합니다.
if(!isset($data_view["ADM_ID"]) || !$data_view["ADM_ID"]) {
    return true;
} else {
    return false;
}


 
IamMonk / 2015/09/04 09:27:58 / 추천 0
한대승(불의화상)님 감사합니다.

amkor님,  
 
이부분의 따옴표을 없애보세요.
if(response == true)
<span neue,helvetica,arial,sans-serif"="">
아마도 javascript에서 return값의 string "true"가 boolean의 true로 typecast 되었을 가능성이 있습니다. 이런일이 종종 있어서 전 ASP나 PHP에서 javascript로 return값을 보낼때 의미있는 문구로 사용합니다. 예를 들면 "NON-EXIST" 나 "DUPLICATED" 이런식으로 통일해서요. 좀 허당같지만 debugging할때 나름데로 의미가 있더군요. 아무튼 명확한 답이 아니어서 죄송합니다. 도움이 되었길빕니다.
변종원(웅파) / 2015/09/04 10:02:29 / 추천 0
이번 기회에 알아두셔야 할 것이 php는 변수를 미리 선언하지 않아도 되는데 codeigniter는 위의 케이스처럼
미리 선언되지 않은 변수를 사용할때 경고를 내보냅니다. 
변수를 미리 선언하거나 한대승님 방법처럼 방식을 바꾸거나 에러메세지 레벨을 에러만 출력되도록 하는 방법이 있습니다.
(마지막 방법은 추천하지 않습니다)
amkor / 2015/09/04 12:37:18 / 추천 0
모두 감사합니다.