[10/30] 회원가입 디테일 잡기

2022. 10. 30. 02:10·📗 self-study/📗 KH정보교육원 당산지원

<이메일>

😱 이메일 중복 확인

😱 메일 최대 길이 30자 제한


<닉네임>

😱 닉네임 중복 확인

이메일 중복 확인 참고하여 설정

 

닉네임 2~10자 제한

회원가입 폼에서 중복확인 버튼을 눌렀을 때 진행되는 이벤트이기 때문에 onclick 속성에 선언적 함수 걸기

onchange속성으로 중복확인 버튼 없이 자동으로 중복확인하도록 수정함!

(이메일 중복체크도 동일)

더보기

1. memberEnrollForm.jsp

  <tr>
        <th colspan="6">닉네임</th>
    </tr>
    <tr>
        <th colspan="6">
            <input type="text" name="memNickname" minlength="2" maxlength="10" onchange="nicknameCheck();" required>
        </th>
    </tr>
    <tr>
        <td colspan="6">
            <div><label id="nicknameCheckOutput"></label></div>
        </td>
    </tr>
                        
                        
<script>
	// 닉네임 중복체크
    function nicknameCheck() {
        var $memNickname = $("#enroll_table input[name=memNickname]");

        $.ajax({
            url : "nicknameCheck.me",
            data : {checkNickname : $memNickname.val()},
            success : function(result) {

                // result 값은 "possible" 또는 "impossible"
                if(result == "impossible") {

                    $("#nicknameCheckOutput").text("이미 존재하는 닉네임이므로 사용할 수 없습니다.").css("color","red").css("font-size","12px");
                    $memNickname.val("");
                    $memNickname.focus();

                } else {

                    $("#nicknameCheckOutput").text("사용 가능한 닉네임입니다!").css("color","yellow").css("font-size","12px");

                }

            },
            error : function () {
                console.log("닉네임 중복 체크용 ajax 통신 실패!");
            }

        });
    }
</script>

2. NicknameCheckController (/nicknameCheck.me)

니가 보낸 키값에 request.getParameter을 사용해서 밸류 넣어 줄게!

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    // checkNickname이라는 변수에 든 value값 뽑기
	    String checkNickname = request.getParameter("checkNickname");

	    // 전달값인 밸류를 서비스로 넘겨서 요청 처리 후 결과 받기
        // 응답 데이터는 1개만 넘기기 때문에 JSON 필요 없이 Ajax로 해결 가능
        // 넘겨 주기
	    int count = new MemberService().nicknameCheck(checkNickname);
	    
	    // 응답 데이터에 한글이 있다면 깨질 수도 있으니 문서 타입과 인코딩 방식 알려 주기
	    response.setContentType("text/html; charset=UTF-8");
	    
	    // DB까지 다녀온 count에 중복 이메일 값이 있다면 1, 없다면 0이 담겨 있을 것 
	    if(count > 0) {
	        response.getWriter().print("impossible");
	    } else {
	        response.getWriter().print("possible");
	    }
	  
	}

3. MemberService

    // 닉네임 중복체크용 서비스
    public int nicknameCheck(String nicknameCheck) {
        
        Connection conn = JDBCTemplate.getConnection();
        
        int count = new MemberDao().nicknameCheck(conn, nicknameCheck);
        
        JDBCTemplate.close(conn);
        
        return count;
        
    }

