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