회원가입이 빈 경고창이 뜨며 정상적으로되지 않습니다.

회원가입이 빈 경고창이 뜨며 정상적으로되지 않습니다.

QA

회원가입이 빈 경고창이 뜨며 정상적으로되지 않습니다.

본문

안녕하세요 많은 고수 회원님들 ㅠ 

 

질문이 있습니다.

 

http://theicon.kr/plat/bbs/register.php 

 

해당 사이트 개발중 회원가입을 달려고 만드는 도중

 

회원 이미지 업로드가 필요하여 구성한다음 문제가 생겼습니다. 

 

 

1. 혹시나 이미지 업로드 구성한것에 문제가 생겨서 그런가 했는데

 

같은 페이지를 쓰는 로그인 상태에서의 '회원정보수정' 은 아무 문제없이 잘 됩니다.

 

2. 새로 회원가입을 하려고 submit 를 누르면 아이디 부분에 포커스가 맞춰지며 빈 경고창이 뜹니다.

 

3. 테스트로 아이디 부분 체크를 안하고 넘어가보려고 하면 이번에 이메일부분에서 똑같이 막히구요.

 

 

폼안에 회원 이미지 넣는 부분 외에는 손댄것 없는데 

 

무언가 자바스크립트 단에서 문제가 생긴것 같습니다.

 

혹시 어느 단계에서 이런 빈 오류 메세지를 출력하게 되는지 ...  

 

문제를 거슬러 올라가 라이브러리를 봐도 

 

빈 경고 메세지를 출력할 일이 없는데 정말 모르겠습니다...

 

ㅠㅠㅠ

이 질문에 댓글 쓰기 :

답변 3

쓰레드가 너무 길어서 새로 답변 답니다.

jquery.register_form.js 파일에서는 wrest.js와는 별도로 

중복값(mb_id, email, hp, nick 등은 고유한 값을 가져야 하기때문이죠) 체크를 위한 로직들이 들어가 있구요.

해당 중복값 체크를 위해 ajax로 db에 조회해서 고유한 값인지를 체크하죠.

 

wrest.js 는 서브밋 전에 입력된 값들의 validation 체크를 위한 로직들이 구현되어 있습니다.

