Javaの掲示板についての削除機能について

このQ&Aのポイント
  • Javaの掲示板の削除機能について質問があります。削除フォームに入力されたパスワードとIDをデータベース内のパスワードとIDと比較して削除またはエラーを表示するように設定したいです。
  • 質問文では、Javaの掲示板の削除機能について確認したいです。入力されたパスワードとIDをデータベース内のパスワードとIDと比較して削除またはエラーを表示するように設定したいです。
  • Javaの掲示板で削除機能を作成しています。削除フォームに入力されたパスワードとIDをデータベース内のパスワードとIDと比較して削除またはエラーを表示するようにしたいです。
回答を見る
  • ベストアンサー

javaの掲示板について

サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); //削除 if(deleteMessage != null){ String sql = "SELECT * FROM MESSAGE_TABLE where ID ="; String rsPassword = request.getParameter("rsPassword"); String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); if (deletepassword.equals(sql) || deleteid.equals(sql)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } if (!deletepassword.equals(sql) || deleteid.equals(sql)){ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } ------------------------------------------------------------------------------------ jsp部分 <input type="deletepassword" size="20"> <input type="hidden" name="id" value="<%= message.getId() %>"> <input type="hidden" name="rsPassword" value="<%= message.getPassword() %>"> <input type="submit" name="deleteMessage" value="削除"> それぞれをこの様な書き方で記述した場合、削除ボタンを押された際に削除フォームに入力されたパスワードとidをデータベース内に格納されているパスワードとidと比較して削除、もしくはエラーという様にできているでしょうか?できていなければ変更点の御指摘をお願いします。 ------------------------------------------------------------------------------------ <% String errorpass = (String)request.getAttribute("errorpass"); if(errorpass != null){ out.println(errorpass); } %> またjspの表示部分を上記のようにしているのですが、out.printlnを使わないで記述する場合どのように書けばよいのでしょうか? よろしくお願いします。

  • ofuoo
  • お礼率76% (23/30)
  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

>String sql = "SELECT * FROM MESSAGE_TABLE where ID ="; SQLを使用してDBへアクセスして結果を受け取ってください。 MessageDaoクラスで参考になるようなことをやっているのではないですか? ><input type="hidden" name="rsPassword" value="<%= message.getPassword() %>"> hiddenはHTMLのソースから参照できるので、 パスワードの値をユーザ側へ送信してはいけません。 これは技術的にはできるけど、セキュリティ的には普通やらないよねといった指摘です。

ofuoo
質問者

お礼

ありがとうございます。この様に改良してみたのですがコンパイルエラーが起こります。 ------------------------------------------------------- Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE where ID =" + deleteid; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { String password = rs.getString("PASSWORD"); } } finally { this.close(rs); this.close(pstmt); this.close(conn); } --------------------------------------------------- エラー: シンボルを見つけられません conn = this.getConnection();       ^ と表示されます。これはなぜ起こるのでしょうか?

その他の回答 (1)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

>エラー: シンボルを見つけられません >conn = this.getConnection();       ^ >と表示されます。これはなぜ起こるのでしょうか? 貼り付けたクラスのインスタンスがgetConnectionメソッドを持っていないから。

関連するQ&A

  • javaの掲示板について

    サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rsPassword = request.getParameter("rsPassword"); if (deletepassword.equals("rsPassword") || deleteid.equals("id")){ Message message = new Message(); message.setId(Integer.parseInt(deleteid)); } if (!deletepassword.equals("rsPassword") || deleteid.equals("id")){ } } 削除成功や、削除パスが違う時に投稿用jspに文を表示して、かつレコードを消すという処理をしたいのですが、そのような記述はどのようにすればいいのでしょうか? 今のままだと判定だけして終わっていると思うのですが思いつきません。 よろしくお願いします。

  • javaの掲示板について

    サーブレットにおいて未入力のチェックを行っているのですがこのままだと、未入力の表示と一緒に空欄の投稿ができてしまいます。 String sendMessage = request.getParameter("sendMessage");               String name = request.getParameter("name"); if(name.equals("")){ errorname = "名前を入力してください"; request.setAttribute("errorname",errorname); } Message message = new Message(); message.setName(name); Vector messageList = dao.getMessageList(); request.setAttribute("MESSAGE_LIST", messageList); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/bbs.jsp"); rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } 空欄の投稿がされないようにするにはどうすればいいのでしょうか? 全く思いつかないので詳しく説明をお願いします。

    • ベストアンサー
    • Java
  • javaの掲示板について

    今現在パスワードを比較して一致していれば削除としたのですがjava.sql.SQLException: Can not issue data manipulation statements with executeQuery().というエラーがtomcatにでます。 サーブレットはこう書いています //削除 if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rspassword = dao.getPassword(deleteid); if (deletepassword.equals(rspassword)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } else{ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } 比較用のパスワードをデータベースから取り出すDAOはこうしています。 public int deleteMessage(String strid) throws Exception { Vector messageList = new Vector(); int i = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ conn = this.getConnection(); String sql = "delete from MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, strid); rs = pstmt.executeUpdate(); } finally { this.close(rs); this.close(pstmt); this.close(conn); } return i; } public String getPassword(String id) throws Exception { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String rspassword = null; try { String deleteid = null; conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); if(rs.next()){ rspassword = rs.getString("PASSWORD"); } } finally { this.close(rs); this.close(pstmt); this.close(conn); } return rspassword; } データベースからパスワードがとれていないから起きているのだとは思うのですが、どのようにしたらとれるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • セッション管理

    失礼いたします。 セッション情報の受け渡しを勉強しています。 送り手側で HttpSession ses = request.getSession(); String login = (String)ses.getAttribute("login"); String name = (String)ses.getAttribute("name"); if( !("ttttt".equals( login )) ) {  //(以下処理) 受けて側で String name = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession ses = request.getSession(); if ( name.equals("admin") && pass.equals("hoge")) { ses.setAttribute("login","ttttt"); ses.setAttribute("name",name); out.println("<h3>ログインしました。</h3>"); } とし、セッション管理を行っています。 しかし、今ひとつこの「セッション情報」と普通のパラメーターの受け渡しの違いが分かりません。どちらも文字として次ページへ送っていますので。セッションがずっと保持されるとはソースのどういう所から分かるのでしょうか?漠然とした質問ですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • JSPとサーブレット間での画面遷移でうまく表示できません。

    いつもお世話になっております。。。 eclipse3.4 tomcat6.0 の環境で作業しています。 JSPから受け取ったパラメータをサーブレットで条件分岐して、 条件ごとにdispatch fowardで異なったページに遷移させるページを作りたいのですが、うまくいきません。 送信JSPで、 <form action="受け取りサーブレット名" method="post"> <input type="radio" name="url" value="value1"checked> <input type="radio" name="url" value="value2"> <input type="radio" name="url" value="value3"> <input type="submit" value="jump!"> </form> と書き、受け取りでサーブレットで public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { perform(request, response); }      private void perform(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException { response.setContentType("text/plain; charset=Windows-31J"); request.setCharacterEncoding("Windows-31J"); request.getParameter("url"); String i = request.getParameter("url"); if( i.equals("value1")) {           request.getRequestDispatcher("/遷移先1").forward(request,response); }else if(i.equals("value2")) {           request.getRequestDispatcher("/遷移先2").forward(request,response); }else if(i.equals("value3")) {           request.getRequestDispatcher("/遷移先3").forward(request,response); としています。 これでJSPからデバッグを実行すると、変数iにparam"url"でとってきた"value1"が入っているので、getParameterが成功しているのが分かりますが、その後なぜか遷移先に移りません。 おそらくdispaccher fowardがうまくいっていないか、 if文が間違ってるかだと思うのですが、 どなたかご教授くださいm(_ _)m

  • ラジオボタンを使って更新 eclipse Tomcat mysql

    ラジオボタンを使って更新するときにデータがnullになってしまう。 更新するときデータが表示状態でデータを買えて更新したい kousin1.java import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class kousin1 extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); } public void doPost PrintWriter out = response.getWriter(); String url = "jdbc:mysql://localhost:3306/aiue"; String user = "root"; //ユーザ名 String pass =""; //パスワード String id1 =""; String name1=""; String address1=""; Connection con = null; //データベースへの接続を行なう Statement smt = null; //SQL実行の仲介者 int syutoku = 0; ResultSet rs = null; String id = request.getParameter("id"); String name = request.getParameter("name"); String address = request.getParameter("address"); String radio = request.getParameter("radio"); try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); con = DriverManager.getConnection(url,user,pass); smt = con.createStatement(); System.out.println("更新"); String sql1 = "UPDATE System.out.println(sql1); smt.executeUpdate(sql1); smt.close(); }catch(SQLException e){ throw new ServletException(e); }catch(Exception e){ e.printStackTrace(); }finally{ if(smt != null){ try{smt.close();}catch(SQLException ignore){} } if(con != null){ try{con.close();}catch(SQLException ignore){} } kousin1.jspへ kousin.jsp <html> <head> </head> <form method="POST" action="kousin1"> <body> <div>コード:<input type="text" name="id" value="<%=request.getAttribute("id")%>" size=40></div> <div>名称:<input type="text" name="name" value="<%=request.getAttribute("name")%>" size=42></div> <div>住所:<input type="text" name="address" value="<%=request.getAttribute("address")%>" size=42></div> <div><input type="hidden" name="syutoku" value="<%=request.getAttribute("syutoku")%>" size=40></div> <input type="submit" value="更新"> </form> </body> </html>

  • ページにジャンプできなくなってしまった。

    テキストフィールドごと違うパラメータを受け取るためにフラグを設定したら色情報を取得するcolorparet.jspにジャンプできなくなってしまいました。試行錯誤していますが解決できません。プログラムは下記のとおりです。問題と思われるところです。 <% String Flag=(String)request.getParameter("hiddenFlag1"); String cs=""; String cs1="";     ・     ・ String cs12=""; String cs13="";%> <% if(Flag!=null && Flag.equals("0")){ cs=(String)request.getParameter("cn"); }else if(Flag!=null && Flag.equals("1"){ cs1=(String)request.getParameter("cn");          ・          ・          ・ }else if(Flag!=null && Flag.equal("13"){     cs13=(String)request.getParameter("cn"); }%> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <SCRIPT language="JavaScript"> function syori(flag){ document.form1.hiddenFlag1.value=flag; document.form1.action="index.jsp"; document.form1.submit(); } </SCRIPT> </head> <form name=form1 method=post action=""> <INPUT type=hidden name=hiddenFlag1 value="">

  • java質問

    @Override protected String execute(HttpServletRequest request, HttpServletResponse response) { String itemName = request.getParameter("iName"); String jancode = request.getParameter("code"); if (!isValidInput(Name, code)) { return "/Order"; } /** * 入力値のチェックを行う */ private boolean isValidInput(String Name, String code,) { /** 未入力チェック処理(省略)*/ return false; } } これをtrueの場合は request.setAttribute("itemName",Name); request.setAttribute("janCode",code); try { Part image = request.getPart("image"); Long fileName = System.currentTimeMillis(); image.write(fileName.toString()); request.setAttribute("fileName", fileName); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "/WEB-INF/view/orderstragedata.jsp"; } といった処理をしたいのですがtrueはどのように作成すればよいのでしょうか?

  • JAVAのチェックボックスの扱いについて

    HTMLから選択された情報をJSPで表示するプログラムを作っているのですがチェックボックスが選択されてるかどうかのプログラムの書き方がわかりません。 とりあえず出来ているところまでのソースを見せます。 ・HTML <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="aa" value="bb"> <input type="checkbox" name="aa" value="cc"> <input type="checkbox" name="aa" value="dd"> <select name="abc"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> ・JSP //情報をもらう String abc = request.getParameter("abc"); String[] aa = request.getParameterValues("aa"); for(int i=0;i<aa.length;i++){ aa[i]; } 上のようにチェックボックスは情報を取り出しているんですが 選択されていないときはエラーになってしまいます。 for文の前に値が入っているかどうかのチェックをしなくてはいけないのですがどのように書いていいかわかりません。 誰か教えてください。

    • ベストアンサー
    • Java
  • JSP→JSP フォームチェック

    困っているので助けてください。 まずプログラムの説明をさせてもらいます。 JSPからfromをつかってJSPにフォーム情報を送ります。 プログラムはこんな感じです。 <form action="abcdefg.jsp" method="post"> <input type="hidden" name="abc" value="abc"> <input type="hidden" name="def" value="def"> <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="bb" value="bb"> <input type="checkbox" name="cc" value="cc"> <input type="submit" value="次へ"> </form> これをabcdefg.jspで受け取る場合 String hidden_abc = request.getParameter("abc"); String hidden_def = request.getParameter("def"); とhiddenは必ず値が入っているのでこれで受け取れるのですが チェックボックスは選択しているかどうかわからないので上の記述では だめなようなのですがどのようなプログラムを書いたらいいのですか? 説明がうまく出来なく申し訳ないです。よろしければ教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう