回答編集履歴

3

加筆修正

2020/09/15 14:14

投稿

退会済みユーザー
test CHANGED
@@ -79,3 +79,51 @@
79
79
  参考:
80
80
 
81
81
  [PHPでデータベースに接続するときのまとめ - Qiita](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)
82
+
83
+
84
+
85
+ あと、
86
+
87
+
88
+
89
+ ```php
90
+
91
+ if(($_POST['shots']=='')||(!isset($_POST['shots']))){
92
+
93
+ echo "<p>データが未入力です。<br/>入力画面に戻ってください。</p>";
94
+
95
+ }else{
96
+
97
+ ```
98
+
99
+ の箇所もちょっと気になる。
100
+
101
+ ```php
102
+
103
+ if ( (!isset($_POST['shots'])) || ($_POST['shots']=='') ) {
104
+
105
+ echo "<p>データが未入力です。<br/>入力画面に戻ってください。</p>";
106
+
107
+ }
108
+
109
+ else {
110
+
111
+ ```
112
+
113
+ isset()での評価を前に持ってくれば、
114
+
115
+ もしもPOST送信データにshotsが含まれていないときに
116
+
117
+ Notice: Undefined index
118
+
119
+ のエラーを回避できそう。
120
+
121
+
122
+
123
+ 他のフォーム入力データも、データの存在チェックをしっかり厳しく行ってください。
124
+
125
+ 面倒なら、
126
+
127
+ [filter_input](https://www.php.net/manual/ja/function.filter-input.php)
128
+
129
+ を駆使したほうがいいです。

2

見直し

2020/09/15 14:14

投稿

退会済みユーザー
test CHANGED
@@ -20,6 +20,62 @@
20
20
 
21
21
 
22
22
 
23
+ ```
24
+
25
+ $sql='INSERT INTO num_of_shots(性別,年代,職業,種類,撮影枚数)
26
+
27
+ VALUES("'.$gender.'","'.$age.'","'
28
+
29
+ .$job.'","'.$kind.'",'.$shots.');';
30
+
31
+ ```
32
+
33
+
34
+
35
+ これ、SQLインジェクション攻撃される、やってはいけないやり方になります。
36
+
37
+ SQL文をプリペアドステートメントで与えるようにします。
38
+
39
+
40
+
41
+ ```php
42
+
43
+ $sql = <<<EOT
44
+
45
+ INSERT INTO `num_of_shots`(`性別`,`年代`,`職業`,`種類`,`撮影枚数`)
46
+
47
+ VALUES(:gender, :age, :job, :kind, :shots);
48
+
49
+ EOT;
50
+
51
+
52
+
53
+ $stmt = $dbh->prepare($sql);
54
+
55
+ $stmt->bindValue(':gender', $gender, PDO::PARAM_STR);
56
+
57
+ $stmt->bindValue(':age', $age, PDO::PARAM_STR);
58
+
59
+ $stmt->bindValue(':job', $job, PDO::PARAM_STR);
60
+
61
+ $stmt->bindValue(':kind', $kind, PDO::PARAM_STR);
62
+
63
+ $stmt->bindValue(':shots', $shots, PDO::PARAM_STR);
64
+
65
+ $stmt->execute();
66
+
67
+ ```
68
+
69
+
70
+
71
+ などと机上のコードですが直してみました。
72
+
73
+ もちろん、テーブルの構造によっては、文字列でなく数値データであれば
74
+
75
+ `PDO::PARAM_STR`でなく`PDO::PARAM_INT`を使ったりします。
76
+
77
+
78
+
23
79
  参考:
24
80
 
25
81
  [PHPでデータベースに接続するときのまとめ - Qiita](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)

1

加筆修正

2020/09/15 14:08

投稿

退会済みユーザー
test CHANGED
@@ -5,3 +5,21 @@
5
5
  `$dsn='mysql:host=localhost;dbname=digicam_q;charset=utf8';`
6
6
 
7
7
  とか?
8
+
9
+
10
+
11
+ new PDO()するあたりでtry~catchせず、
12
+
13
+ データベースに接続が成功しているか検証せずに処理を進めていて、
14
+
15
+ INSERT INTO文だけtry~catchで囲むのは
16
+
17
+ エラー対策が甘いと言わざるを得ません。
18
+
19
+ 今一度ご確認ください。
20
+
21
+
22
+
23
+ 参考:
24
+
25
+ [PHPでデータベースに接続するときのまとめ - Qiita](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)