YJ의 새벽

JDBC 활용 연습용11. ( 회원탈퇴 ) 본문

SelfStudy/JDBC

JDBC 활용 연습용11. ( 회원탈퇴 )

YJDawn 2023. 4. 4. 14:42

 

 

 

 

 

--- 현재비밀번호가 맞는지 확인후 , 체크박스 체크하면 , 탈퇴하도록 만들자 .

 

 

--  form 형식  secessionValidate()  함수를 이용하자 .

 

 

 

 

--- myPage.js    회원탈퇴  유효성 검사 . 

 

////////////////////////////////// 회원탈퇴

//회원 탈퇴 유효성 검사
function secessionValidate(){

    const memberPw = document.getElementById("memberPw");
    const agree = document.getElementById("agree");

    // 비밀번호 미작성
    if(memberPw.value.trim().length == 0){
        alert("비밀번호를 입력해주세요.");
        memberPw.focus();
        return false;
    }

    // 약관 동의 체크 여부
    // - 체크박스요소.checked  : 체크 시 true, 해제 시 false 반환

    if( !agree.checked ){ // 체크를 안했을 때
        alert("약관 동의 후 탈퇴 버튼을 클릭해주세요.");
        agree.focus();
        return false;
    }

    // 정말 탈퇴할지 확인
    // - window.confirm("내용") : 대화 상자에 확인/취소 생성
    //      확인 클릭 시 true / 취소 클릭 시 false
    //      window는 생략 가능
    
    if( !confirm("정말 탈퇴 하시겠습니까?") ){ //  취소를 누른 경우
        return false;
    }

     return true;
 }

 

--- MyPageSecessionServlet.class    서블릿클래스    

 

@WebServlet("/member/myPage/secession")
public class MyPageSecessionServlet extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String path = "/WEB-INF/views/member/myPage-secession.jsp";

		req.getRequestDispatcher(path).forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String memberPw = req.getParameter("memberPw");
		
		HttpSession session = req.getSession();
		Member loginMember = (Member) session.getAttribute("loginMember");
		int memberNo = loginMember.getMemberNo();
		
		try {
			MemberService service = new MemberService();
			
			int result = service.secessionMember(memberPw,memberNo);
			
			if( result >0 ) {
				session.invalidate();  // 세션 무효화
				
				session = req.getSession();  // 다시 세팅 
				session.setAttribute("message", "탈퇴 되었습니다.");
				
			  resp.sendRedirect(req.getContextPath());	
			  
				Cookie c = new Cookie("saveId", ""); // 쿠키 생성
				c.setMaxAge(0); // 쿠키 수명
				c.setPath(req.getContextPath()); // 쿠키 적용 경로
				resp.addCookie(c); // 쿠키 클라이언트에 전송
				
			}else {
				session.setAttribute("message", "비밀번호 일치하지않습니다");
				resp.sendRedirect("secession");
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

--- MemberService.class   멤버 탈퇴 서비스

 

	/**       멤버탈퇴 서비스
	 * @param memberPw
	 * @param memberNo
	 * @return
	 * @throws Exception 
	 */
	public int secessionMember(String memberPw, int memberNo) throws Exception {
		
		Connection conn = getConnection();
		
		int result = dao.secessionMember(conn,memberPw,memberNo);
		
		if ( result >0 ) commit(conn);
		else	         rollback(conn);
		
		close(conn);
		
		return result;
	}

 

 

-- MemberDAO.class     회원 삭제여부 N   DAO

 

	/**
	 * 회원삭제 DAO
	 * 
	 * @param conn
	 * @param memberPw
	 * @param memberNo
	 * @return
	 */
	public int secessionMember(Connection conn, String memberPw, int memberNo) throws Exception {

		int result = 0;

		try {
			String sql = prop.getProperty("secession");

			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, memberNo);
			pstmt.setString(2, memberPw);

			result = pstmt.executeUpdate();

		} finally {
			close(pstmt);
		}

		return result;
	}

 

 

-- member-sql.xml    회원탈퇴처리 쿼리문 . 

	<entry key="secessionMember">
        UPDATE MEMBER SET
        SECESSION_FL = 'Y'
        WHERE MEMBER_NO  = ?
        AND MEMBER_PW =?
	</entry>

 

 

 

 

 

 

 

 

 

 

 

 

----------------------- 매 페이지 마다 작동하는 footer.jsp 나 header.jsp 에 

<c:if test="${!empty sessionScope.message}">
    <script>
        alert("${message}");
    </script>
    <c:remove var = "message" scope="session"/>
</c:if>

 넣어주자 . 

입력한 session의 "message" 들이 result 값을 받아 작동한다 .

 

 

 

Comments