質問編集履歴
4
誤字修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -109,7 +109,7 @@
|
|
109
109
|
//ファイルがフォルダに存在しているかのチェック
|
110
110
|
if(file_exists('./images/' . $image)){
|
111
111
|
$message1 = '画像をアップロードしました';
|
112
|
-
$sql = 'UPDATE
|
112
|
+
$sql = 'UPDATE テーブル名 SET photo = :image WHERE date = "'.$検索用変数1.'" AND name = "'.$検索用変数2.'"';
|
113
113
|
try {
|
114
114
|
$stmt = $dbh->prepare($sql);
|
115
115
|
$stmt->bindValue(':image', $image, PDO::PARAM_STR);
|
3
拡張子の検査を追加し全体を見直し
title
CHANGED
File without changes
|
body
CHANGED
@@ -58,21 +58,21 @@
|
|
58
58
|
<?php endif;?>
|
59
59
|
```
|
60
60
|
|
61
|
-
※追記 2021/1/30
|
61
|
+
※追記 2021/1/30 19:20修正
|
62
62
|
m.ts10806様にご指摘頂いた部分を念頭に
|
63
63
|
色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
|
64
64
|
|
65
65
|
①imageとnameの相違を修正して一致させる
|
66
66
|
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
|
67
|
-
③mt_rand()
|
67
|
+
③mt_rand()をtime().mt_rand()に変更(③があれば②は余分かもしれません)
|
68
68
|
④try-catchを接続時以外にも追加
|
69
69
|
⑤トランザクションを追加
|
70
|
+
⑥「本質的に画像じゃないもの」に対する検査の為に明示的に拡張子を検査
|
71
|
+
参考
|
72
|
+
https://qiita.com/papillon/items/6904437e4c98e3783eb3
|
73
|
+
|
70
74
|
現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
|
71
75
|
何分初めての処理ばかりで、判断がついていない状況です。
|
72
|
-
|
73
|
-
「本質的に画像じゃないもの」に対する検査に関しては
|
74
|
-
https://qiita.com/papillon/items/6904437e4c98e3783eb3
|
75
|
-
のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
|
76
76
|
お時間がかかってしまってすみません。
|
77
77
|
|
78
78
|
"解決方法”は自己解決の場合のみ と記載があるのでこちらにコードを乗せました。
|
@@ -88,39 +88,43 @@
|
|
88
88
|
} catch (PDOException $e) {
|
89
89
|
// ロールバック
|
90
90
|
$dbh->rollBack();
|
91
|
-
|
91
|
+
// エラーメッセージ出力
|
92
92
|
echo $e->getMessage();
|
93
93
|
die();
|
94
94
|
}
|
95
|
-
if (isset($_POST['upload'])) {//送信ボタンが押された
|
95
|
+
if (isset($_POST['upload']) && !empty($_FILES['image']['name'])) {//送信ボタンが押されていて、ファイルがアップされていたら
|
96
|
-
do{
|
96
|
+
do{//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直しをする
|
97
97
|
$image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
|
98
|
-
}while (file_exists('./images/' . $image));
|
98
|
+
}while (file_exists('./images/' . $image));
|
99
|
-
$
|
99
|
+
$filepath = pathinfo($_FILES['image']['name']);
|
100
|
+
$ext = $filepath['extension'];//拡張子を取得
|
101
|
+
if($ext !=="jpg" && $ext !=="jpeg" && $ext !=="gif" && $ext !=="png") { //拡張子がこの4つ何れでも無ければ
|
102
|
+
$message2 = '画像ファイルではありません';
|
103
|
+
}else{//拡張子がこの4つのどれかに該当したら
|
104
|
+
$image .= '.' .$ext;//ファイル名と拡張子を合体
|
100
|
-
|
105
|
+
$file = "images/$image";
|
101
|
-
if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
|
102
106
|
move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
|
107
|
+
//念の為exif_imagetypeでもチェック
|
108
|
+
if (exif_imagetype($file)) {
|
103
|
-
|
109
|
+
//ファイルがフォルダに存在しているかのチェック
|
104
|
-
|
110
|
+
if(file_exists('./images/' . $image)){
|
105
|
-
if (exif_imagetype($file)) {//画像ファイルかのチェック
|
106
111
|
$message1 = '画像をアップロードしました';
|
107
112
|
$sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
|
108
113
|
try {
|
109
114
|
$stmt = $dbh->prepare($sql);
|
110
115
|
$stmt->bindValue(':image', $image, PDO::PARAM_STR);
|
111
116
|
$stmt->execute();
|
112
|
-
// コミット
|
113
117
|
$dbh->commit();
|
114
118
|
} catch(PDOException $e) {
|
115
|
-
|
119
|
+
// ロールバック
|
116
|
-
|
120
|
+
$dbh->rollBack();
|
117
|
-
|
121
|
+
// エラーメッセージ出力
|
118
|
-
|
122
|
+
echo $e->getMessage();
|
119
|
-
|
123
|
+
die();
|
120
124
|
}
|
121
|
-
} else {
|
122
|
-
$message2 = '画像ファイルではありません';
|
123
125
|
}
|
126
|
+
} else {
|
127
|
+
$message2 = '画像ファイルではありません';
|
124
128
|
}
|
125
129
|
}
|
126
130
|
}
|
2
誤字修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -63,7 +63,7 @@
|
|
63
63
|
色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
|
64
64
|
|
65
65
|
①imageとnameの相違を修正して一致させる
|
66
|
-
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまってい
|
66
|
+
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
|
67
67
|
③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
|
68
68
|
④try-catchを接続時以外にも追加
|
69
69
|
⑤トランザクションを追加
|
1
その後に関して追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -56,4 +56,73 @@
|
|
56
56
|
<button><input type="submit" name="upload" value="送信"></button>
|
57
57
|
</form>
|
58
58
|
<?php endif;?>
|
59
|
+
```
|
60
|
+
|
61
|
+
※追記 2021/1/30
|
62
|
+
m.ts10806様にご指摘頂いた部分を念頭に
|
63
|
+
色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
|
64
|
+
|
65
|
+
①imageとnameの相違を修正して一致させる
|
66
|
+
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっていないる間は出し直し
|
67
|
+
③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
|
68
|
+
④try-catchを接続時以外にも追加
|
69
|
+
⑤トランザクションを追加
|
70
|
+
現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
|
71
|
+
何分初めての処理ばかりで、判断がついていない状況です。
|
72
|
+
|
73
|
+
「本質的に画像じゃないもの」に対する検査に関しては
|
74
|
+
https://qiita.com/papillon/items/6904437e4c98e3783eb3
|
75
|
+
のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
|
76
|
+
お時間がかかってしまってすみません。
|
77
|
+
|
78
|
+
"解決方法”は自己解決の場合のみ と記載があるのでこちらにコードを乗せました。
|
79
|
+
(※sqlは既にレコードをinsertした後に画像を追加する仕様なのでupdateにしています)
|
80
|
+
```ここに言語を入力
|
81
|
+
<?php
|
82
|
+
$dsn = "mysql:host=localhost; dbname=xxx; charset=utf8";
|
83
|
+
$username = "xxx";
|
84
|
+
$password = "xxx";
|
85
|
+
try {
|
86
|
+
$dbh = new PDO($dsn, $username, $password);
|
87
|
+
$dbh->beginTransaction();
|
88
|
+
} catch (PDOException $e) {
|
89
|
+
// ロールバック
|
90
|
+
$dbh->rollBack();
|
91
|
+
// エラーメッセージ出力
|
92
|
+
echo $e->getMessage();
|
93
|
+
die();
|
94
|
+
}
|
95
|
+
if (isset($_POST['upload'])) {//送信ボタンが押された場合
|
96
|
+
do{
|
97
|
+
$image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
|
98
|
+
}while (file_exists('./images/' . $image));//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直し
|
99
|
+
$image .= '.' . substr(strrchr($_FILES['image']['name'], '.'), 1);//アップロードされたファイルの拡張子を取得
|
100
|
+
$file = "images/$image";
|
101
|
+
if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
|
102
|
+
move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
|
103
|
+
//ファイルがフォルダに存在しているかのチェック
|
104
|
+
if(file_exists('./images/' . $image)){
|
105
|
+
if (exif_imagetype($file)) {//画像ファイルかのチェック
|
106
|
+
$message1 = '画像をアップロードしました';
|
107
|
+
$sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
|
108
|
+
try {
|
109
|
+
$stmt = $dbh->prepare($sql);
|
110
|
+
$stmt->bindValue(':image', $image, PDO::PARAM_STR);
|
111
|
+
$stmt->execute();
|
112
|
+
// コミット
|
113
|
+
$dbh->commit();
|
114
|
+
} catch(PDOException $e) {
|
115
|
+
// ロールバック
|
116
|
+
$dbh->rollBack();
|
117
|
+
// エラーメッセージ出力
|
118
|
+
echo $e->getMessage();
|
119
|
+
die();
|
120
|
+
}
|
121
|
+
} else {
|
122
|
+
$message2 = '画像ファイルではありません';
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}
|
127
|
+
?>
|
59
128
|
```
|