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

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

whitz 2021. 12. 21. 15:41

< 본문 수정하기 >

 

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

- 비밀번호가 일치해야 게시글을 수정할 수 있다.

 

 

① contents.jsp

 

- 본문 아래 버튼 4개를 추가해보겠다.

- 버튼을 클릭하면 이벤트가 발생하는 것이므로 onclick 속성을 사용

 

<div id="table_search">
	<input type="button" value="수정하기" class="btn" onclick="location.href='updateForm.jsp?num=<%=num%>&pageNum=<%=pageNum%>'">
	<input type="button" value="삭제하기" class="btn" onclick="location.href='deleteForm.jsp?num=<%=num%>&pageNum=<%=pageNum%>'">
	<input type="button" value="답글쓰기" class="btn">
	<input type="button" value="목록으로" class="btn" onclick="location.href='notice.jsp?pageNum=<%=pageNum%>'">
</div>

 

 

② updateForm.jsp

 

- 수정하기 버튼을 클릭하면 updateForm 페이지로 넘어온다.

- boardWrite.jsp 복붙했고 <h1>, 아래 submit 버튼의 value 등 알맞게 고쳐주면된다.

 

<h1>글 수정 페이지</h1>

<%
	// 전달되는 정보저장(파라미터)
	int num = Integer.parseInt(request.getParameter("num"));
	String pageNum = request.getParameter("pageNum");
	
	// DB안에 있는 데이터 저장
	BoardDAO bdao = new BoardDAO();	
	// 기존의 글정보를 가져오기
	BoardDTO bdto = bdao.getBoard(num);


%>

<form action="updatePro.jsp?pageNum=<%=pageNum %>" method="post">
	<input type="hidden" name="num" value="<%=bdto.getNum()%>">
	
<table id="notice">
<tr><th class="tno" colspan="5">ITWILL 게시판(수정)</th></tr>	
	
	<tr>
		<td colspan="2">글쓴이 : </td>
		<td class="left" colspan="3"><input type="text" name="name" value="<%=bdto.getName()%>"></td>
	</tr>
	
	<tr>
		<td colspan="2">글 비밀번호 : </td>
		<td class="left" colspan="3"><input type="password" name="pass"></td>
	</tr>
	
	<tr>
		<td colspan="2">글 제목 : </td>
		<td class="left" colspan="3"><input type="text" name="subject" value="<%=bdto.getSubject()%>"></td>
	</tr>
	
	<tr>
		<td colspan="2">글 내용 : </td>
		<td class="left" colspan="3">
			<textarea rows="10" cols="20" name="content"><%=bdto.getContent() %></textarea>
		</td>
	</tr>
  
</table>


<div id="table_search">
	<input type="submit" value="수정하기" class="btn">
</div>

 

- 기존에 DB에 있던 게시글의 글쓴이, 제목, 본문을 들고와 페이지에서 보여준다.

- 비밀번호는 빈칸으로 되어있고 작성자가 비밀번호를 입력한 후 수정하기 버튼을 클릭해야한다.

- form 태그 안에 input 속성의 type을 hidden으로 하여 글 번호(num)를 들고있는 상태다

 

 

③ updatePro.jsp

 

- 비밀번호 일치여부에 따라 수정이 완료되게 할 것인지 다시 수정 페이지로 돌아가게 할 것인지 구현

- '수정하기' 버튼 눌렀을 때 처리해야할 것들

- 수정한 게시글을 DB로 업데이트 시켜주는 updateBoard(bdto) 메서드의 result 값에 따라 처리해줌

 

<%
	 // 한글처리
	 request.setCharacterEncoding("UTF-8");
	
	 // pageNum 정보저장
	 String pageNum = request.getParameter("pageNum");
	 
	 // 전달된 수정할 정보를 저장 (이름, 비밀번호, 제목, 내용, 글번호)
	 // => 액션태그 사용해서 글 저장
	%>
	<jsp:useBean id="bdto" class="com.itwillbs.board.BoardDTO"/>
	<jsp:setProperty property="*" name="bdto"/>
	
	<%
	  System.out.println(" 수정 정보 : "+ bdto);
	
	  // DAO 객체 생성
	  BoardDAO bdao = new BoardDAO();
	  // 정부 수정 메서드
	  int result = bdao.updateBoard(bdto);
	  
	  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

 

- 작성자가 입력한 비밀번호와 일치하는지 검사가 필요함

 

// updateBoard(bdto)
	public int updateBoard(BoardDTO bdto) {
		int result =-1;		
		
		try {
			// 1.2 디비연결
			con = getCon();
			// 3. sql 쿼리 & pstmt 객체						
			sql = "select pass from itwill_board where num=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, bdto.getNum());
			
			// 4. sql 실행
			rs = pstmt.executeQuery();
			
			// 5. 데이터 처리
			if(rs.next()) {
				if(bdto.getPass().equals(rs.getString("pass"))) {
					// 게시판 글 있음 -> 수정가능
					sql = "update itwill_board set name=?,subject=?,content=? "
							+ "where num=?";
					pstmt = con.prepareStatement(sql);
					// ? 처리
					pstmt.setString(1, bdto.getName());
					pstmt.setString(2, bdto.getSubject());
					pstmt.setString(3, bdto.getContent());
					pstmt.setInt(4, bdto.getNum());
					
					// 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;
	}
// updateBoard(bdto) 끝

 

- 비밀번호 비교를 위해 먼저 select 구문으로 비밀번호(pass)만 들고와서 작성자가 입력한 비밀번호와 equals 한지 비교

- 비밀번호가 일치하면 update구문 실행하여 DB에 업데이트 시켜줌

- 비밀번호가 일치하지 않으면 0을 반환하고 updatePro에서 0은 '비밀번호 오류'라는 알림창을 띄움

- 비밀번호 문제가 아닌 아예 글이 없으면 -1 반환