티스토리 뷰

공부 이야기

[JSP] 게시판 만들기6

판다(panda) 2011. 7. 11. 00:01

아오;.. 글 다 썼는데; 날려먹었네요;..
따른곳에서 화면 불러와서 저장했더니만;.. 다른 글이 저장되어버렸어요;..

지난 게시판5 글을 쓰고 한참만에 글을 쓰네요..

요새 제우스, 웹투비, 오라클 연동하고있어서 바빴습니다..

제가 벌려 놓은 일은 많은데.. 수습할 능력이 안되다 보니;..

이렇게 벌려 놓으면 소는 누가 키워;..

아무튼 오늘은 게시판 만들기 마지막 수정을 해보도록 하겠습니다..

수정은 지금까지 했던 부분 연결만 하면 됩니다..

수정할 글을 보기 위해 글 내용을 보고..
그 글 내용에서 수정 버튼을 누르면 수정 폼이 나타나고..
그 수정 폼에서 작성한 것을.. 다른 페이지로 넘겨주고..
그 페이지에서 오라클로 업데이트 하면서 글 목록 페이지로 넘어가는 것을 해볼겁니다..

우선 'board_modify.jsp' 를 만듭니다..
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>
<%@ page language="java" import="java.util.*, java.sql.*, javax.servlet.http.*" %>

글 내용을 봐야 하니까 당연히 오라클 메소드가 필요하겠죠?..
<%!
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
{
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
Class.forName( "oracle.jdbc.driver.OracleDriver" );
Connection conn = DriverManager.getConnection( url, "study", "study" );
return conn;
}

String TO_DB( String str ) throws Exception
{
if( str == null )
return null;
return new String( str.getBytes( "8859_1" ), "euc-kr" );
}
%>

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

 Vector v_name = new Vector();
 Vector v_email = new Vector();
 Vector v_homepage = new Vector();
 Vector v_subject = new Vector();
 Vector v_memo = new Vector();
 Vector v_hits = new Vector();

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

 int aid = Integer.parseInt( str_aid );

글 내용을 불러옵니다..
지금까지 해왔던 내용들이라 쉽게 이해하실듯 것 같습니다..
 String sql_a = "select dbname, nvl(dbemail,' '), nvl(dbhomepage,' '), dbsubject, dbmemo from board where aid=" + aid;

 
 try
 {
  stmt = conn.createStatement();
  rs = stmt.executeQuery( sql_a );
  if( rs.next() )
  {
   v_name.addElement( rs.getString(1) );
   v_email.addElement( rs.getString(2) );
   v_homepage.addElement( rs.getString(3) );
   v_subject.addElement( rs.getString(4) );
   v_memo.addElement( rs.getString(5) );
  }
 
  stmt.executeUpdate( sql_a );
  rs.close();
  stmt.close();
  conn.close();
 }
 
 catch( Exception e )
 {
  out.println( e.toString() );
  return;
 }

%>

<script language="javascript">
 function writeCheck()
 {
  var form = document.w;

  if( !form.dbsubject.value )
  {
   alert( "제목을 적어주세요" );
   form.dbsubject.focus();
   return;
  }
  if( !form.dbmemo.value )
  {
   alert( "내용을 적어주세요" );
   form.dbmemo.focus();
   return;
  }

  form.submit();
 }
</script>


<html>
<head>
<title>게시판</title>
</head>

<form name=w method=post action="board_modify_insert.jsp">

<table cellspacing = 0 cellpadding = 5 border = 1 width=500>
 <form name=writeform method=post action="board_write_insert.jsp">
  <tr><td><b>이름 </b></td><td><%=v_name.elementAt(0)%><input type=hidden name=dbname size=50  maxlength=30 value="<%=v_name.elementAt(0)%>"></td><tr>
  <tr><td><b>이메일 </b></td><td><input type=text name=dbemail size=50  maxlength=50 value="<%=v_email.elementAt(0)%>"></td></tr>
  <tr><td><b>홈페이지 </b></td><td><input type=text name=dbhomepage size=50  maxlength=50 value="<%=v_homepage.elementAt(0)%>"></td></tr>
  <tr><td><b>제목 </b></td><td><input type=text name=dbsubject size=50  maxlength=50 value="<%=v_subject.elementAt(0)%>"></td></tr>
  <tr><td><b>내용 </b></td><td><textarea name=dbmemo cols=50 rows=10><%=v_memo.elementAt(0)%></textarea></td></tr>
 </form>
</table>

<table cellspacing = 0 cellpadding = 0 border = 0 width=500>
 <tr><td>
 <center>
  <input type=button value="재등록" OnClick="javascript:writeCheck();">
  <input type=button value="목록" OnClick="window.location='board_list.jsp'">
 </center>
 </td></tr>
</table>

</html>

우선 글 수정 폼 부터 만들어봤습니다..
완성하면 이런 모습이겠죠..



그런데.. 글 수정 폼으로 가기 위해선 당연히 수정 버튼이 있어야겠죠?..
'board_view.jsp' 에 글 수정 버튼을 추가합니다..

<script language='javascript'>
 function boardlist()
 {
  location.href="board_list.jsp?str_c_page=<%=str_c_page%>";
 }

 function boarddelete()
 {
  location.href = 'board_delete.jsp?str_aid=<%=aid%>';
 }

 function boardmodify()
 {
  location.href = 'board_modify.jsp?str_aid=<%=aid%>'; 
 }

</script>

<html>
<head>
<title>글보기</title>
</head>

<table cellspacing = 0 cellpadding = 5 border = 1 width=500>
 <tr><td><b>조회수</b></td><td><%=hits%></td></tr>
 <tr><td><b>이름 </b></td><td><%=v_name.elementAt(0)%></td></tr>
 <tr><td><b>이메일 </b></td><td><%=v_email.elementAt(0)%></td></tr>
 <tr><td><b>홈페이지 </b></td><td><%=v_homepage.elementAt(0)%></td></tr>
 <tr><td><b>제목 </b></td><td><%=v_subject.elementAt(0)%></td></tr>
 <tr><td><b>내용 </b></td><td width=350><%=v_memo.elementAt(0)%></td></tr>
</table>
 
<table  cellspacing = 0 cellpadding = 0 border = 0 width=500>
 <tr><td>
  <input type=button value="수정" OnClick="javascript:boardmodify();">
  <input type=button value="삭제" OnClick="javascript:boarddelete();">
  <input type=button value="목록" OnClick="window.location='board_list.jsp'">
 </td></tr>
</table>

</html>

그럼 이렇게 버튼이 생기고.. 버튼을 눌렀을때.. 글 수정 페이지가 나오게 됩니다..

이제 수정 폼에 입력한 값들을 넘겨 받아 오라클에 넣어주는..
'board_modify_insert.jsp' 파일을 만듭니다..

<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>
<%@ page language="java" import="java.util.*, java.sql.*, javax.servlet.http.*" %>

넘겨 받은 값들을 오라클에 집어 넣어야 하니.. 당연히 오라클 메소드가 필요하죠..
<%!
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
{
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
Class.forName( "oracle.jdbc.driver.OracleDriver" );
Connection conn = DriverManager.getConnection( url, "study", "study" );
return conn;
}

String TO_DB( String str ) throws Exception
{
if( str == null )
return null;
return new String( str.getBytes( "8859_1" ), "euc-kr" );
}
%>

<%
 Connection conn = DB_Connection();
 Statement stmt = null;
 stmt = conn.createStatement();
 StringBuffer query = null;

 String dbname = request.getParameter( "dbname" );
 dbname = TO_DB( dbname );
 String dbemail = request.getParameter( "dbemail" );
 String dbhomepage = request.getParameter( "dbhomepage" );
 String dbsubject = request.getParameter( "dbsubject" );
 dbsubject = TO_DB( dbsubject );
 String dbmemo = request.getParameter( "dbmemo" );
 dbmemo = TO_DB( dbmemo );

넘겨준 값이 ?? 이 나오면 예전 처럼  TO_DB 부분을 //dbmemo = TO_DB( dbmemo ); 주석처리 해주시면 됩니다..

 try
 {
  query = new StringBuffer();

이번엔 또 새로운 방식으로 쿼리를 짜봤습니다.. 여러방식으로 쿼리를 작성하는 방법을 알아두시고..
편하신 방법대로 작성하시면 되겠습니다..
이 방법을 저는 가장 많이 사용합니다..  아래 방법을 사용하실땐 강조해놓은 것들은 필수입니다..

  query
   .append("update board set \n")
   .append("  dbemail ='").append(dbemail).append("', \n")
   .append("  dbhomepage ='").append(dbhomepage).append("', \n")
   .append("  dbsubject ='").append(dbsubject).append("', \n")
   .append("  dbmemo ='").append(dbmemo).append("' \n")
   .append("where dbname = '").append(dbname).append("' \n");

  stmt.executeUpdate( query.toString() );
  stmt.close();
  conn.close();

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

 out.print( query.toString());
%>

수정을 완료하면 완료했다는 창을 나타내고 글 목록으로 넘어가게 해줍니다..
<html>
<head>
 <script language=javascript>
  self.window.alert("입력한 글을 수정하였습니다.");
  location.href="board_list.jsp";
 </script>
</head>
</html>

자 그럼 수정을 해봅시다..

이름은 변경 못하도록 했습니다.. 변경하고 싶으면 수정하시면 됩니다..
페이지 테스트 -> 수정 테스트 로 바꿔 보겠습니다..



재등록!.. 과 함께 수정하였다는 알림창!..


그리고 글 목록을 봤는데;.. 헉..
제가 테스트 하려고 올려놓은 글들이 전체 수정되어버렸습니다;..


조건을 이름으로 해놔서.. 이름이 "페이지 테스트" 인건 전부.. 바꾼것이죠;..
원하는건 3번만 바꾸는건데;..

3번만 바꾸기 위해서는 조건이 더 필요합니다..
조건을 추가해 줍시다..

업데이트를 하는 부분인 'board_modify_insert.jsp' 에 아래 부분들을 추가합니다..


 try
{
query = new StringBuffer();

query
.append("update board set \n")
.append(" dbemail ='").append(dbemail).append("', \n")
.append(" dbhomepage ='").append(dbhomepage).append("', \n")
.append(" dbsubject ='").append(dbsubject).append("', \n")
.append(" dbmemo ='").append(dbmemo).append("' \n")
.append("where dbname = '").append(dbname).append("' \n")

글 번호를 조건으로 줘서 이름과 글번호가 같은 글만 수정이 가능하도록 했습니다..
사실 글번호는 중복이 없으니 글번호만 넣어줘도 됩니다..
이름 수정하고 싶은 분들은 where dbname을 위에 dbmemo 처럼 만들어주시고..
and aid 를 where aid 로 바꿔주시면 됩니다..
아무튼 저는 작성자와 글 번호를 조건으로 줬습니다..
.append("and aid = '").append(aid).append("' \n");

stmt.executeUpdate( query.toString() );
stmt.close();
conn.close();



이상태에서 아무리 재등록해봤자 에러? 아마 그럴겁니다..
'board_modify_insert.jsp' 에는 aid 변수를 설정해 둔게 없거든요..

 String dbname = request.getParameter( "dbname" );
dbname = TO_DB( dbname );
String dbemail = request.getParameter( "dbemail" );
String dbhomepage = request.getParameter( "dbhomepage" );
String dbsubject = request.getParameter( "dbsubject" );
dbsubject = TO_DB( dbsubject );
String dbmemo = request.getParameter( "dbmemo" );
dbmemo = TO_DB( dbmemo ); 
String str_aid = request.getParameter( "str_aid" );
int aid = Integer.parseInt( str_aid );


자.. 이제 끝?.. 아니죠.. str_aid 값을 찍어보면 null 값이 나와서 다시 에러가 나올겁니다..
'board_modify.jsp' 에서 aid 값이 안넘어 왔거든요..
그럼 'board_modify.jsp' 에서 aid 값을 'board_modify_insert.jsp' 로 넘겨줍시다..

'board_modify.jsp' 를 수정합니다..

<form name=w method=post action="board_modify_insert.jsp">

input 타입을 히든으로 해서 값이 넘어가는걸 보여주지 않지만.. str_aid 에는 현재 글 번호의 값이 들어갑니다..
<input type="hidden" name="str_aid" value="<%=str_aid %>">
<table cellspacing = 0 cellpadding = 5 border = 1 width=500>
<form name=writeform method=post action="board_write_insert.jsp">
<tr><td><b>이름 </b></td><td><%=v_name.elementAt(0)%><input type=hidden name=dbname size=50 maxlength=30 value="<%=v_name.elementAt(0)%>"></td><tr>
<tr><td><b>이메일 </b></td><td><input type=text name=dbemail size=50 maxlength=50 value="<%=v_email.elementAt(0)%>"></td></tr>
<tr><td><b>홈페이지 </b></td><td><input type=text name=dbhomepage size=50 maxlength=50 value="<%=v_homepage.elementAt(0)%>"></td></tr>
<tr><td><b>제목 </b></td><td><input type=text name=dbsubject size=50 maxlength=50 value="<%=v_subject.elementAt(0)%>"></td></tr>
<tr><td><b>내용 </b></td><td><textarea name=dbmemo cols=50 rows=10><%=v_memo.elementAt(0)%></textarea></td></tr>
</form>
</table>

다 수정했으면 다시 테스트!..
제가 수정을 원하는 3번 글을 수정합니다..



수정 완료!..

글은 8일에 썼는데.. 이것저것 하다보니.. 뒤로 3일이나 밀렸네요 ㅎㅎ..

오늘의 소스코드입니다..



그동안 따라오시느라 수고하셨구요..
더 많이 공부해서 더 좋은 내용 올리도록 노력하겠습니다..


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