teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードの追加

2020/09/16 03:57

投稿

Y.Mamoru
Y.Mamoru

スコア47

title CHANGED
File without changes
body CHANGED
@@ -35,4 +35,256 @@
35
35
 
36
36
 
37
37
  ずれた考え方をしてしまっている気がするのですが、
38
- アドバイスを言お願いします。
38
+ アドバイスを言お願いします。
39
+
40
+ 以下全体のコードです。
41
+ ```jsp
42
+ <%@ page language="java" contentType="text/html; charset=UTF-8"
43
+ pageEncoding="UTF-8"%>
44
+ <%@ page import="Change.DataBase"%>
45
+ <%@ page import="java.lang.*" %>
46
+ <!DOCTYPE html>
47
+ <html>
48
+ <head>
49
+ <meta charset="UTF-8">
50
+ <title>Change_task</title>
51
+ <link rel="stylesheet" href="../CSS/Change.css">
52
+ <SCRIPT type="text/javascript" src="../js/Check_Change.js"></SCRIPT>
53
+ </head>
54
+ <body>
55
+ <H1>アンケートフォーム</H1>
56
+ <% DataBase db = new DataBase(); %>
57
+ <%
58
+ if(db.getError() != null){ %>
59
+
60
+ <p><%= System.out.println(db.getError()) %></p>
61
+
62
+ <%
63
+ }else{
64
+ %>
65
+ <P>以下のアンケートフォームを入力して変更ボタンを押下してください</P>
66
+ <FORM method="POST" name="question_form" id="form" action="/Change/ChangeServlet">
67
+ <Input type="hidden" name="hiddenNO" value=<%= request.getParameter("ankeno") %>>
68
+ <input type="hidden" name="move" value="update">
69
+ <TABLE class="table">
70
+ <TR class="th1">
71
+ <TH name="left-table">質問</TH>
72
+ <TH>回答</TH>
73
+ </TR>
74
+
75
+ ~中略~
76
+ </TABLE>
77
+ <DIV class="send_div">
78
+ <INPUT type="submit" class="send_button" value="変更" >
79
+ </DIV>
80
+ </FORM>
81
+ <FORM>
82
+ <DIV>
83
+ <INPUT type="button" class="reset" value="リセット" onClick="location.reload();">
84
+ </DIV>
85
+ </FORM>
86
+ <% } %>
87
+ </body>
88
+ </html>
89
+ ```
90
+
91
+ ```servlet
92
+ package Change;
93
+
94
+ import java.io.IOException;
95
+ import java.sql.Connection;
96
+ import java.sql.PreparedStatement;
97
+ import java.sql.SQLException;
98
+ import java.sql.Statement;
99
+
100
+ import javax.servlet.ServletException;
101
+ import javax.servlet.http.HttpServlet;
102
+ import javax.servlet.http.HttpServletRequest;
103
+ import javax.servlet.http.HttpServletResponse;
104
+
105
+
106
+ public class ChangeServlet extends HttpServlet {
107
+ private static final long serialVersionUID = 1L;
108
+
109
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
110
+ request.setCharacterEncoding("utf-8");
111
+
112
+ //前準備
113
+ String e;
114
+ int count = 0;
115
+ DataBase db = new DataBase();
116
+
117
+ //各データを受け取って、条件に合うのか確かめる
118
+ //郵便番号
119
+ String p1 = request.getParameter("post_num1");
120
+ String p2 = request.getParameter("post_num2");
121
+ if(p1 != null && p1.length() ==3) { //郵便番号1がNullではなくかつ3桁か
122
+ count++;
123
+ }else {
124
+ e = "郵便番号1は3桁の数字で入力してください";
125
+ db.setError(e);
126
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
127
+ }
128
+ if(p2 != null && p2.length() ==4) { //郵便番号2がNullではなくかつ4桁か
129
+ count++;
130
+ }else {
131
+ e = "郵便番号2は4桁の数字で入力してください";
132
+ db.setError(e);
133
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
134
+ }
135
+ //住所チェック
136
+ String address = request.getParameter("address");
137
+ if(address != null) {
138
+ count++;
139
+ }else {
140
+ e = "住所を入力してください";
141
+ db.setError(e);
142
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
143
+ }
144
+ //氏名
145
+ String name = request.getParameter("name");
146
+ if(name != null ) {
147
+ count++;
148
+ }else {
149
+ e = "氏名を入力してください";
150
+ db.setError(e);
151
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
152
+ }
153
+ //年
154
+ String year = request.getParameter("year");
155
+ if(year != null) {
156
+ count++;
157
+ }else {
158
+ e = "生まれ年を入力してください";
159
+ db.setError(e);
160
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
161
+ }
162
+ //月
163
+ String month = request.getParameter("month");
164
+ if(month != null && month.length() <= 2 && Integer.parseInt(month) <= 12 && Integer.parseInt(month) >= 1) {
165
+ count++;
166
+ }else {
167
+ e = "生まれ月は1~12で入力してください";
168
+ db.setError(e);
169
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
170
+ }
171
+ //日
172
+ String date = request.getParameter("date");
173
+ if(date != null && date.length() <= 2 && Integer.parseInt(date) <=31 && Integer.parseInt(date) >=1) {
174
+ count++;
175
+ }else {
176
+ e = "生まれ日は1~31で入力してください";
177
+ db.setError(e);
178
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
179
+ }
180
+ //血液
181
+ String blood = request.getParameter("blood");
182
+ if(blood != null) {
183
+ count++;
184
+ }else {
185
+ e = "血液型を選択してください";
186
+ db.setError(e);
187
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
188
+ }
189
+ //意見
190
+ String opinion = request.getParameter("opinion");
191
+ if(opinion != null && opinion.length() <= 200) {
192
+ count++;
193
+ }else {
194
+ e = "ご意見は200文字まで入力できます";
195
+ db.setError(e);
196
+ request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response);
197
+ }
198
+ //総合
199
+ if(count == 10) {
200
+ //SQL文の準備(すべてのカラムにアンケート内容を入れるので、prepareを使って後からバインドさせる)
201
+ String sql ="UPDATE Information SET POSTNUM = ? , ADDRESS = ? , BIRTHYEAR = ? , BIRTHMONTH = ? , BIRTHDAY = ? , PHONE1 = ? , PHONE2 = ? , PHONE3 = ? , BLOOD = ? , BREAKFAST = ? , OPINION = ? WHERE NO = ?";
202
+ //接続準備
203
+ Connection conn = null;
204
+ PreparedStatement smt = null;
205
+ //更新のコード
206
+ if(request.getParameter("move") == "update") {
207
+ //接続開始
208
+ try {
209
+ conn = DBManager.getConnection();
210
+ //バインド用のSQLを準備
211
+ smt = conn.prepareStatement(sql);
212
+
213
+ //バインド開始
214
+ smt.setString(1, (request.getParameter("post_num1") + request.getParameter("post_num2")));
215
+ smt.setString(2, request.getParameter("address"));
216
+ smt.setString(3, request.getParameter("year"));
217
+ smt.setString(4, request.getParameter("month"));
218
+ smt.setString(5, request.getParameter("date"));
219
+ smt.setString(6, request.getParameter("phone_num1"));
220
+ smt.setString(7, request.getParameter("phone_num2"));
221
+ smt.setString(8, request.getParameter("phone_num3"));
222
+ smt.setString(9, request.getParameter("blood"));
223
+ smt.setString(10, request.getParameter("food"));
224
+ smt.setString(11, request.getParameter("opinion"));
225
+ smt.setString(12, request.getParameter("hiddenNO"));
226
+ //実行
227
+ smt.executeQuery();
228
+
229
+ }catch(SQLException er) {
230
+ throw new ServletException(er);
231
+ }finally {
232
+ if(smt != null) {
233
+ try {smt.close();}catch(SQLException ignore) {}
234
+ }
235
+ if(conn != null) {
236
+ try {conn.close();}catch(SQLException ignore) {}
237
+ }
238
+ }
239
+ //登録をする場合のコード
240
+ }else if(request.getParameter("move") == "regist") {
241
+ //insertさせるNoは、今テーブルに入っている数+1なので、countを求めるSQL
242
+ String sql2 = "SELECT count(No) FROM Information";
243
+ Statement smt2 = null;
244
+
245
+ //接続開始
246
+ try {
247
+ conn = DBManager.getConnection();
248
+ //バインド用のSQLを準備
249
+ smt = conn.prepareStatement(sql);
250
+ //count用のSQL準備&実行
251
+ smt2 = conn.createStatement();
252
+ count = smt2.executeUpdate(sql2);
253
+
254
+ //バインド開始
255
+ smt.setInt(1, count+1);//NOやからここより前にcount(No)の値をselectしておかないといけない。それプラス1
256
+ smt.setString(2, (request.getParameter("post_num1") + request.getParameter("post_num2")));
257
+ smt.setString(3, request.getParameter("address"));
258
+ smt.setString(4, request.getParameter("year"));
259
+ smt.setString(5, request.getParameter("month"));
260
+ smt.setString(6, request.getParameter("date"));
261
+ smt.setString(7, request.getParameter("phone_num1"));
262
+ smt.setString(8, request.getParameter("phone_num2"));
263
+ smt.setString(9, request.getParameter("phone_num3"));
264
+ smt.setString(10, request.getParameter("blood"));
265
+ smt.setString(11, request.getParameter("food"));
266
+ smt.setString(12, request.getParameter("opinion"));
267
+ //実行
268
+ smt.executeQuery();
269
+
270
+ }catch(SQLException er) {
271
+ throw new ServletException(er);
272
+ }finally {
273
+ if(smt != null) {
274
+ try {smt.close();}catch(SQLException ignore) {}
275
+ }
276
+ if(conn != null) {
277
+ try {conn.close();}catch(SQLException ignore) {}
278
+ }
279
+ }
280
+ }
281
+
282
+
283
+ request.getRequestDispatcher("/jsp/result.jsp").forward(request, response);
284
+ }
285
+ doGet(request, response);
286
+ }
287
+
288
+ }
289
+
290
+ ```