質問編集履歴

4

誤字修正

2021/01/30 10:58

投稿

mjxoxo
mjxoxo

スコア6

test CHANGED
File without changes
test CHANGED
@@ -220,7 +220,7 @@
220
220
 
221
221
  $message1 = '画像をアップロードしました';
222
222
 
223
- $sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
223
+ $sql = 'UPDATE テーブル名 SET photo = :image WHERE date = "'.$検索用変数1.'" AND name = "'.$検索用変数2.'"';
224
224
 
225
225
  try {
226
226
 

3

拡張子の検査を追加し全体を見直し

2021/01/30 10:58

投稿

mjxoxo
mjxoxo

スコア6

test CHANGED
File without changes
test CHANGED
@@ -118,7 +118,7 @@
118
118
 
119
119
 
120
120
 
121
- ※追記 2021/1/30
121
+ ※追記 2021/1/30 19:20修正
122
122
 
123
123
  m.ts10806様にご指摘頂いた部分を念頭に
124
124
 
@@ -130,24 +130,24 @@
130
130
 
131
131
  ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
132
132
 
133
- ③mt_rand()time().mt_rand()に変更(③があれば②は余分かもしれません)
133
+ ③mt_rand()time().mt_rand()に変更(③があれば②は余分かもしれません)
134
134
 
135
135
  ④try-catchを接続時以外にも追加
136
136
 
137
137
  ⑤トランザクションを追加
138
138
 
139
+ ⑥「本質的に画像じゃないもの」に対する検査の為に明示的に拡張子を検査
140
+
141
+ 参考
142
+
143
+ https://qiita.com/papillon/items/6904437e4c98e3783eb3
144
+
145
+
146
+
139
147
  現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
140
148
 
141
149
  何分初めての処理ばかりで、判断がついていない状況です。
142
150
 
143
-
144
-
145
- 「本質的に画像じゃないもの」に対する検査に関しては
146
-
147
- https://qiita.com/papillon/items/6904437e4c98e3783eb3
148
-
149
- のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
150
-
151
151
  お時間がかかってしまってすみません。
152
152
 
153
153
 
@@ -178,7 +178,7 @@
178
178
 
179
179
  $dbh->rollBack();
180
180
 
181
- // エラーメッセージ出力
181
+ // エラーメッセージ出力
182
182
 
183
183
  echo $e->getMessage();
184
184
 
@@ -186,27 +186,37 @@
186
186
 
187
187
  }
188
188
 
189
- if (isset($_POST['upload'])) {//送信ボタンが押された場合
189
+ if (isset($_POST['upload']) && !empty($_FILES['image']['name'])) {//送信ボタンが押されていて、ファイルがアップされてい
190
-
190
+
191
- do{
191
+ do{//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直しをする
192
192
 
193
193
  $image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
194
194
 
195
- }while (file_exists('./images/' . $image));//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直し
195
+ }while (file_exists('./images/' . $image));
196
-
196
+
197
- $image .= '.' . substr(strrchr($_FILES['image']['name'], '.'), 1);//アップロードされたファイルの拡張子を取得
197
+ $filepath = pathinfo($_FILES['image']['name']);
198
+
198
-
199
+ $ext = $filepath['extension'];//拡張子を取得
200
+
201
+ if($ext !=="jpg" && $ext !=="jpeg" && $ext !=="gif" && $ext !=="png") { //拡張子がこの4つ何れでも無ければ
202
+
203
+ $message2 = '画像ファイルではありません';
204
+
205
+ }else{//拡張子がこの4つのどれかに該当したら
206
+
207
+ $image .= '.' .$ext;//ファイル名と拡張子を合体
208
+
199
- $file = "images/$image";
209
+ $file = "images/$image";
200
-
201
- if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
202
210
 
203
211
  move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
204
212
 
213
+ //念の為exif_imagetypeでもチェック
214
+
215
+ if (exif_imagetype($file)) {
216
+
205
- //ファイルがフォルダに存在しているかのチェック
217
+ //ファイルがフォルダに存在しているかのチェック
206
-
218
+
207
- if(file_exists('./images/' . $image)){
219
+ if(file_exists('./images/' . $image)){
208
-
209
- if (exif_imagetype($file)) {//画像ファイルかのチェック
210
220
 
211
221
  $message1 = '画像をアップロードしました';
212
222
 
@@ -220,30 +230,28 @@
220
230
 
221
231
  $stmt->execute();
222
232
 
223
- // コミット
224
-
225
233
  $dbh->commit();
226
234
 
227
235
  } catch(PDOException $e) {
228
236
 
229
- // ロールバック
237
+ // ロールバック
230
-
238
+
231
- $dbh->rollBack();
239
+ $dbh->rollBack();
232
-
240
+
233
- // エラーメッセージ出力
241
+ // エラーメッセージ出力
234
-
242
+
235
- echo $e->getMessage();
243
+ echo $e->getMessage();
236
-
244
+
237
- die();
245
+ die();
238
246
 
239
247
  }
240
248
 
241
- } else {
242
-
243
- $message2 = '画像ファイルではありません';
244
-
245
249
  }
246
250
 
251
+ } else {
252
+
253
+ $message2 = '画像ファイルではありません';
254
+
247
255
  }
248
256
 
249
257
  }

2

誤字修正

2021/01/30 10:20

投稿

mjxoxo
mjxoxo

スコア6

test CHANGED
File without changes
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
  ①imageとnameの相違を修正して一致させる
130
130
 
131
- ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっていないる間は出し直し
131
+ ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
132
132
 
133
133
  ③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
134
134
 

1

その後に関して追記

2021/01/30 08:06

投稿

mjxoxo
mjxoxo

スコア6

test CHANGED
File without changes
test CHANGED
@@ -115,3 +115,141 @@
115
115
  <?php endif;?>
116
116
 
117
117
  ```
118
+
119
+
120
+
121
+ ※追記 2021/1/30
122
+
123
+ m.ts10806様にご指摘頂いた部分を念頭に
124
+
125
+ 色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
126
+
127
+
128
+
129
+ ①imageとnameの相違を修正して一致させる
130
+
131
+ ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっていないる間は出し直し
132
+
133
+ ③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
134
+
135
+ ④try-catchを接続時以外にも追加
136
+
137
+ ⑤トランザクションを追加
138
+
139
+ 現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
140
+
141
+ 何分初めての処理ばかりで、判断がついていない状況です。
142
+
143
+
144
+
145
+ 「本質的に画像じゃないもの」に対する検査に関しては
146
+
147
+ https://qiita.com/papillon/items/6904437e4c98e3783eb3
148
+
149
+ のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
150
+
151
+ お時間がかかってしまってすみません。
152
+
153
+
154
+
155
+ "解決方法”は自己解決の場合のみ と記載があるのでこちらにコードを乗せました。
156
+
157
+ (※sqlは既にレコードをinsertした後に画像を追加する仕様なのでupdateにしています)
158
+
159
+ ```ここに言語を入力
160
+
161
+ <?php
162
+
163
+ $dsn = "mysql:host=localhost; dbname=xxx; charset=utf8";
164
+
165
+ $username = "xxx";
166
+
167
+ $password = "xxx";
168
+
169
+ try {
170
+
171
+ $dbh = new PDO($dsn, $username, $password);
172
+
173
+ $dbh->beginTransaction();
174
+
175
+ } catch (PDOException $e) {
176
+
177
+ // ロールバック
178
+
179
+ $dbh->rollBack();
180
+
181
+ // エラーメッセージ出力
182
+
183
+ echo $e->getMessage();
184
+
185
+ die();
186
+
187
+ }
188
+
189
+ if (isset($_POST['upload'])) {//送信ボタンが押された場合
190
+
191
+ do{
192
+
193
+ $image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
194
+
195
+ }while (file_exists('./images/' . $image));//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直し
196
+
197
+ $image .= '.' . substr(strrchr($_FILES['image']['name'], '.'), 1);//アップロードされたファイルの拡張子を取得
198
+
199
+ $file = "images/$image";
200
+
201
+ if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
202
+
203
+ move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
204
+
205
+ //ファイルがフォルダに存在しているかのチェック
206
+
207
+ if(file_exists('./images/' . $image)){
208
+
209
+ if (exif_imagetype($file)) {//画像ファイルかのチェック
210
+
211
+ $message1 = '画像をアップロードしました';
212
+
213
+ $sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
214
+
215
+ try {
216
+
217
+ $stmt = $dbh->prepare($sql);
218
+
219
+ $stmt->bindValue(':image', $image, PDO::PARAM_STR);
220
+
221
+ $stmt->execute();
222
+
223
+ // コミット
224
+
225
+ $dbh->commit();
226
+
227
+ } catch(PDOException $e) {
228
+
229
+ // ロールバック
230
+
231
+ $dbh->rollBack();
232
+
233
+ // エラーメッセージ出力
234
+
235
+ echo $e->getMessage();
236
+
237
+ die();
238
+
239
+ }
240
+
241
+ } else {
242
+
243
+ $message2 = '画像ファイルではありません';
244
+
245
+ }
246
+
247
+ }
248
+
249
+ }
250
+
251
+ }
252
+
253
+ ?>
254
+
255
+ ```