자바 웹 개발자가 될거야/JSP
[JSP] 게시글 삭제하기
whitz
2021. 12. 21. 17:04
< 게시글 삭제하기 >
- 본문 보기 페이지에서 삭제하기 버튼을 클릭하면 비밀번호 칸만 있는 페이지를 띄울 것이다.
- 비밀번호가 일치하면 게시글을 삭제시킨다.
- 위에 글보면 contents.jsp에 삭제하기 버튼도 만들어놨다.
- deleteForm.jsp을 새로 만들어서 연결시켜준다.
① deleteForm.jsp
- 삭제하기 버튼 클릭하면 deleteForm 페이지로 넘어온다.
- 테이블 중에서 비밀번호 칸만 남겨두고 다른건 지운다.
<h1>글 삭제 페이지</h1>
<form action="deletePro.jsp?pageNumber=<%=request.getParameter("pageNum") %>" method="post">
<input type="hidden" name="num" value="<%=request.getParameter("num")%>">
<table id="notice">
<tr><th class="tno" colspan="5">ITWILL 게시판</th></tr>
<tr>
<td colspan="2">글 비밀번호 : </td>
<td class="left" colspan="3"><input type="password" name="pass"></td>
</tr>
</table>
<div id="table_search">
<input type="submit" value="글 삭제하기" class="btn">
</div>
</form>
- 수정하기 페이지와 마찬가지로 글 번호를 hidden 으로 가져왔다.
② deletePro.jsp
- 비밀번호 일치여부에 따라 삭제가 완료되게 할 것인지 다시 삭제 페이지로 돌아가게 할 것인지 구현
- '삭제하기' 버튼 눌렀을 때 처리해야할 것들
- 삭제하면 게시글을 DB에서 삭제 시켜주는 deleteBoard(num, pass) 메서드의 result 값에 따라 처리해줌
<%
// 한글처리
request.setCharacterEncoding("UTF-8");
// 전달되는 정보 저장(pageNum, num, pass)
String pageNum = request.getParameter("pageNum");
int num = Integer.parseInt(request.getParameter("num"));
String pass = request.getParameter("pass");
// DAO 객체 생성 - deleteBoard(num, pass)
BoardDAO bdao = new BoardDAO();
int result = bdao.deleteBoard(num,pass);
// 처리결과에 따른 페이지 이동
if(result==1){ // 삭제완료
%>
<script type="text/javascript">
alert("게시글 삭제완료!");
location.href='notice.jsp';
</script>
<%
}else if(result==0){
%>
<script type="text/javascript">
alert("비밀번호 오류");
history.back();
</script>
<%
}else{
%>
<script type="text/javascript">
alert("게시글 없음");
history.back();
</script>
<%
}
%>
③ BoardDAO.java
- 작성자가 입력한 비밀번호와 일치하는지 검사가 필요함
// deleteBoard(num,pass)
public int deleteBoard(int num, String pass) {
int result = -1;
try {
con = getCon();
// 3. sql 쿼리 & pstmt 객체
sql = "select pass from itwill_board where num=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
// 4. sql 실행
rs = pstmt.executeQuery();
// 5. 데이터 처리
if(rs.next()) {
if(pass.equals(rs.getString("pass"))) {
// 3. sql
sql = "delete from itwill_board where num=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
// 4.sql 실행
result = pstmt.executeUpdate();
}else {
result = 0;
}
}else {
result = -1;
}
System.out.println("DAO : 게시판 글 삭제 완료"+result);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeDB();
}
return result;
}
// deleteBoard(num,pass) 끝
- 비밀번호 비교를 위해 먼저 select 구문으로 비밀번호(pass)만 들고와서 작성자가 입력한 비밀번호와 equals 한지 비교
- 비밀번호가 일치하면 delete구문 실행하여 DB에 업데이트 시켜줌
- 비밀번호가 일치하지 않으면 0을 반환하고 deletePro에서 0은 '비밀번호 오류'라는 알림창을 띄움
- 비밀번호 문제가 아닌 아예 글이 없으면 -1 반환