ROCKVORI
30
2017-06-19 12:44:38
19
2955

어느부분이 에러인지를 모르겠습니다...


insertForm.jsp 파일에서 실행 후 추가 하면 insertPro.jsp 파일로 action을 통해 가진다음에
 insertPro.jsp파일에서 response.sendRedirect("list.jsp?id="+id); 을 통해 list.jsp로 가지게 되어있는 구조인데 무엇때문인지 자꾸 insertForm에서 추가를 하면 문제가 추가되지 않았다고만 뜹니다... 꼭 좀 부탁드려요!


 insertForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<link rel="stylesheet" href="style.css"/>

<form name="input" method="post" action="insertPro.jsp">
   <table width=600 border=1 bordercolor="black">
    <tr>
      <td class="label"><label for="question">문제</label>
      <td class="content"><input id="question" name="question" type="text" size="100"
          maxlength="50"  autofocus required></td></tr>
    <tr>
      <td align='center'>보기</td><td align='center'>내용</td></tr>
    <tr>
      <td class="label"><label for="ex1">1</label>
      <td class="content"><input id="ex1" name="ex1" type="text"
          size="100"  maxlength="50" required></td></tr>
    <tr>
      <td class="label"><label for="ex2">2</label>
      <td class="content"><input id="ex2" name="ex2" type="text"
          size="100"  maxlength="50" required></td></tr>
    <tr>
      <td class="label"><label for="ex3">3</label>
      <td class="content"><input id="ex3" name="ex3" type="text"
          size="100"  maxlength="50" required></td></tr>
    <tr>
      <td class="label"><label for="ex4">4</label>
      <td class="content"><input id="ex4" name="ex4" type="text"
          size="100"  maxlength="50" required></td></tr>
    <tr>
      <td class="label"><label for="dap">정답</label>
      <td class="content"><input id="dap" name="dap" type="text"
          size="100"  maxlength="50" required></td></tr>
   
    <tr>
      <td align='center' class="label2" colspan="2"><input type="submit" value="출제하기">
         <input type="reset" value="다시작성"></td></tr>
  </table>
</form>


insertPro.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>

<% request.setCharacterEncoding("utf-8");%>

<%
   String id = request.getParameter("id");
   String question= request.getParameter("question");
   String ex1 = request.getParameter("ex1");
   String ex2 = request.getParameter("ex2");
   String ex3 = request.getParameter("ex3");
   String ex4 = request.getParameter("ex4");
   String dap = request.getParameter("dap");
   Timestamp reg_date=new Timestamp(System.currentTimeMillis());


   Connection conn=null;
   PreparedStatement pstmt=null;
   String str="";

   try{
   String jdbcUrl="jdbc:mysql://localhost:3306/jsptest?useUnicode=true&characterEncoding=UTF-8";
     String dbId="jspid";
     String dbPass="jsppass";
  
   Class.forName("com.mysql.jdbc.Driver");
   conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass);
  
   String sql= "insert into member values (?,?,?,?,?,?,?,?)";
     pstmt=conn.prepareStatement(sql);
     pstmt.setString(1,id);
     pstmt.setString(2,question);   
     pstmt.setString(3,ex1);
     pstmt.setString(4,ex2);
     pstmt.setString(5,ex3);
     pstmt.setString(6,ex4);
     pstmt.setString(7,dap);
     pstmt.setTimestamp(8,reg_date);
     pstmt.executeUpdate();
  
     response.sendRedirect("list.jsp?id="+id);
 
  }catch(Exception e){
   e.printStackTrace();
   out.println("문제가 제대로 출제되지 않았습니다.");
  }finally{
   if(pstmt != null)
    try{pstmt.close();}catch(SQLException sqle){}
   if(conn != null)
    try{conn.close();}catch(SQLException sqle){}
  }
 %>


list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<link rel="stylesheet" href="style.css"/>

<td><a href="insertForm.jsp?id">퀴즈출제</a></td>    
<table border=1 cellspacing=0 cellpadding=4>
  <tr  class="label">
   <td>번호</td>
   <td>제목</td>
   <td>출제일시</td>
   <td>삭제</td>
   
  </tr>
