수업(국비지원)/JSP
[JSP] MVC MODEL1 방식 - 회원 탈퇴,정보삭제(DeleteForm , Delete)
byeolsub
2023. 4. 19. 17:19
📌 DeleteForm
<%-- /jsp2/src/main/webapp/model1/member/deleteForm.jsp
1. id 파라미터 저장하기
2. login 여부 검증하기
- 로그아웃 상태인 경우 : 로그인하세요. 메세지 출력 후 loginForm.jsp 페이지로 이동
- 관리자가 아니면서 id 파라미터 정보와 login 정보가 다른 경우 : 본인만 탈퇴 가능합니다. 메세지 출력 후 main.jsp페이지로 이동
3. 현재화면 출력하기
--%>
<%@page import="model.MemberDao"%>
<%@page import="model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. id 파라미터 저장하기
String id = request.getParameter("id");
//2. login 정보 조회
String login = (String)session.getAttribute("login"); //login : login된 아이디 정보 값.
if(login == null) { //로그아웃 상태 %>
<script type="text/javascript">
alert("로그인 하세요.")
location.href="loginForm.jsp"
</script>
<%-- 3. login 정보 조회2
로그인 상태. 관리자가 아니고 내 정보가 아닌경우. --%>
<% } else if(!login.equals("admin") && ! id.equals(login)) { %>
<script type="text/javascript">
alert("본인만 탈퇴 가능합니다..")
location.href="main.jsp"
</script>
<% } else { %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>탈퇴 전 비밀번호 입력</title>
<link rel="stylesheet" href="../../css/main.css">
<script type="text/javascript">
function inputcheck(f) {
if(f.pass.value == "") {
alert("비밀번호를 입력하세요.")
f.pass.focus()
return false
}
}
</script>
</head>
<body>
<%-- method="post" : post 방식이면 body 전문 안쪽에 들어가서 우리가 확인 불가. --%>
<form action="delete.jsp" method="post" onsubmit="return inputcheck(this)">
<input type="hidden" name="id" value="<%=id %>">
<table><caption>회원 비밀번호 입력</caption>
<tr><th>비밀번호</th><td><input type="password" name="pass"/></td></tr>
<tr><td colspan="2"><input type="submit" value="탈퇴하기"/></td></tr>
</table></form>
</body>
</html>
<% } %>
📌 Delete
<%--/jsp2/src/main/webapp/model1/member/delete.jsp
1. 파라미터값 변수에 저장.
2. method=POST 여부 확인. why? deletForm에서 가져오는지 확인위함.
3. id가 관리자인 경우 탈퇴 불가.
4. 비밀번호 검증
관리자가 강제 탈퇴인 경우 : 관리자비밀번호
본인 탈퇴인 경우 : 본인 비밀번호
비밀번호 불일치 : 비밀번호 오류 메세지 출력 후 deleteForm.jsp 페이지 이동
5. 비밀번호 일치하는 경우
boolean MemberDao().delete(id) 메소드 호출
회원정보 삭제 성공 :
일반 사용자 : 로그아웃 실행.
탈퇴 성공 메세지 출력. loginForm.jsp 페이지로 이동
관리자 : 탈퇴 성공 메세지 출력. list.jsp 페이지로 이동
회원정보 삭제 실패 :
일반 사용자 : 탈퇴 실패 메세지 출력. info.jsp 페이지로 이동
관리자 : 탈퇴 실패 메세지 출력. list.jsp 페이지로 이동
--%>
<%@page import="model.Member"%>
<%@page import="model.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 파라미터값 변수에 저장.
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String login = (String)session.getAttribute("login");
//2. method=POST 여부 확인. why? deletForm에서 가져오는지 확인위함.
//deleteForm에서 form method = "post" 방식 임을 확인 가능.
//권한 화면단에서 넘어오기때문에 request가 가지고있다.
String msg = null;
String url = null;
if(!request.getMethod().equals("POST")) {
msg = "입력방식이 오류입니다.";
url = "deleteForm.jsp?id="+id;
//3. id가 관리자인 경우 탈퇴 불가. list.jsp 페이지로 이동
} else if (id.equals("admin")) {
msg= "관리자는 탈퇴 불가합니다.";
url = "list.jsp";
//post방식으로 처리하게끔 설정했지만 그게 아닌경우 3-1,3-2로 해야함.
//3-1. 로그아웃 상태인 경우 오류검증
} else if (login == null) {
msg = "로그인 하세요";
url = "loginForm.jsp";
//3-2. 본인 탈퇴 검증
} else if (!login.equals("admin")&& !id.equals(login)) {
msg = "본인만 탈퇴 가능합니다.";
url = "main.jsp";
} else { //입력값 검증
MemberDao dao = new MemberDao();
Member mem = dao.selectOne(login);
//4. 비밀번호 검증
if(!pass.equals(mem.getPass())) {
msg = "비밀번호 오류";
url = "deleteForm.jsp?id="+id;
} else { //비밀번호 일치
//5.비밀번호 일치하는 경우
if(dao.delete(id)) {
msg = id + "회원이 탈퇴 되었습니다.";
if(login.equals("admin")) { //관리자
url= "list.jsp";
} else { //일반 사용자
session.invalidate();
url= "loginForm.jsp";
}
} else {
msg = id + "회원 탈퇴 실패";
if(login.equals("admin")) { //관리자
url= "list.jsp";
} else { //일반 사용자
session.invalidate();
url= "loginForm.jsp";
}
}
}
}
%>
<script type="text/javascript">
alert("<%=msg%>")
location.href="<%=url %>"
</script>
📌 MemberDao.java 에 내용추가
public boolean delete(String id) {
Connection conn = DBConnection.getConnection();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement("delete from member where id=?");
pstmt.setString(1, id);
return pstmt.executeUpdate() >0;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBConnection.close(conn, pstmt, null);
}
return false;
}