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

質問編集履歴

2

プリペアドステートメント と プレースホルダ ーを使用し記述し直しました

2021/01/24 03:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -64,4 +64,97 @@
64
64
  データベースの変数名
65
65
  ![イメージ説明](bf9926ded1b6a4f9d543f7837ff9f0bf.png)
66
66
  PHPでは正常に変数に格納されました
67
- ![イメージ説明](71f3da749606459f21ec961187f3a7b8.png)
67
+ ![イメージ説明](71f3da749606459f21ec961187f3a7b8.png)
68
+
69
+
70
+
71
+ 動作の問題修正
72
+ ①シングルクォテーション
73
+ → $stmt=$dbh->prepare($sql);
74
+ 確かに上の通り修正すると変数sqlが展開され、PHPからデータベースにINSERTされる動作が確認できました。おっしゃる通りシングルクォテーションを使っていたため、中身が変数展開されていませんでした。
75
+ ーーーーーーーーーーーーーーーーーーーーーーーー
76
+
77
+ セキュリティの問題修正
78
+ ②htmlspecialchars()
79
+ →HTML表示箇所に適宜適用、データベースには変数のまま手をくわえず代入
80
+ ③プリペアドステートメント と プレースホルダ ーを使用した構築
81
+
82
+ データベース接続部はhtmlタグ外へ出して、分別修正しました。
83
+ phpとAdminでデータベースとテーブル名を修正。
84
+ (→php_basic >> survey)
85
+ 以上を修正したところ、INSERTができませんでした。
86
+ 上記エラー画面から変化ありません。
87
+
88
+
89
+
90
+ ```PHP
91
+ <?php
92
+ try{
93
+ // リクエストからスーパーグローバル変数を取得ーーーーー
94
+
95
+ $nickname=$_POST['nickname'];
96
+ $mailAd=$_POST['mailAd'];
97
+ $comment=$_POST['comment'];
98
+
99
+ //ーーーデータベースに接続する。ーーーーー
100
+ $pdo=new PDO('mysql:dbname=php_basic;host=localhost;charset=utf8','root','',
101
+
102
+ // SQL実行エラーの処理指定→ERRMODE_EXCEPTION:例外をスローする
103
+ //FETCH_ASSOC カラム名をキーとする連想配列で取得する
104
+ [
105
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
106
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
107
+ ]
108
+ );
109
+
110
+ // データベースへデータを挿入する処理
111
+ // プリペアードステートメント
112
+ $stmt = $pdo->prepare('SELECT * FROM survey WHERE nickname = ? AND email = ? And comment= ? ');
113
+ // 値を挟みこむ
114
+ $stmt->bindValue(1,$nickname);
115
+ $stmt->bindValue(2,$mailAd);
116
+ $stmt->bindValue(3,$comment);
117
+ $stmt->execute();
118
+
119
+ //データベースから切断ーーーーーーーーーーーーーーー
120
+ $pdo=null;
121
+
122
+ }catch(PDOException $e){
123
+ header('Content-Type: text/plain; charset=UTF-8', true, 500);
124
+ exit($e->getMessage());
125
+ }
126
+ header('Content-Type: text/html; charset=utf-8');
127
+ ?>
128
+
129
+
130
+ <!DOCTYPE html>
131
+ <html lang="ja">
132
+ <head>
133
+ <meta charset="UTF-8">
134
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
135
+ <title>Document</title>
136
+ </head>
137
+ <body>
138
+ <?php
139
+ echo htmlspecialchars($nickname);
140
+ echo '様<br>';
141
+ echo 'ご意見ありがとうございました。<br>';
142
+ echo '頂いたご意見『';
143
+ echo htmlspecialchars($comment);
144
+ echo '』<br>';
145
+ echo htmlspecialchars($mailAd);
146
+ echo 'にメールを送りましたのでご確認ください。<br>';
147
+
148
+ //メール送信ーーーーーーーーーーーーーーーーーーーー
149
+ // $mail_sub='アンケート受け付けました。';
150
+ // $mail_body=$nickname."様へ\nアンケートご協力ありがとうございました。";
151
+ // $mail_body=html_entity_decode($mail_body,ENT_QUOTES,"UTF-8");
152
+ // $mail_head='From:otayousuke0724@gmail.com';
153
+ // mb_language('Japanese');
154
+ // mb_internal_encoding('UTF-8');
155
+ // mb_send_mail($mailAd,$mail_sub,$mail_body,$mail_head);
156
+ ?>
157
+ </body>
158
+ </html>
159
+
160
+ ```

1

初心者マーク追加

2021/01/24 03:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -58,7 +58,6 @@
58
58
  //データベースから切断ーーーーーーーーーーーーーーー
59
59
  $dbh=null;
60
60
  ?>
61
-
62
61
  </body>
63
62
  </html>
64
63
  ```