- - PR -
チェックボックスについたところのみを変更したい
1|2|3
次のページへ»
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-13 21:48
JSPでMySQLのデータを読み込み、チェックボックスのチェックされたところだけを変更したいと思っています。
データベースのフィールドはNO、NAME、POINTです。 このデータベースのNAMEとPOINTを変えたいと思っています。 途中までプログラムを作ってみたのですが、 データベースの1行目はきちんと変更されるのですが、 2行目以降を変更しようとすると一行目のデータがコピーされてしまいます。 下のプログラムでのfor文のところが原因だと思います。 どう書いたらいいのか教えてください。 よろしくお願いします。 String[] aa = request.getParameterValues("c1"); String NAME = cnvString(request.getParameter("NAME")); int POINT = Integer.parseInt(request.getParameter("POINT")); Statement st = conn.createStatement(); ↓ここの部分をどういうふうに書いたらいいのか教えてください。 ---------------------------------------------------------- String sql = "UPDATE TABLE1 SET " + " NAME = '" + NAME + "', POINT = " + POINT + " WHERE (NO IN("; for(int i=0;i < aa.length; i++){ sql += aa[i]; if (i < aa.length -1) { sql += ","; } else { sql += "))"; } ---------------------------------------------------------- st.executeUpdate(sql); } 省略 <td><input type=\"checkbox\" name=\"c1\" value=\""+ rs.getInt("NO") + "\"></td> 省略 | ||||||||||||
|
投稿日時: 2004-03-15 01:32
説明が不足してて、やりたいことがいまいち見えないのですが、
でやりたいことはあってますか?(ソースを見る限りではそう見えるのですが) | ||||||||||||
|
投稿日時: 2004-03-15 02:53
Clusterさん、ありがとうございます。
Clusterさんの言うとおりです。 説明が不足しており申し訳ありません。 よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2004-03-15 09:13
やりたいことが「すべて同一のNAMEとPOINTで更新する」なら、このSQL文で
あってるような・・・。 チェックを付けたNOについて、全て同じPOINT、NOに更新されると思うんですが。
これであってるのでは?同じNAME、POINTにしたいんですよね? それと、SQL文の実行で思った通りにならないなら、実行の直前にSQL文を出力して 確認してみてはいかがでしょう? System.out.println(sql); という一文を、 st.executeUpdate(sql); の前にいれてやるとか。 | ||||||||||||
|
投稿日時: 2004-03-15 11:01
おはようございます。
返信ありがとうございます。 確かに、今のままだと「すべて同一のNAMEとPOINTで更新される」のですが、 「すべて同一のNAMEとPOINTで更新する」のではなく チェックのついたそれぞれのNOについて、NAMEとPOINTを違う値で 更新したいと思っています。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-03-15 11:15
とのことですが、同時に
であると述べられています。「プログラムに何を参考にして値を決定させればいいのか」が不明です。 他のテーブルの内容を参照するですとか、HTMLのHIDDENなり入力テキストを反映するですとか、多分その辺のところだと思うのですが……もうちょっと状況を説明していただいて構わないでしょうか? #それぞれの「NAME」と「POINT」の入力欄がHTML上に並んでいて、そのうちチェックボックスにチェックが入ったものだけをDBに反映かなとは思うのですが…… | ||||||||||||
|
投稿日時: 2004-03-15 11:51
#それぞれの「NAME」と「POINT」の入力欄がHTML上に並んでいて、そのうちチェックボックスにチェックが入ったものだけをDBに反映かなとは思うのですが……
そのとおりです。 MySQLのTable1のデータは次のようになっています。 NO NAME POINT ------------------------ 1 田中 90 2 石田 30 3 松井 60 4 黒田 70 HTML上ではテキストタイプで表示されており、その場で例えば NO2の場合、石田→村上、30→80と書き換えてチェックボックスにチェックをして 更新ボタンを押すと NO NAME POINT ------------------------ 1 田中 90 2 村上 80 3 松井 60 4 黒田 70 このように更新されるようにしたいと思っております。 よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2004-03-15 12:16
って聞いたら、
って言ったじゃないですか・・・。ちゃんと読んでから返事してくださいね。 それはともかく、異なる値で更新したいなら、Update文を1レコードずつ作成し、 実行する必要があります。それなら、Where句でinなんて使う必要は無いです。 単純に、"Where NO = " + aa[i] というSQL文を更新したい数だけ繰り返し 作成し、実行するだけです。 SQL文はそれだけのことですが、それ以前の問題として、NAMEとPOINTが配列で 取れてません。(c1は配列で取ってるのに) これでは、異なる値で更新なんてできるはずも無いです。 注:HTMLフォームがどうなっているのか定かでないですが、チェックボックスc1、 テキストボックスPOINT・NAMEが単純に同数並んでいるのなら、単純に request.getParameterValues とするとうまくいきません。(配列がずれます) これは、HTTPの仕様で、チェックボックスはチェックしたものだけが 送信されるからです。(テキストボックスは当然全て送信される) 結果として、992029さんの例で言えば、
という風に送信されます。ご注意下さい。 | ||||||||||||
1|2|3
次のページへ»
