공부 이야기

[JSP] 게시판 만들기 세번째 - 다시 만드는 게시판5

판다(panda) 2012. 3. 14. 00:00
오늘은 수정, 삭제를 해보겠습니다..
그리고 시간이 된다면.. 리스트 페이지에서 색 변환되는것에 다시 도전해보도록 하겠습니다..

우선 외형적으로 수정폼은 등록폼과 똑같습니다.. 등록에서 수정으로 바뀐것 빼곤 말이죠..



하지만 내부적으로는 많이 틀립니다..
우선 hidden 으로 글 번호를 숨겨줬습니다.. 그래야.. update 할때 글 번호로 업데이트하죠..

코딩 시작해보죠..
<%@ page language="java" import="java.sql.*,java.util.*,java.io.*,util.*" contentType="text/html;charset=euc-kr" %>
<%@ page import = "oracle.sql.CLOB" %>

<%!
 Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:ORA2012";
  String username = "study";
  String userpass = "study";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, username, userpass );
  return conn;
 }
%>

<%
 Connection conn = DB_Connection();
 Statement stmt = null;
 ResultSet rs = null;
 StringBuffer query = null;

 String seq = Page.nullToBlank(request.getParameter("seq"));
%>

오라클 연결 메소드 만들어주시구요.. 리스트에서 seq 값을 받아옵니다..

<html>
<head>
<title>3번 게시판</title>
</head>
<body>

<table>
 <tr>
  <td>
   <form name="editForm" method="post" target="action" action="/newboard/newboard_edit_act.jsp" onSubmit='return chkForm(this)'>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
    <tr style="background:url('/newboard/img/table_mid.gif') repeat-x; text-align:center;">
     <td width="5"><img src="/newboard/img/table_left.gif" width="5" height="30" /></td>
     <td>판다의 이상한 게시판 수정</td>
     <td width="5"><img src="/newboard/img/table_right.gif" width="5" height="30" /></td>
    </tr>
   </table>


<%
try
{
 stmt = conn.createStatement();
 query = new StringBuffer();

 String contents ="";

 query.append("SELECT SEQ, NAME, SUBJECT, CONTENTS, \n")
   .append(" TO_CHAR(REG_DATE, 'YYYY-MM-DD') REG_DATE \n")
   .append("FROM NEWBOARD \n")
   .append("WHERE SEQ = '"+seq+"' \n");
 rs = stmt.executeQuery(query.toString());
 if (rs.next()) {
  StringBuffer buf = new StringBuffer();
  Reader input = rs.getCharacterStream(4);
  char[] buffer = new char[1024];
  int byteReader;
  while((byteReader = input.read(buffer,0,1024))!=-1) {
    buf.append(buffer,0,byteReader);
  }
  contents = Page.b_html(buf.toString(),'A');

%>

여기까진 newboard_list 와 같죠?.. 중간에 쿼리 조건 값으로 seq 가 들어간것 빼고 다를께 없습니다..

   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <input type="hidden" name="seq" value="<%=rs.getString("SEQ") %>">
    <tr height="25">
     <td>&nbsp;</td>
     <td>제목&nbsp;&nbsp;</td>
     <td><input name="subject" size="50" maxlength="100" value="<%=rs.getString("SUBJECT") %>"></td>
     <td>&nbsp;</td>
    </tr>
    <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
    <tr height="25">
     <td>&nbsp;</td>
     <td>이름&nbsp;&nbsp;</td>
     <td><input name="name" size="50" maxlength="50" value="<%=rs.getString("NAME") %>"></td>
     <td>&nbsp;</td>
    </tr>
    <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
    <tr height="25">
     <td>&nbsp;</td>
     <td>내용&nbsp;&nbsp;</td>
     <td><textarea name="contents" cols="50" rows="13"><%=contents %></textarea></td>
     <td>&nbsp;</td>
    </tr>
    <tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
    <tr height="1" bgcolor="#82B5DF"><td colspan="4"></td></tr>
    <tr><td colspan="4" height="5"></td></tr>
   </table>

<%
  }
 } catch( Exception e ) {
  out.println( e.toString() );
 }
%>

   <table width="100%" cellpadding="0" cellspacing="0" border="0">
    <tr align="center">
     <td>&nbsp;</td>
     <td colspan="2"><input type="image" src="이미지주소" border="0" alt="수정">
      <a href="/newboard/newboard_list.jsp"><img src="이미지주소" border="0" alt="취소"></a></td>
     <td>&nbsp;</td>
    </tr>
   </table>
   </form>
  </td>
 </tr>
</table>

</body>
</html>

결과 화면입니다..
중간에 <br> 이 들어가는게 보기 싫군요.. 빼버립시다..



 <td><textarea name="contents" cols="50" rows="13"><%=contents.replaceAll("<br>","\n") %></textarea></td>
replaceAll 로.. <br>을 \n로 바꿔 넣습니다..



newboard_add_act 를 newboard_act 로 바꾸고.. 등록에는 insert 수정에는 edit 라는 값을 넣어서..
newboard_act 페이지에서 한번에 처리하려고 했으나.. 귀찮아서;..

add 페이지에서는 <input type="hidden" name="mode" value="insert">
edit 페이지에서는 <input type="hidden" name="mode" value="edit">

newboard_act 페이지에서는 아래와 같이 해주면 되겠죠..
if ( mode = "insert") {}
else if ( mode = "edit" ) {}

여기에 else if ( mode = "del" ) {} 까지 해주면.. 파일 한개에서 3개 쿼리를 처리할 수 있습니다..