required 를 제거하신 상태에서는 필수값 체크가 안되므로
아래 email 중복체크 하는 로직 부분에 빈값체크를 먼저 해야 합니다.

        if ((f.w.value == "") || (f.w.value == "u" && f.mb_email.defaultValue != f.mb_email.value)) {

// 아래가 추가내용
        if (f.w.value=="") {
            if (f.mb_email.value.length < 1) {
                alert("이메일을 입력하십시오.");
                f.mb_email.focus();
                return false;
            }
        }
// 여기까지
            var msg = reg_mb_email_check();

계속 체크를 해봐도
wrest.js 로 폼이 비어있어서 생기는 문제는 아닌것 같습니다.

wrest 가 onsubmit  을 가로채서 우선적으로 빈칸과 각종 검사를 하기는 하지만

arlet msg를 띄어주는 주체가 wrest는 아닌거 같네요...

wrest 에서 문제되는 폼은 하이라이트가 되며 포커스가 맞춰지는데

이건 그부분은 깨끗히 패스가 되고

기존 submit를 wrest 이후 돌려주는데 그때 걸리는거 같습니다.

기존 submit 즉 fregisterform_submit를 돌리는 한 무조건 그부분에서 문제가 생기네요..

생각을 해봐도
reg_mb_id_check 에서 $msg == "" 이 되어야 넘어가는데

빈 $msg를 띄어주면서 안남어가는건 "" 이  참거짓으로 인식이 안되고 있는게 문제가 아닌가 싶기도 하구요.

중복값 체크하는 /bbs/ajax.mb_~~.php 파일들, /lib/register.lib.php 파일을
그누보드5 새버전 다운로드 받으셔서 교체해보세요.
커스터마이징 하시는 과정에서 먼가 변경되어 완전 공백이 아닌 " " 또는 줄바뀜 문자가 리턴되는 것이 아닌가 싶네요.

그문제가 확실한것 같습니다.
로그 찍어보니
"
"
이렇게 찍히는거 보니 줄바꿈이 되어있는거 같습니다.
새버전의 것으로 교체해 보았으나 동일하게 문제가 있는거 보니
손을 댄부분부터 다시 찾아봐야 할거 같습니다..

해결했습니다!

근본적인 문제가 어디서 오는지는 이해하지 못했지만.

            msg = msg.replace(/\n/g, "");//행바꿈제거
            msg = msg.replace(/\r/g, "");//엔터제거

일단 개행을 제거해주고 체크하도록 했습니다..

어디서 개행문자가 들어가는지는 모르겠습니다;;

$msg 가 날라오는 부분에서 제가 손대야 하는 부분은 당연히 하나도 없거니와

실제 거슬러서 일일히 체크해도 개행이 되는부분이 일절 없습니다 ㅠ

우선 이것으로 큰 문제는 없을거라고 봅니다만

근본적인 문제가 어디서 오는지 알아봐야 할거 같습니다 ㅠㅠ

도움주셔서 감사합니다 !!!!!

wrest.js 문제는 제가 원 질문 취지를 잘못이해해서 알려드린거 같네요.
빈 경고창이란 말씀을 다르게 이해했음.. ㅋ
늘어지는 쓰레드에 조금 답답했는데.. 암튼 문제지점을 찾았으니 해결방법도 나오겠지요.
잘 해결하세요~~

document.forms['form1'].reset();

이 부분이 문제인것 같습니다.

ID 부분에 포커스가 맞춰지며 경고창과 빈 msg 를 띄어주는거로 보아

        // 회원아이디 검사
        if (f.w.value == "") {
            var msg = reg_mb_id_check();
            if (msg) {
                alert(msg);
                f.mb_id.select();
                return false;
            }
        }

이부분에 문제가 있나 싶어

reg_mb_id_check(); 를 따라가서 보았지만 여기는 건드릴일도 없고... 해서

혹시나 메뉴쪽에 스크립트 나 레이어로 로그인 부분을 구성했는데 혹시 그부분의 자바스크립트와 충돌이 나나 생각중입니다.

document.forms['form1'].reset();

위 코드는 불필요한 코드로 에러만 생성하고 있구요. 삭제하시면 됩니다.

 

빈값에서 포커스가 맞춰지는 부분은 

그누보드에서 기본 제공하는 wrest.js 에서 필수 input 입력체크를 하는 부분때문에 그렇습니다.

 

fregisterform_submit() 함수내에 각 입력단 validation check 해놓으셨던데..

해당 함수에서 체크하기 이전에 wrest.js 에서 먼저 체크를 거치게 되는거죠.

/js/wrest.js 파일하단을 살펴보시면

 


function wrestInitialized() {
    for (var i = 0; i < document.forms.length; i++) {
        if (document.forms[i].onsubmit) {
            document.forms[i].oldsubmit = document.forms[i].onsubmit;
        }
        document.forms[i].onsubmit = wrestSubmit;
    }
}
 
$(document).ready(function(){
    // onload
    wrestInitialized();
});
 

 

위와 같이 폼의 submit 이전에 wrest.js 를 먼저 거치게 되어있는 구조입니다.​

 

다시 회원가입 폼에서 보시면 각 input 태그내에 보시면 required attribute 가 있습니다.

required attribute 가 정의되어 있는 태그는 wrestRequired 가 실행되어

해당 입력이 비어있다는 alert msg 를 리턴해주게됩니다.

​설명이 장황하였는데..

 

/js/wrest.js 파일에서 required 로 검색해보시면 언급해 드린사항에 대해 이해가 가실거에요.

 

그나저나 직접 기획하셨는지는 모르지만.. 재미난 서비스를 기획하셨네요. 기대됩니다. ;-)

 

답변 감사합니다 ㅠ
넵 살짝 알려지지 않은 사회의 아이콘들을 촬영해서 콘텐츠를 만드는 비지니스 입니다. 그러면서
인물들의 테그나 장소 등을 엮어서 서로 연결될수 있도록 해주는데 플랫폼 초점을 맞추고 있는데
제가 개발자 출신이 아니라 그냥 디자이너 출신이라... 어려움이 많이 있습니다 ㅠ  ㅎ 관심 감사합니다 ㅎㅎ

말씀주신대로 alert($msg) 를 출력하는 부분에 확인용 스트링을 달아서 테스트 해본결과

wrest.js 안에 있는 alert 를 통해서 나오는 메세지가 아니었습니다...

        // 회원아이디 검사
        if (f.w.value == "") {
            var msg = reg_mb_id_check();
            if (msg) {
                alert(msg); <--------------------- 이부분이 출력함
                f.mb_id.select();
                return false;
            }
        }

그래서 회원아이디 검사를 주석처리해보고 넘어가면 

다음엔 이메일에서 블럭이 걸리고

둘다 주석 처리하면...

서브밑테스트는 넘어가는데

사용할수 없는 아이디에 등록되어있다고....

추측으로는

우선 회원 수정 부분은 문제 없이 돌아가는것으로 보아 db기록 등에는 문제가 없는데

submit 눌렀을때에 여러 검사하는 부분에서 뭔가 문제가 있는듯 합니다.

힌트로 할만한게

일단 닉네임을 없애기 위해서 닉 부분 검출을 제거를 했었는데

이부분을 확인하기 위해 로그인 상태로 '회원정보 수정' 버튼으로만 확인했었습니다.

그렇게 해서 수정이 잘되면 완료시키는 거였는데 막상 새로 회원가입하는 부분이 이렇게 되어버린거죠 ㅠㅠ

얘기가 어려웠나요? 이해를 잘못하신거 같은데..
수정단에서는 에러가 안날수가 있는게.. 이미 빈값이 아니기 때문이지요.
근데 새로 입력하는 경우에는 입력폼이 빈값이자나요.. 그러니 required 가 정의된 필드들은 wrest.js 에 의해서 빈값체크를 하는거죠.
테스트해보시려면 required 가 정의된 입력필드들에서 required를 지워보세요.
아.. input 태그의 class 내에 정의된 required도 지워주시구요.

말씀주신대로 required 문제로 집중적으로 찾아보고있습니다.
지금 한가지 힌트가 떠올랐는데
원래 그누보드에 로그인.php가 별도로 있는걸
뜯어서 별도 div 레이어로 head에 넣어둔 상태입니다.
여기 아이디 비번 인풋 name 이 mb_id 로
회원가입 하는 아이디 부분 name 과 동일합니다.

제 생각엔 같은 form 안에만 있지 않으면 name이 같아도 괜찮을거라 생각했는데 혹시 다른 form에 있어도
name이 같으면 안될까요??


//// 확인해봤는데 다른 폼이 면 상관이 없긴 합니다 ㅠㅠ
required
부분을 모두 없애고 테스트 하였으나 동일하게 빈 경고가 뜹니다 ㅠ

일단 아이디 / 이메일 중복검사를 건너띄고 뜨는 메시지를 확인해 보려고 합니다.

쓰레드가 길어지네요;;
다른 폼내의 name에서의 문제는 아닐테고..
(님이 작성하신 사용자 스크립트가 어찌되어 있는지를 모두 살펴보지는 못해서 장담은 못하지만)

지금 문제되는것은 회원가입 폼이기 때문에
알려드린데로 회원가입 폼을 사용하는 member 스킨의 register_form.skin.php 에서 required 부분을 모두 제거해보시면
바로 확인이 되실겁니다.

업데이트 파일에서
닉부분을 없애니

회원가입이 가능해졌습니다!

물론 폼에서 아이디 / 이메일  체크 부분이 주석되어 있습니다.

이 부분이 문제가 되는거는 확인인거 같은데 잘 살려야 할거 같습니다...

제가 말이 많아서 죄송합니다 ㅠ 거의 실시간으로 체크하고 수정하고 하고 있네요 ㅠ

워낙에 이런 코딩출신이 아니라.... 수정하고 돌아가고 검수하고 하는게 재미있어서;; =ㅅ=...

회원정보 업데이트 페이지로 넘어가는 과정에서의 메시지는 스크립트단이 아니구요.
/bbs/register_form_update.php 에서 해당 닉네임의 존재여부를 체크하는 코드가 있기에 나타나는 것입니다.
닉네임을 사용하지 않으시면 위 파일에서 아래 라인을 주석처리해주세요.
if ($msg = empty_mb_nick($mb_nick))    alert($msg, "", true, true);

넵 닉부분은 주석처리했습니다.

아이디 인풋 폼체크는 2번 하는거 같은데

서브밋 누르고 넘어가기전에 1번

업데이트 하면서 1번

이중에 지금 서브밋 누르고 넘어가기전에 체크하는것은 주석 해두었습니다.

그랬더니 플로우는 문제없이 넘어갑니다. 다행히 중복 아이디 넣어도

2번째 체크단에서 막히구요.

문제는 그러면 폼이 싹 날라가서 다시 시작해야하니까

서브밋 눌렀을때 자바스크립트 단에서 체크하는 부분을 살려야 .

우선

    function fregisterform_submit(f)
    {
        // // 회원아이디 검사
        // if (f.w.value == "") {
        //    var msg = reg_mb_id_check();
        //    if (msg) {
        //        alert(msg);
        //        f.mb_id.select();
        //        return false;
        //    }
        // }

       
        // // E-mail 검사
        // if ((f.w.value == "") || (f.w.value == "u" && f.mb_email.defaultValue != f.mb_email.value)) {
        //    var msg = reg_mb_email_check();
        //    if (msg) {
        //        alert(msg);
        //        f.reg_mb_email.select();
        //        return false;
        //    }
        // }

이부분을 확인 해봐야 할거 같습니다...

이부분도 wrest 부분하고 관계가 있을까요?

<script src="<?php echo G5_JS_URL ?>/jquery.register_form.js"></script>

를 가져오는것으로 보아 jquery.register_form.js 를 보니

var reg_mb_id_check = function() {
    var result = "";
    $.ajax({
        type: "POST",
        url: g5_bbs_url+"/ajax.mb_id.php",
        data: {
            "reg_mb_id": encodeURIComponent($("#reg_mb_id").val())
        },
        cache: false,
        async: false,
        success: function(data) {
            result = data;
        }
    });
    return result;
}

이렇게

ajax로 연결이 되고있네요.

헌데 이렇게까지 타고넘어가긴엔

이부분들을 전혀 손을 댄적이 없어서요...

답변을 작성하시기 전에 로그인 해주세요.
전체 119 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT