자바 웹 개발자가 될거야/JSP

[JSP] 게시글 삭제하기

whitz 2021. 12. 21. 17:04

< 게시글 삭제하기 >

 

- 본문 보기 페이지에서 삭제하기 버튼을 클릭하면 비밀번호 칸만 있는 페이지를 띄울 것이다.

- 비밀번호가 일치하면 게시글을 삭제시킨다.

 

 

 

[JSP] 게시글 본문 수정하기

< 본문 수정하기 > - 게시글 본문 페이지에서 수정할 수 있는 버튼을 생성해 버튼을 클릭하면 글쓴이, 비밀번호, 제목, 본문 칸이 등장한다. - 비밀번호가 일치해야 게시글을 수정할 수 있다. ① co

heezit.tistory.com

 

- 위에 글보면 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 반환