전 이미 board_edit, board_del 등을 첫번째 게시판 할때 만들어 놨기에.. 그냥 그대로 진행하겠습니다..

newboard_edit_act 를 만드시던지.. 아니면 위에 방법으로 하시던지.. 그에 대한 판단은 직접하시구요..
저는 newboard_edit_act 를 만들었습니다..

<%@ page language="java" import="java.sql.*,java.util.*,java.io.*,util.*" contentType="text/html;charset=euc-kr" %>
<%@ page import = "oracle.sql.CLOB" %>

<%!
 Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:ORA2012";
  String username = "study";
  String userpass = "study";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, username, userpass );
  return conn;
 }
%>

<%
 Connection conn = DB_Connection();
 Statement stmt = null;
 ResultSet rs = null;
 StringBuffer query = null;

 String seq = request.getParameter("seq");
 String name = request.getParameter("name");
 String subject = request.getParameter("subject");
 String contents = request.getParameter("contents");

 try
 {
  stmt = conn.createStatement();
  query = new StringBuffer();

  query.setLength(0);
  query.append("UPDATE NEWBOARD SET ")
    .append(" NAME = '"+name+"', \n")
    .append(" SUBJECT = '"+subject+"' \n")
    .append("WHERE SEQ = '"+seq+"' \n");
  stmt.executeUpdate(query.toString());


등록하기와 다른 점이 있다면 이부분이겠죠.. insert 에서 update 로 변경된 쿼리입니다..

  conn.setAutoCommit(false);

  query.setLength(0);
  query.append("SELECT CONTENTS FROM NEWBOARD WHERE SEQ= '"+seq+"' FOR UPDATE ");

  rs = stmt.executeQuery( query.toString() );
  if ( rs.next() )
  {
   CLOB clob = (CLOB)rs.getClob(1);
   Writer writer = clob.getCharacterOutputStream();
   Reader src = new CharArrayReader(contents.toCharArray());
   char[] buffer = new char[1024];
   int read = 0;
   while ( (read = src.read(buffer,0,1024)) != -1) {
    writer.write(buffer, 0, read);
   }
   src.close();
   writer.close();

   conn.commit();
   conn.setAutoCommit(true);
  }

 } catch( Exception e ) {
  out.println( e.toString() );
 }

 out.println("<SCRIPT>parent.location.href='/newboard/newboard_list.jsp';</SCRIPT>");
%>

수정 후 화면입니다.. 제대로 수정되네요..



이제 삭제 페이지를 만들겠습니다..

그전에 newboard_list 에서 삭제도 수정처럼 seq 값을 넘겨주게 만듭니다..
    <td><img src="이미지주소" alt="수정" onclick="location.href='/newboard/newboard_edit.jsp?seq=<%=rs.getString("SEQ") %>';"><img src="이미지주소" alt="삭제" onclick="location.href='/newboard/newboard_del.jsp?seq=<%=rs.getString("SEQ") %>';"></td>

newboard_del.jsp 로 만들었습니다..
<%@ page language="java" import="java.sql.*,java.util.*,java.io.*,util.*" contentType="text/html;charset=euc-kr" %>
<%@ page import = "oracle.sql.CLOB" %>

<%!
 Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:ORA2012";
  String username = "study";
  String userpass = "study";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, username, userpass );
  return conn;
 }
%>

<%
 Connection conn = DB_Connection();
 Statement stmt = null;
 ResultSet rs = null;
 StringBuffer query = null;

 String seq = request.getParameter("seq");

 try
 {
  stmt = conn.createStatement();
  query = new StringBuffer();
  conn.setAutoCommit(false);

  query.setLength(0);
  query.append("DELETE FROM NEWBOARD WHERE SEQ = '"+seq+"' \n");
  stmt.executeUpdate(query.toString());

  conn.commit();
  conn.setAutoCommit(true);

 } catch( Exception e ) {
  out.println( e.toString() );
 }

 out.println("<SCRIPT>parent.location.href='/newboard/newboard_list.jsp';</SCRIPT>");
%>

가장 짧은 DELETE!.. 제일 좋아합니다!..

삭제는 잘되는군요.. 근데.. 잘 못 눌러 다른글이 지워졌습니다;..

newboard_list 에서 삭제부분에 요걸 추가해줍니다..
<img src="이미지주소" alt="삭제" onclick="location.href='/newboard/newboard_del.jsp?seq=<%=rs.getString("SEQ") %>'; return confirm('삭제하시겠습니까?');">

결과 화면.. 삭제하기 전에 메세지 창을 띄어 확인을 한 후 삭제하기!..



기본적인 게시판 만들기에 필요한 등록, 수정, 삭제, 글보기 등은 다 끝났네요..

아마 다음 게시판 만들기 세번째 - 다시 만드는 게시판6 은 한참 후에 올라올것 같네요..
올라온다면 색 변경이 완료된 후일겁니다;..

오늘의 소스입니다..


ps.. 헐;.. 취소 눌러도 삭제되는군요;..
<a href="/newboard/newboard_del.jsp?seq=<%=rs.getString("SEQ") %>"><img src="이미지주소" alt="삭제" onclick="return confirm('삭제하시겠습니까?');"></a>

아무래도 원클릭에 두개의 문장이 들어가서 둘다 실행했나봅니다.. a 태그로 이미지를 감싸주고..
이미지엔 원클릭으로 삭제 확인/취소가 나오게 바꿨습니다..

지금 올라와있는 newboard_list 에는 이 부분이 수정 안되있으니 참고하세요..


저작권 표시 꼭!.. 상업적 이용 절대 불가!.. 컨텐츠 변경 안됨!..