게시판 글 수정, 삭제 기능 구현하기

민주·2021년 2월 9일

[수정]

[BbsDAO.java]
public int update(int bbsID,String bbsTitle,String bbsContent) {
    //특정 bbsID에 해당하는 제목과 타이틀 바꾸기
	String SQL = "UPDATE BBS SET bbsTitle=?, bbsContent=? WHERE bbsID=?";
	try {
	    PreparedStatement pstmt = conn.prepareStatement(SQL);  
	    pstmt.setString(1, bbsTitle); //게시글 제목
	    pstmt.setString(2, bbsContent); //게시글 내용
	    pstmt.setInt(3, bbsID); //게시글 번호
	    return pstmt.executeUpdate();
	}catch(Exception e) {
	    e.printStackTrace();
	}
	return -1; //데이터베이스 오류발생
}
- 글 수정을 위해 BbsDAO에 update함수를 추가한다.
- 쿼리문을 UPDATE로 해서 글 제목, 글 내용을 수정 가능하게 한다.
- 정상적으로 수정이 되면 return >= 1
[update.jsp]
int bbsID=0;
//view.jsp에서 url파라메터로 보낸 bbsID를 받는다.
if(request.getParameter("bbsID")!=null){
    bbsID= Integer.parseInt(request.getParameter("bbsID"));
}
if(bbsID==0){ //bbsID가 존재하지않으면 alert띄우고 bbs.jsp로 돌려보냄
    PrintWriter script = response.getWriter();
    script.println("<script>");
    script.println("alert('유효하지 않은 글입니다.')");
    script.println("location.href = 'bbs.jsp'");
    script.println("</script>");
}
Bbs bbs = new BbsDAO().getBbs(bbsID);//작성자로 bbs를 가져옴
if(!userID.equals(bbs.getUserID())){
    PrintWriter script = response.getWriter();
    script.println("<script>");
    script.println("alert('수정권한이 없습니다.')");
    script.println("location.href = 'view.jsp'");
    script.println("</script>");
}
- write.jsp랑 거의 유사한데 이 코드를 추가해 줌으로써 bbsID(작성자)와 UserID(사용자)를 비교하여 
  같지 않을 경우 alert후 돌려보낸다. 
[update.jsp]
<form action="updateAction.jsp?bbsID=<%=bbsID %>" method="post">
  <table class="table table-striped" style="border: 1px solid #dddddd">
    <thead>
      <tr>
	<th colspan="2" style="background-color: #eeeeee; 
    	  text-align: center;">게시판 수정 양식</th>
      </tr>
    </thead>
    <tbody>
      <tr>
	<td><input type="text" class="form-control" placeholder="글 제목" 
             name="bbsTitle" maxlength="50" 
	     value="<%=bbs.getBbsTitle()%>"/></td>
      </tr>
      <tr>
	<td><textarea class="form-control" placeholder="글 내용" 
      	     name="bbsContent" maxlength="2048" style="height: 350px;">
             <%=bbs.getBbsContent()%></textarea></td>
      </tr>
    </tbody>
  </table>
  <input type="submit" class="btn btn-primary pull-right" value="수정하기"/>
</form>
- <td>에 value를 넣으므로써 기존 글이 보이게한 뒤 수정 가능하게 한다.
- 수정한 bbsTitle,bbsContent는 updateAction.jsp로 보내지게 된다.
[updateAction.jsp]
Bbs bbs = new BbsDAO().getBbs(bbsID);//작성자로 bbs를 가져옴
if(!userID.equals(bbs.getUserID())){
    PrintWriter script = response.getWriter();
    script.println("<script>");
    script.println("alert('수정권한이 없습니다.')");
    script.println("location.href = 'view.jsp'");
    script.println("</script>");
} else{
    if(request.getParameter("bbsTitle") == null || 
       request.getParameter("bbsContent") == null){
	PrintWriter script = response.getWriter();
	script.println("<script>");
	script.println("alert('입력되지 않은 사항이 있습니다.')");
	script.println("history.back()");//이전페이지로 돌려보냄
	script.println("</script>");
    }else{
	BbsDAO bbsDAO = new BbsDAO();
	int result = bbsDAO.update(bbsID,request.getParameter("bbsTitle"),
        request.getParameter("bbsContent"));
	if(result == -1){
	    PrintWriter script = response.getWriter();
	    script.println("<script>");
	    script.println("alert('글 수정에 실패했습니다.')");
	    script.println("history.back()");
	    script.println("</script>");
	}else {
	    PrintWriter script = response.getWriter();
	    script.println("<script>");
	    script.println("location.href='bbs.jsp'");
	    script.println("</script>");
	}
    }		
}
- update.jsp에서 보낸 파라메터를 받아 bbsTitle와 bbsContent의 값이 null이면 alert후 돌려보낸다.
- 둘 다 null이 아니라면 bbsDAO.update()함수에 값을 넣어 정상적으로 수정이 됐을때는 bbs.jsp로 
  실패했을경우에는 alert후 전페이지로 돌아가게한다.

[삭제]

public int delete(int bbsID) {
    String SQL = "UPDATE BBS SET bbsAvailable=0 WHERE bbsID=?";
    try {
	PreparedStatement pstmt = conn.prepareStatement(SQL); 
	pstmt.setInt(1, bbsID); //게시글 제목
	return pstmt.executeUpdate();
    }catch(Exception e) {
	e.printStackTrace();
    }
    return -1; //데이터베이스 오류발생
}
- 글을 삭제하더라도 글에대한 정보가 남아 있을수 있도록 bbsAvailable=0으로 바꿔줌으로 써 
  삭제글임을 표시한다.
- bbsAvailable=0은 getList()함수로인해 게시판에서 보이지 않는다.
[deleteAction.jsp]
Bbs bbs = new BbsDAO().getBbs(bbsID);//작성자로 bbs를 가져옴
    if(!userID.equals(bbs.getUserID())){
        PrintWriter script = response.getWriter();
	script.println("<script>");
	script.println("alert('권한이 없습니다.')");
	script.println("location.href = 'view.jsp'");
	script.println("</script>");
    } else{
	BbsDAO bbsDAO = new BbsDAO();
	int result = bbsDAO.delete(bbsID);
	if(result == -1){
	    PrintWriter script = response.getWriter();
	    script.println("<script>");
	    script.println("alert('글 삭제에 실패했습니다.')");
	    script.println("history.back()");
	    script.println("</script>");
    } else{
	PrintWriter script = response.getWriter();
	script.println("<script>");
	script.println("location.href='bbs.jsp'");
	script.println("</script>");
    }
}		
- 위의 로그인이 되지 않은 상황은 writeAction.jsp랑 같다.
- bbsID와 UserID가 다르다면 alert후 돌려보낸다.
- bbsDAO.delete()함수를 호출하여 정상적으로 삭제가 될 시에는 bbs.jsp로 보내고 
  실패했을 경우에는 alert후 전 페이지로 돌려보낸다.
profile
개발이좋아요

0개의 댓글