質問編集履歴

2

修正

2022/04/17 09:54

投稿

Fujiman
Fujiman

スコア41

test CHANGED
File without changes
test CHANGED
@@ -94,6 +94,7 @@
94
94
  </head>
95
95
  <body id="log_body">
96
96
  <?php
97
+ // 登録成功時とエラー表示用モーダル
97
98
  if($error_flag){
98
99
  print '<div class="modal2">';
99
100
  print '<input class="modal-check" type="checkbox" id="modal-check"/>';

1

ページ用のPHPとSQLでのテーブル生成コードを追加しました*****************

2022/04/17 09:51

投稿

Fujiman
Fujiman

スコア41

test CHANGED
File without changes
test CHANGED
@@ -9,8 +9,325 @@
9
9
  my.cnfのmax_allowed_packetを最大の(?)
10
10
  16MBにしても同様のエラーになります。
11
11
  画像ファイルはどれも600KBくらいのものです
12
-
13
12
  このような問題はどこを修正すれば回避できるでしょうか?
14
-
15
-
16
-
13
+ 以下にPHPとデータベースのコードを掲示します。
14
+ このPHPでは画像を2つまで選択するのは問題なく処理されますが
15
+ 3つ画像を選択すると上記のようなエラーになります
16
+
17
+ ```PHP
18
+ <?php
19
+ require_once('dbConfig.php'); // データベース接続用定数の読み込み
20
+ ini_set('display_errors', 1);
21
+ ini_set('error_reporting', E_ALL);
22
+ $error_flag = false;
23
+ $stmt_error = 'GET';
24
+
25
+ if($_SERVER['REQUEST_METHOD'] == 'POST'){
26
+ $link = mysqli_connect(DB_HOST, DB_USER, DB_USER_PASS, DB_NAME);
27
+ if ($link == null) {
28
+ die("接続に失敗しました:" . mysqli_connect_error());
29
+ }
30
+ $title = $_REQUEST['title'];
31
+ $resolution = $_REQUEST['resolution'];
32
+ $detail = $_REQUEST['detail'];
33
+ $schoolyear = $_REQUEST['schoolyear'];
34
+ $subject = $_REQUEST['subject'];
35
+ $keyword = $_REQUEST['keyword'];
36
+ $source = $_REQUEST['source'];
37
+
38
+ if (!empty($_FILES['image']['name'])) {
39
+ $filename = $_FILES['image']['name'][0];
40
+ $filetype = $_FILES['image']['type'][0];
41
+ $filecontent = file_get_contents($_FILES['image']['tmp_name'][0]);
42
+ $size = $_FILES['image']['size'][0];
43
+ if ($_FILES['image']['name'][1] !== "") {
44
+ $filename2 = $_FILES['image']['name'][1];
45
+ $filetype2 = $_FILES['image']['type'][1];
46
+ $filecontent2 = file_get_contents($_FILES['image']['tmp_name'][1]);
47
+ $size2 = $_FILES['image']['size'][1];
48
+ }else{
49
+ $filename2 = "";
50
+ $filetype2 = "";
51
+ $filecontent2 = "";
52
+ $size2 = "";
53
+ }
54
+ if ($_FILES['image']['name'][2] !== "") {
55
+ $filename3 = $_FILES['image']['name'][2];
56
+ $filetype3 = $_FILES['image']['type'][2];
57
+ $filecontent3 = file_get_contents($_FILES['image']['tmp_name'][2]);
58
+ $size3 = $_FILES['image']['size'][2];
59
+ }else{
60
+ $filename3 = "";
61
+ $filetype3 = "";
62
+ $filecontent3 = "";
63
+ $size3 = "";
64
+ }
65
+ }
66
+
67
+ if($title == '' || $resolution == '' || $detail == '' || $schoolyear == '' || $subject == '' || $keyword == ''){
68
+ $error_flag = true;
69
+ }
70
+ if(!$error_flag){
71
+ $sql = "INSERT INTO `jirei`(`title`, `resolution`, `detail`, `schoolyear`, `subject`, `keyword`, `source`, `image_name`, `image_type`, `image_content`, `image_size`, `image_name2`, `image_type2`, `image_content2`, `image_size2`, `image_name3`, `image_type3`, `image_content3`, `image_size3`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
72
+ if ($stmt = mysqli_prepare($link, $sql)) {
73
+ mysqli_stmt_bind_param($stmt, "ssssssssssisssisssi",$title, $resolution, $detail, $schoolyear, $subject, $keyword, $source, $filename, $filetype, $filecontent, $size, $filename2, $filetype2, $filecontent2, $size2, $filename3, $filetype3, $filecontent3, $size3);
74
+ mysqli_stmt_execute($stmt);
75
+ $stmt_error = mysqli_stmt_error($stmt);
76
+ // var_dump($stmt_error);
77
+ // exit();
78
+ mysqli_stmt_close($stmt);
79
+ }
80
+ }
81
+ }
82
+
83
+ ?>
84
+
85
+ <!DOCTYPE HTML>
86
+ <html lang ="ja">
87
+ <head>
88
+ <link href="https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet">
89
+ <link rel="stylesheet" href="./css/font-awesome.min.css">
90
+ <link rel="stylesheet" href="./css/style.css">
91
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
92
+ <meta charset="utf-8">
93
+ <title>登録フォーム</title>
94
+ </head>
95
+ <body id="log_body">
96
+ <?php
97
+ if($error_flag){
98
+ print '<div class="modal2">';
99
+ print '<input class="modal-check" type="checkbox" id="modal-check"/>';
100
+ print '<div class="modal-body">';
101
+ print '<div class="modal-window">';
102
+ print '<label class="modal-label" for="modal-check">';
103
+ print '<svg width="16" height="16">';
104
+ print '<polygon points="14.4,3.1 12.9,1.6 8,6.6 3.1,1.6 1.6,3.1 6.6,8 1.6,12.9 3.1,14.4 8,9.4 12.9,14.4 14.4,12.9 9.4,8 "></polygon>';
105
+ print '</svg>';
106
+ print '</label>';
107
+ print '<div class="modal-inner">';
108
+ print '<div class="modal-content">';
109
+ print '<h2>未入力があります</h2>';
110
+ print '</div>';
111
+ print '</div>';
112
+ print '</div>';
113
+ print '</div>';
114
+ print '</div>';
115
+ } else if($stmt_error == ""){
116
+ print '<div class="modal">';
117
+ print '<input class="modal-check" type="checkbox" id="modal-check"/>';
118
+ print '<div class="modal-body">';
119
+ print '<div class="modal-window">';
120
+ print '<label class="modal-label" for="modal-check">';
121
+ print '<svg width="16" height="16">';
122
+ print '<polygon points="14.4,3.1 12.9,1.6 8,6.6 3.1,1.6 1.6,3.1 6.6,8 1.6,12.9 3.1,14.4 8,9.4 12.9,14.4 14.4,12.9 9.4,8 "></polygon>';
123
+ print '</svg>';
124
+ print '</label>';
125
+ print '<div class="modal-inner">';
126
+ print '<div class="modal-content">';
127
+ print '<h2>登録完了</h2>';
128
+ print '</div>';
129
+ print '</div>';
130
+ print '</div>';
131
+ print '</div>';
132
+ print '</div>';
133
+ }
134
+ ?>
135
+ <form action="" enctype="multipart/form-data" method="post">
136
+ <table>
137
+ <tr>
138
+ <td>タイトル:</td>
139
+ </tr>
140
+ <tr>
141
+ <td><input type="text" name="title" size="60" value="" /></td>
142
+ </tr>
143
+ <tr>
144
+ <td></td>
145
+ </tr>
146
+ <tr>
147
+ <td>解決ポイント:</td>
148
+ </tr>
149
+ <tr>
150
+ <td><textarea name="resolution"></textarea ></td>
151
+ </tr>
152
+ <tr>
153
+ <td>詳細:</td>
154
+ </tr>
155
+ <tr>
156
+ <td><textarea name="detail"></textarea ></td>
157
+ </tr>
158
+ <tr>
159
+ <td> 対象学年:
160
+ <select name="schoolyear">
161
+ <option value="1">小学1年</option>
162
+ <option value="2">小学2年</option>
163
+ <option value="3">小学3年</option>
164
+ <option value="4">小学4年</option>
165
+ <option value="5">小学5年</option>
166
+ <option value="6">小学6年</option>
167
+ <option value="JC1">中学1年</option>
168
+ <option value="JC2">中学2年</option>
169
+ <option value="JC3">中学3年</option>
170
+ <option value="ALL">全学年</option>
171
+ </select>
172
+ </td>
173
+ </tr>
174
+ <tr>
175
+ <td> 学科:
176
+ <select name="subject">
177
+ <option value="kokugo">国語</option>
178
+ <option value="rika">理科</option>
179
+ <option value="syakai">社会</option>
180
+ <option value="sansuu">算数</option>
181
+ <option value="suugaku">数学</option>
182
+ <option value="eigo">英語</option>
183
+ <option value="taiiku">体育</option>
184
+ <option value="ongaku">音楽</option>
185
+ <option value="sougou">総合</option>
186
+ <option value="sonota">その他</option>
187
+ </select>
188
+ </td>
189
+ </tr>
190
+ <tr>
191
+ <td>キーワード:</td>
192
+ </tr>
193
+ <tr>
194
+ <td><textarea name="keyword"></textarea ></td>
195
+ </tr>
196
+ <tr>
197
+ <td>ソース:</td>
198
+ </tr>
199
+ <tr>
200
+ <td><input type="text" name="source" size="60" value="" /></td>
201
+ </tr>
202
+ <tr>
203
+ <td>画像1を選択(必須)</td>
204
+ </tr>
205
+ <tr>
206
+ <td>
207
+ <input id="fileinput" type="file" name="image[]" required onchange="previewImage(this);" accept="image/*">
208
+ <p>
209
+ Preview:<br><img id="preview" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:200px;">
210
+ </p>
211
+ </td>
212
+ </tr>
213
+ <tr>
214
+ <td>画像2を選択</td>
215
+ </tr>
216
+ <tr>
217
+ <td>
218
+ <input id="fileinput" type="file" name="image[]" onchange="previewImage2(this);" accept="image/*">
219
+ <p>
220
+ Preview:<br><img id="preview2" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:200px;">
221
+ </p>
222
+ </td>
223
+ </tr>
224
+ <tr>
225
+ <td>画像3を選択</td>
226
+ </tr>
227
+ <tr>
228
+ <td>
229
+ <input id="fileinput" type="file" name="image[]" onchange="previewImage3(this);" accept="image/*">
230
+ <p>
231
+ Preview:<br><img id="preview3" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:200px;">
232
+ </p>
233
+ </td>
234
+ </tr>
235
+
236
+ </table>
237
+
238
+ <input type="submit" value="登録する" />
239
+ </form>
240
+
241
+ <script>
242
+ function previewImage(obj){
243
+ var fileReader = new FileReader();
244
+ fileReader.onload = (function() {
245
+ document.getElementById('preview').src = fileReader.result;
246
+ });
247
+ fileReader.readAsDataURL(obj.files[0]);
248
+ }
249
+ function previewImage2(obj){
250
+ var fileReader = new FileReader();
251
+ fileReader.onload = (function() {
252
+ document.getElementById('preview2').src = fileReader.result;
253
+ });
254
+ fileReader.readAsDataURL(obj.files[0]);
255
+ }
256
+ function previewImage3(obj){
257
+ var fileReader = new FileReader();
258
+ fileReader.onload = (function() {
259
+ document.getElementById('preview3').src = fileReader.result;
260
+ });
261
+ fileReader.readAsDataURL(obj.files[0]);
262
+ }
263
+
264
+
265
+ </script>
266
+
267
+
268
+ <?php
269
+ mysqli_free_result($stmt);
270
+ mysqli_close($link);
271
+ ?>
272
+ </body>
273
+ </html>
274
+ ```
275
+
276
+ ### mySQLインポート用ファイルの内容
277
+ ```SQL
278
+
279
+
280
+ --
281
+ -- テーブルの構造 `jirei`
282
+ --
283
+
284
+ CREATE TABLE `jirei` (
285
+ `id` int(11) NOT NULL,
286
+ `title` varchar(100) NOT NULL,
287
+ `resolution` varchar(300) NOT NULL,
288
+ `detail` text NOT NULL,
289
+ `schoolyear` varchar(10) NOT NULL,
290
+ `subject` varchar(10) NOT NULL,
291
+ `keyword` varchar(100) NOT NULL,
292
+ `source` varchar(50) NOT NULL,
293
+ `created_at` datetime NOT NULL DEFAULT current_timestamp(),
294
+ `image_name` varchar(256) NOT NULL,
295
+ `image_type` varchar(64) NOT NULL,
296
+ `image_content` longblob NOT NULL,
297
+ `image_size` int(11) NOT NULL,
298
+ `image_name2` varchar(256) NOT NULL,
299
+ `image_type2` varchar(64) NOT NULL,
300
+ `image_content2` longblob NOT NULL,
301
+ `image_size2` int(11) NOT NULL,
302
+ `image_name3` varchar(256) NOT NULL,
303
+ `image_type3` varchar(64) NOT NULL,
304
+ `image_content3` longblob NOT NULL,
305
+ `image_size3` int(11) NOT NULL
306
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
307
+
308
+ --
309
+ -- ダンプしたテーブルのインデックス
310
+ --
311
+
312
+ --
313
+ -- テーブルのインデックス `jirei`
314
+ --
315
+ ALTER TABLE `jirei`
316
+ ADD PRIMARY KEY (`id`);
317
+
318
+ --
319
+ -- ダンプしたテーブルの AUTO_INCREMENT
320
+ --
321
+
322
+ --
323
+ -- テーブルの AUTO_INCREMENT `jirei`
324
+ --
325
+ ALTER TABLE `jirei`
326
+ MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
327
+ COMMIT;
328
+
329
+ /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
330
+ /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
331
+ /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
332
+
333
+ ```