회원가입시 메일입력 오타방지

회원가입시 메일입력 오타방지

QA

회원가입시 메일입력 오타방지

본문

회원가입시 메일작성할 때 기본 폼은 text로 타이핑해서 입력하게 되어있는데...

 

회원정보를 보면 오타난 분들이 너무 많아서

 

오타방지를 위해 메일 아이디는 직접입력 메일 @뒤에 오는 도메인부분을 select으로 선택하게 하려고

 

폼을 바꿔놓았습니다...


<!-- 오타방지를 위해 메일 선택하게 바꿈 -->
    <li>
        <label for="reg_mb_email" class="sound_only">E-mail<strong>필수</strong></label>
        <?php if ($config['cf_use_email_certify']) {  ?>
        <span class="frm_info">
            <?php if ($w=='') { echo "E-mail 로 발송된 내용을 확인한 후 인증하셔야 회원가입이 완료됩니다."; }  ?>
            <?php if ($w=='u') { echo "E-mail 주소를 변경하시면 다시 인증하셔야 합니다."; }  ?>
        </span>
        <?php }  ?>
        <input type="hidden" name="old_email" value="<?php echo $member['mb_email'] ?>">
                
        <input type="text" name="mb_email1" id="reg_mb_email1" value="<?php echo isset($member['mb_email1'])?$member['mb_email1']:''; ?>" required class="frm_input email required" placeholder="E-mail">
        @
        <input type="text" name="mb_email2" id="reg_mb_email2" value="<?php echo isset($member['mb_email2'])?$member['mb_email2']:''; ?>" readonly class="frm_input email required" placeholder="E-mail 선택">
        <select id="mb_email3" class="frm_input">
            <option value="" selected="selected">E-mail 선택</option>
            <option value="naver.com">naver.com</option>
            <option value="daum.net">daum.net</option>
            <option value="nate.com">nate.com</option>
            <option value="hotmail.com">hotmail.com</option>
            <option value="yahoo.com">yahoo.com</option>
            <option value="empas.com">empas.com</option>
            <option value="korea.com">korea.com</option>
            <option value="dreamwiz.com">dreamwiz.com</option>
            <option value="gmail.com">gmail.com</option>
            <option value="etc">직접 입력</option>
        </select>
    </li>
<!-- // 오타방지를 위해 메일 선택하게 바꿈 -->

 

스크립트 부분도 추가했습니다.

 


// 메일 선택 작업 추가
$('#mb_email3').change(function(){
    var $this = $(this);
    if( $this.val() == 'etc' ) {
        $('#reg_mb_email2').prop('readonly',false).val('직접 입력').focus();
        //console.log('직접 입력');
    }else if( $this.val() != '' ) {
        $('#reg_mb_email2').prop('readonly',true).val($this.val());
        //console.log('메일 선택됨');
    }
});

 

/skin/member/register_form.skin.php 페이지에 이렇게 수정을 했습니다.

 

 

/bbs/register_form_update.php 에서도 $mb_mail 수정


$mb_email       = trim($_POST['mb_email1']).'@'.trim($_POST['mb_email2']);

 

/js/jquery.register_form.js 에 reg_mb_email_check 함수 수정

ajax 로 불러오는 data 부분 수정


data : {
    "reg_mb_email": $("#reg_mb_email1").val() + '@' + $('#reg_mb_email2').val(),
    "reg_mb_id": encodeURIComponent($("#reg_mb_id").val())
}

 

/bbs/ajax.mb_email.php 의 $mb_email 수정


$mb_email = trim($_POST['reg_mb_email1']).'@'.trim($_POST['reg_mb_email2']);

 

이렇게 수정을 했는데 정작 회원 가입하려고 하면

 

이메일 형식이 아니라고 나옵니다...

 

어디를 손봐야 회원가입할때 이메일 아이디는 text로 받고 도메인은 select으로 받게끔 할 수 있을까요??ㅠㅠㅠㅠㅠ

 

 

 

이 질문에 댓글 쓰기 :

답변 4

<input type="text" name="mb_email1" id="reg_mb_email1" value="<?php echo isset($member['mb_email1'])?$member['mb_email1']:''; ?>" required class="frm_input email required" placeholder="E-mail">

 

 <input type="text" name="mb_email2" id="reg_mb_email2" value="<?php echo isset($member['mb_email2'])?$member['mb_email2']:''; ?>" readonly class="frm_input email required" placeholder="E-mail 선택">

 

요기 각각 email 항목 빼세요

답변 감사합니다~!! 이제 확인했네요...

말씀해주신대로 email 클래스를 빼니까 alert의 문구가 달라졌습니다.

E-mail : 이메일 주소 형식이 아닙니다.  <-- 기존에 뜨던 alert 문구

E-mail 주소가 형식에 맞지 않습니다.  <-- email 클래스 제거후 뜨는 alert 문구

이렇게 바뀌었습니다... 저 alert 문구를 찾아보니 /lib/register.lib.php 파일내에

valid_mb_email 함수에서 $reg_mb_email 을 매칭시켜서 주소형식을 걸러내는거 같은데

$reg_mb_email을 어디서 불러오는지 알수 있을까요...??ㅠㅠㅠ

$reg_mb_email 이 변수를 불러오는 곳을 찾아서 변수값을 바꿔줘야 할거 같은데

회원가입, 이메일 관련해서 파일을 찾아봐도 저 변수가 정의되어 있는 곳을 못찾겠습니다....ㅠㅠㅠ

/bbs/ajax.mb_email.php 파일을 열어서

 

아래와 같이 모두 주석처리 해보세요

 

/*

if ($msg = empty_mb_email($mb_email)) die($msg);
if ($msg = valid_mb_email($mb_email)) die($msg);
if ($msg = prohibit_mb_email($mb_email)) die($msg);
if ($msg = exist_mb_email($mb_email, $mb_id)) die($msg);

*/

말씀하신 부분 주석처리하고 가입해보니 올바른 방법으로 이용해달라는 alert 창이 뜨고 약관동의하라는 alert가 뜨네요...ㅠㅠㅠㅠ

도와주셔서 감사합니다... 건드릴 곳이 많은거 같네요;;ㅠㅠㅠㅠ

개발자가 아니라서 sir 내에서 검색해가면서 해보려 했지만... db도 건드려야할 것 같아요...

mb_email에 통으로 저장되는 것도 아이디랑 도메인 분류해서 저장해야

마이페이지에서 출력시킬때도 db에 나뉘어 저장된 값을 불러와야 할거 같은데

제가 건드릴 수 없는 부분인거 같아서... 당장은 제가 하기엔 버거울거 같아요ㅠㅠㅠ

나중에 천천히 뜯어보면서 해봐야 할거 같습니다... 감사합니다~!!ㅠㅠㅠ

/js/jquery.register_form.js

에서 reg_mb_email_check() 함수에 나눠진 이메일을 아래처럼 합쳐서 보내시고요

 

"reg_mb_email": $("#reg_mb_email1").val() + '@' + $("reg_mb_email2").val();

 

 

/bbs/register_form_update.php 에서

38번째 줄쯤에

 

$mb_email       = trim($_POST['mb_email']);

 

이걸

 

$mb_email = trim($_POST['mb_email1']) . '@' . trim($_POST['mb_email2']);

 

이렇게 바꿔보세요

 

자세히 테스트는 안해봐서 오타가 있거나 에러날수도 있을거 같은 아마 이렇게 하면 될겁니다.

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

회원로그인

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