<%

 
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs=null;             
 
  try{
  String jdbcUrl="jdbc:mysql://localhost:3306/jsptest?useUnicode=true&characterEncoding=UTF-8";
     String dbId="jspid";
     String dbPass="jsppass";
 
  Class.forName("com.mysql.jdbc.Driver");
  conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass );

  String sql= "select * from id";
  pstmt=conn.prepareStatement(sql);
  rs=pstmt.executeQuery();

  while(rs.next()){
    String id= rs.getString("id");
    String question= rs.getString("question");
       Timestamp reg_date=rs.getTimestamp("reg_date");
      
    
%>
       <tr>
        <td><%=id%></td>
        <td><%=question%></td>
        <td><%=reg_date.toString()%></td>
        <td><a href="deletePro.jsp?id=<%=id%>">삭제</a></td>       
      </tr>
<%  }
  }catch(Exception e){
  e.printStackTrace();
  }finally{
  if(rs != null)
     try{rs.close();}catch(SQLException sqle){}
  if(pstmt != null)
  try{pstmt.close();}catch(SQLException sqle){}
  if(conn != null)
  try{conn.close();}catch(SQLException sqle){}
  }
%>
</table>

0
0
  • 답변 19

  • 친절한춘향
    1k
    2017-06-19 13:29:31
    뭐라고 에러가 나는지도 적어주세요.
    1
  • 친절한춘향
    1k
    2017-06-19 13:37:45 작성 2017-06-19 13:39:53 수정됨

    insertForm.jsp 에서 name이 id로 된게 없는데요?


    그래서 insertPro.jsp 
    이부분에서 String id = request.getParameter("id"); 이부분에서

    null값이 뜰것이고...그로인해서 에러가 나는것입니다.


    그 null값을 가지고 데이터베이스에 값을 넣고 해야하는데

    try에서 에러가 나서 Exception 에서 걸러낸것같네요^^



    1
  • ROCKVORI
    30
    2017-06-19 14:10:40

    에러가 에러로 나는게 아니라, 페이지가 넘어가지 않는다는 말이었습니다.! 등록되어서 리스트로 넘어가야하는데 문제가 등록되지 않았다고만 떠서요

    0
  • 친절한춘향
    1k
    2017-06-19 14:15:59 작성 2017-06-19 14:21:10 수정됨

    insertPro.jsp에 이미 그렇게 코딩이 되어있어서요...

    insertPro 파일에서...

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

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

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

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

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

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

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

    이런 문구가 있습니다...이것은...


    insertForm.jsp 페이지에서...

    <form name="input" method="post" action="insertPro.jsp">

    <input id="question" name="question" type="text" size="100" 
              maxlength="50"  autofocus required>

    </form>

    이런부분이 있잖아요? name이 question이라는 것이 하나의 문제를 뜻하는

    textbox박스잖아요..값을 입력하고 form을 통해서 submit을 하여 보내는 파일이

    insertPro.jsp인데... 값들이 다 있어서 괜찮은데 id로 받는건 있는데 보내는건 없기때문에

    null값입니다.


    insertForm 에서 

    <input id="question" name="id" type="text" size="100" 
              maxlength="50"  value="(ID값 넣기)" autofocus required>


    이런문구를 form안에 넣으시거나


     insertForm.jsp에서 

    request.getParameter("id")를 제거하셔야 에러가 안납니다.

    다행히 required 의 태그를 사용하셔서 입력을 필수로 하게 해서 다행인 부분이지

    required 태그를 안쓰시고, 값도 입력안하셨다면  그부분도 다 널값이 떠서 안되겠지요.


    일단, insertForm.jsp에서 form안에 name으로  id로 보내주는것이 없는데

    insertPro.jsp에서

    String id = request.getParameter("id"); 이렇게 받을려고 하기 떄문입니다.


     






    0
  • 친절한춘향
    1k
    2017-06-19 14:19:40

    에러는 맞습니다. 익스샙션으로 걸러내서 프로그램이 멈췄을뿐...

    String sql= "insert into member values (?,?,?,?,?,?,?,?)";
         pstmt=conn.prepareStatement(sql);
         pstmt.setString(1,id);
         pstmt.setString(2,question);    
         pstmt.setString(3,ex1);
         pstmt.setString(4,ex2);
         pstmt.setString(5,ex3);
         pstmt.setString(6,ex4);
         pstmt.setString(7,dap);
         pstmt.setTimestamp(8,reg_date); 
         pstmt.executeUpdate();
       
         response.sendRedirect("list.jsp?id="+id);
     
      }catch(Exception e){ 
       e.printStackTrace();
       out.println("문제가 제대로 출제되지 않았습니다.");

    이부분에서 id가 저런형식이라면...null값인데


    디비에다가 id까지 insert 하시는거같은데...null체크를 안하셔서도 그렇고

    값이 null이라서 try안에서 시행한것이라 문제가 제대로 출제되지 않았습니다. 라고 


    뜨는것입니다.



    0
  • 친절한춘향
    1k
    2017-06-19 14:36:00 작성 2017-06-19 14:37:43 수정됨

    id값을 받아서 디비에 넣어줘야하는 문구가 있던데요.


    거기에 request 받기전에 insertForm에서

    <input type= "hidden" id="id" name="id" value="test1">


    이런식으로 아이디를 넣어주는 부분이 필요할것으로 보입니다.

    0
  • 피곤행
    281
    2017-06-19 14:36:53

    디버깅하는 습관을 기릅시다!

    0
  • ROCKVORI
    30
    2017-06-19 14:41:12

    제출자가 말하시길 


    id는 폼양식에서 입력받아 처리하는 것으로 하면 안됩니다. id는 quiz테이블의 id필드 입력값의 개수를 select문을 이용해 가지고와서 Resultset객체개수가 몇개인지를 체크해서 0개이면 id변수에 1을, 1개이면 2를 2개이면 3을 할당한 후 insert문에 입력을 해야한다고 합니다. 이 부분을 처리하는게 내용에서 빠졌다고 하네요... 도무지 이해가 가지 않습니다 ㅠㅠ

    0
  • 피곤행
    281
    2017-06-19 14:50:24 작성 2017-06-19 14:54:30 수정됨

    이미 list.jsp에서 select * from id을 통해 id값을 가지고 오셨네요

    이 값을 토대로 <td><a href="insertForm.jsp?id">퀴즈출제</a></td> 파라미터로 넘겨주셨는데

    insertForm.jsp에서 id값을 받아서 submit하시면 되겠네용

    0
  • 친절한춘향
    1k
    2017-06-19 14:57:29

    그 제출자가 말하는 말이 맞습니다.

    ID가 빠져서 그렇습니다.

    그분이 말하는 부분이 아마...insertForm.jsp에서 form처리에 이전에

    id값을 구해서 넣어주는 부분이 필요하다는 뜻이네요.

    흠..설마..ID가 번호 순번를 의미하는것인것같기도?;;; 그런 의미의 용도라면...

    그냥 max값을 구해서 +1시킨값을 ID에 넣어주고 해도 될듯 합니다.


    Resultset이라는건 쿼리 select를 하고 난 결과의 값...정확히 말하면 위치를 담고있는 객체입니다.

    그래서 그게 0이면 아무것도 없는것이니 당연히 1을...1이면...2..이고...이런식으로 늘리라고 하는

    것같습니다만...


    쉽게 가시려면 이렇게 해보시지요.

    ID필드에 있는 값중에서 제일 큰값을 구해서 그 값을 +1 시키고 ID값에 넣어주세요.


    select max(id) as id from quiz;


    이렇게 쿼리하시면 쿼리테이블에 id필드중에 가장 큰 값을 반환시켜줍니다.


    현재 제일 큰 값을 디비에서 가져오셔서 가져오신 값이 문자형 String이면 integer,parse를 통해서

    +1을 시켜주시고  디비자체가 숫자형식으로 되어있다면 getInt()에서 +1 시켜서 결과값을

    바로 가져오시면 될꺼같네요 그 ID값을

    insertForm.jsp에 form안에  

          <input id="id" name="id" type="hidden" value='아이디값 넣어주세요.'>

    아이디값을 넣어주면 될꺼같습니다.


     


    0
  • ROCKVORI
    30
    2017-06-19 15:08:47

    답변 정말 감사합니다..


    다만 제가 너무 초보라 직접 코딩된게 아니면 무슨말인지 이해가 힘드네요 죄송합니다 ㅠㅠㅠ


    쉽게 가시려면 이렇게 해보시지요.

    ID필드에 있는 값중에서 제일 큰값을 구해서 그 값을 +1 시키고 ID값에 넣어주세요.

    select max(id) as id from quiz;

    이렇게 쿼리하시면 쿼리테이블에 id필드중에 가장 큰 값을 반환시켜줍니다.

    현재 제일 큰 값을 디비에서 가져오셔서 가져오신 값이 문자형 String이면 integer,parse를 통해서

    +1을 시켜주시고  디비자체가 숫자형식으로 되어있다면 getInt()에서 +1 시켜서 결과값을

    바로 가져오시면 될꺼같네요


    이 부분이 이해가 잘 되지 않습니다..

    0
  • 피곤행
    281
    2017-06-19 15:19:04 작성 2017-06-19 15:23:36 수정됨

    말 그대로에요.

    select max(id) as id from quiz;

    quiz라는 테이블에서 id필드값의 최대값을 반환해주는데 제출자의 의도대로 id값을 가져오는것이고,

    가져온 값이 String타입이면 Integer로 형변환을 통해서 id값에 1을 더해주는거죠


    근데 소스상에 select * from id; 부분에서 id테이블이 제출자가 말하는 quiz테이블이라면 

    select * from id;를 통해 구한 id필드의 값을 그대로 이용하시면 될거 같네요

    춘향님 댓글처럼 hidden타입에 id값을 저장해서 폼을 submit하시면 

    String id = request.getParameter("id"); 에서 널포인트가 발생하지 않겠죠??


    0
  • ROCKVORI
    30
    2017-06-21 21:55:36

    코딩이 틀린 부분이 있었습니다... 

    전부 id가 아니라 quiz 테이블이었는데요


    어제 말씀해주신 문제점들을 이제야 이해했습니다. 

    insertForm에는 id(번호)입력 받는값이 없는데 insertPro에서는 요구하고 있기 때문에 이 부분을 처리해야 한다는 점을요.


      String id =

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

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

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

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

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

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

       Timestamp reg_date=new Timestamp(System.currentTimeMillis());



       Connection conn=null;

       PreparedStatement pstmt=null;

       String str="";

       ResultSet rs=null;


       try{

      String jdbcUrl="jdbc:mysql://localhost:3306/jsptest?useUnicode=true&characterEncoding=UTF-8";

         String dbId="jspid";

         String dbPass="jsppass";

       

      Class.forName("com.mysql.jdbc.Driver");

      conn=DriverManager.getConnection(jdbcUrl,dbId ,dbPass);

     

      String sql= "insert into quiz values (?,?,?,?,?,?,?,?)";

      sql= "select * from quiz";

      while(rs.next()){

       cnt++; }


    이런 식으로 처리해보려 하는데, id값을 어떻게 지정하는지 이해가 가지를 않습니다.. 원리는 알겠으나 너무 초보라 적용이 힘드네요..


    0
  • 피곤행
    281
    2017-06-22 13:25:41


    list.jsp에서
    
    <td><a href="insertForm.jsp?id> 부분을
    <td><a href="insertForm.jsp?id="+id> 로 수정



    insertForm.jsp에서
    
    <% 
       String id = request.getParameter("id"); // list.jsp에서 보내준 파라미터 받기
    %>
    
    <form> 태그부분에
    <input type="hidden" name=${param.id}> // 히든에 id값 저장


    0
  • ROCKVORI
    30
    2017-06-23 10:26:53

    답변 감사합니다.


    그러나 순서가 insertForm에서 입력 -> insertPro에서 검증( 이 부분에서 id값이 Form에서 받아오는게 없으므로 입력해주어야 함) -> list에 등록 이렇게 되는 거라 파라미터를 받는게 아닌것 같습니다 ㅠ

    0
  • 피곤행
    281
    2017-06-23 10:42:53

    소스상으로 봤을때 유추해보자면

    시작이 insertForm에서 입력이 아니라 list.jsp에서 퀴즈출제버튼 클릭 부터 시작이니까

    list.jsp (퀴즈 리스트) -> 퀴즈출제 버튼 클릭 -> 입력 후 출제 -> insert 및 글확인 인데

    처음 list.jsp에서 퀴즈 list를 뿌려줄 때 select * from quiz에서 id를 가져와서 id값으로 퀴즈 번호를 매핑시켜주는데 이 id값을 가지고 퀴즈출제로 넘어가도록 코딩하셨는데... insertForm에서 list.jsp에서 넘겨준 파라미터를 이용하는게 맞습니당

    0
  • ROCKVORI
    30
    2017-06-23 10:45:20

    list에 있는건 출제하기가 아니라 출제할수있는 폼으로 다시 돌아가는 것입니다!

    form에서 입력이 시작 맞습니다

    0
  • 피곤행
    281
    2017-06-23 10:47:26 작성 2017-06-23 10:47:53 수정됨

    그러니까요... list에서 출제버튼을 눌러야 insertForm으로 가는데 무슨 소리시지

    본인이 <td><a href="insertForm.jsp?id">퀴즈출제</a></td> 그렇게 코딩 하셨어요

    0
  • 피곤행
    281
    2017-06-23 10:49:25

    <td><a href="insertForm.jsp?id">퀴즈출제</a></td> 에서 id라는 파라미터에 값을 안넣어주셨는데

    <td><a href="insertForm.jsp?id="+id>퀴즈출제</a></td> 로 수정해서 파라미터에 값도 같이 보내주시고

    insertForm에서 table 닫기 전에 hidden타입의 input에 id값 저장시켜서 서브밋하시면 되여


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.