[JSP] 게시판 만들기 세번째 - 다시 만드는 게시판5
그리고 시간이 된다면.. 리스트 페이지에서 색 변환되는것에 다시 도전해보도록 하겠습니다..
우선 외형적으로 수정폼은 등록폼과 똑같습니다.. 등록에서 수정으로 바뀐것 빼곤 말이죠..
하지만 내부적으로는 많이 틀립니다..
우선 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> </td>
<td>제목 </td>
<td><input name="subject" size="50" maxlength="100" value="<%=rs.getString("SUBJECT") %>"></td>
<td> </td>
</tr>
<tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
<tr height="25">
<td> </td>
<td>이름 </td>
<td><input name="name" size="50" maxlength="50" value="<%=rs.getString("NAME") %>"></td>
<td> </td>
</tr>
<tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>
<tr height="25">
<td> </td>
<td>내용 </td>
<td><textarea name="contents" cols="50" rows="13"><%=contents %></textarea></td>
<td> </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> </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> </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 에는 이 부분이 수정 안되있으니 참고하세요..
저작권 표시 꼭!.. 상업적 이용 절대 불가!.. 컨텐츠 변경 안됨!..