4. MemberDao

    public int nicknameCheck(Connection conn, String checkNickname) {
        
        // SELECT문 => ResultSet 객체 (숫자 1개)
        
        // 필요한 변수 세팅
        int count = 0;
        PreparedStatement pstmt = null;
        ResultSet rset = null;
        
        String sql = prop.getProperty("nicknameCheck");
        
        try {
            pstmt = conn.prepareStatement(sql);
            
            pstmt.setString(1, checkNickname);
            
            rset = pstmt.executeQuery();
            
            if(rset.next()) {
                count = rset.getInt("COUNT(*)");
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            
            JDBCTemplate.close(rset);
            JDBCTemplate.close(pstmt);
            
        }
        
        return count;
        
    }

5. member-mapper.xml

	<entry key="nicknameCheck">
		SELECT COUNT(*)
		FROM MEMBER
		WHERE MEM_NICKNAME = ?
	</entry>

 

😱  닉네임 2~10자리의 한글, 영문, 숫자, 특수문자

2~10자리 설정(minlength, maxlength) 완료

더보기

1. memberEnrollForm.jsp

<script>     	
    // 닉네임 중복 체크용 제이쿼리
    function nicknameCheck() {
        var $memNickname = $("#enroll_table input[name=memNickname]");
        let nickname = $("#memNickname").val();
        let regNickname = /^[a-zA-Z0-9ㄱ-ㅎ가-힣]{2,10}$/;

        $.ajax({
            url : "nicknameCheck.me",
            data : {checkNickname : $memNickname.val()},
            success : function(result) {

                // result 값은 "possible" 또는 "impossible"
                if(result == "impossible") {

                    $("#nicknameCheckOutput").text("이미 존재하는 닉네임이므로 사용할 수 없습니다.").css("color","red").css("font-size","12px");
                    $memNickname.val("");
                    $memNickname.focus();

                } else {
                    if(regNickname.test(nickname) == false) {
                        $("#nicknameCheckOutput").text("닉네임은 2~10자로 한글/영문자/숫자/특수문자()가 포함될 수 있습니다.").css("color","red").css("font-size","12px");
                    } else {
                        $("#nicknameCheckOutput").text("사용 가능한 닉네임입니다!").css("color","rgb(232, 183, 34)").css("font-size","12px");
                    }
                }

            },
            error : function () {
                console.log("닉네임 중복 체크용 ajax 통신 실패!");
            }

        });
    }
</script>

특수문자 뭐뭐 들어가게 할 건지?? 확인하고 조건 바꾸기

regNickname 초기화 대괄호 안에 추가하면됨!! []

현재 한글,숫자, 영문자 2~10자면 가능한 상태임!


<비밀번호>

😱 비밀번호.val() == 비밀번호 확인.val() 일 때만 넘어가게 조건 걸기

더보기

<비밀번호 일치 확인>

1. memberEnrollForm.jsp

<tr>
    <th colspan="6">비밀번호</th>
</tr>
<tr>
    <th colspan="6">
        <input type="password" class="pwd" id="pwd1" minlength="8" maxlength="16" required>
    </th>
</tr>
<tr>
    <th colspan="6">비밀번호 확인</th>
</tr>
<tr>
    <th colspan="6">
        <input type="password" class="pwd" id="pwd2" minlength="8" maxlength="16" required>
    </th>
</tr>
<tr>
    <th colspan="6">
        <div><label id="pwdCheckOutput"></label></div>
    </th>
</tr>



<script>
    // 비밀번호 확인용 제이쿼리
    $('.pwd').focusout(function() {

        let pwd1 = $("#pwd1").val();
        let pwd2 = $("#pwd2").val();

        if(pwd1 != "" && pwd2 != "") { // 사용자가 비밀번호, 비밀번호 확인을 모두 입력했다면

            if(pwd1 != pwd2) {
                $("#pwdCheckOutput").text("비밀번호가 일치하지 않습니다. 다시 확인해 주세요.").css("color","red").css("font-size","12px");
            } else {
                $("#pwdCheckOutput").text("비밀번호가 일치합니다!").css("color","rgb(232, 183, 34)").css("font-size","12px");
            }
        			
        }

    });
</script>

 

😱  비밀번호 8~16자리 영어 대소문자, 숫자, 특수문자

특수문자 뭐뭐 들어가게 할 건지?? 확인하고 조건 바꾸기

regPwd 초기화 대괄호 안에 추가하면됨!! []

현재 숫자, 영문자 8~20자 면 가능한 상태임!

더보기
<script>
    // 비밀번호 확인용 제이쿼리
    $('.pwd').focusout(function() {

        let pwd1 = $("#pwd1").val();
        let pwd2 = $("#pwd2").val();
        let regPwd = /^[a-zA-Z0-9]{8,20}$/;

        if(pwd1 != "" && pwd2 != "") { // 사용자가 비밀번호, 비밀번호 확인을 모두 입력했다면

            if(pwd1 != pwd2) {
                $("#pwdCheckOutput").text("비밀번호가 일치하지 않습니다. 다시 확인해 주세요.").css("color","red").css("font-size","12px");
            } else {
                if(regPwd.test(pwd2) == false) {
                    $("#pwdCheckOutput").text("비밀번호는 8~20자로 숫자/영어 대,소문자/특수문자()가 포함될 수 있습니다.").css("color","red").css("font-size","12px");
                } else {
                    $("#pwdCheckOutput").text("비밀번호가 일치합니다!").css("color","rgb(232, 183, 34)").css("font-size","12px");
                }
            }

        }

    });
</script>

 


<인증번호>

😱 인증번호 요청 버튼 -> 이메일 중복 아니면 인증번호 보내기

😱 인증 버튼 => 일치하면 submit

더보기

 

저작자표시 비영리 변경금지 (새창열림)
'📗 self-study/📗 KH정보교육원 당산지원' 카테고리의 다른 글
  • [11/1] 게시판 작성, 게시판 상세조회(게시글만), 아이디 저장 쿠키, 회원가입 동의
  • [10/31] 게시판
  • [10/28] 프로젝트 진행 상황 로그인&로그아웃 & 회원가입
  • [10/27] 프로젝트 진행 상황 - 로그인
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[10/30] 회원가입 디테일 잡기
상단으로

티스토리툴바