質問編集履歴

2

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

2021/01/24 03:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -131,3 +131,189 @@
131
131
  PHPでは正常に変数に格納されました
132
132
 
133
133
  ![イメージ説明](71f3da749606459f21ec961187f3a7b8.png)
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ 動作の問題修正
142
+
143
+ ①シングルクォテーション
144
+
145
+ → $stmt=$dbh->prepare($sql);
146
+
147
+ 確かに上の通り修正すると変数sqlが展開され、PHPからデータベースにINSERTされる動作が確認できました。おっしゃる通りシングルクォテーションを使っていたため、中身が変数展開されていませんでした。
148
+
149
+ ーーーーーーーーーーーーーーーーーーーーーーーー
150
+
151
+
152
+
153
+ セキュリティの問題修正
154
+
155
+ ②htmlspecialchars()
156
+
157
+ →HTML表示箇所に適宜適用、データベースには変数のまま手をくわえず代入
158
+
159
+ ③プリペアドステートメント と プレースホルダ ーを使用した構築
160
+
161
+
162
+
163
+ データベース接続部はhtmlタグ外へ出して、分別修正しました。
164
+
165
+ phpとAdminでデータベースとテーブル名を修正。
166
+
167
+ (→php_basic >> survey)
168
+
169
+ 以上を修正したところ、INSERTができませんでした。
170
+
171
+ 上記エラー画面から変化ありません。
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+ ```PHP
180
+
181
+ <?php
182
+
183
+ try{
184
+
185
+ // リクエストからスーパーグローバル変数を取得ーーーーー
186
+
187
+
188
+
189
+ $nickname=$_POST['nickname'];
190
+
191
+ $mailAd=$_POST['mailAd'];
192
+
193
+ $comment=$_POST['comment'];
194
+
195
+
196
+
197
+ //ーーーデータベースに接続する。ーーーーー
198
+
199
+ $pdo=new PDO('mysql:dbname=php_basic;host=localhost;charset=utf8','root','',
200
+
201
+
202
+
203
+ // SQL実行エラーの処理指定→ERRMODE_EXCEPTION:例外をスローする
204
+
205
+ //FETCH_ASSOC カラム名をキーとする連想配列で取得する
206
+
207
+ [
208
+
209
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
210
+
211
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
212
+
213
+ ]
214
+
215
+ );
216
+
217
+
218
+
219
+ // データベースへデータを挿入する処理
220
+
221
+ // プリペアードステートメント
222
+
223
+ $stmt = $pdo->prepare('SELECT * FROM survey WHERE nickname = ? AND email = ? And comment= ? ');
224
+
225
+ // 値を挟みこむ
226
+
227
+ $stmt->bindValue(1,$nickname);
228
+
229
+ $stmt->bindValue(2,$mailAd);
230
+
231
+ $stmt->bindValue(3,$comment);
232
+
233
+ $stmt->execute();
234
+
235
+
236
+
237
+ //データベースから切断ーーーーーーーーーーーーーーー
238
+
239
+ $pdo=null;
240
+
241
+
242
+
243
+ }catch(PDOException $e){
244
+
245
+ header('Content-Type: text/plain; charset=UTF-8', true, 500);
246
+
247
+ exit($e->getMessage());
248
+
249
+ }
250
+
251
+ header('Content-Type: text/html; charset=utf-8');
252
+
253
+ ?>
254
+
255
+
256
+
257
+
258
+
259
+ <!DOCTYPE html>
260
+
261
+ <html lang="ja">
262
+
263
+ <head>
264
+
265
+ <meta charset="UTF-8">
266
+
267
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
268
+
269
+ <title>Document</title>
270
+
271
+ </head>
272
+
273
+ <body>
274
+
275
+ <?php
276
+
277
+ echo htmlspecialchars($nickname);
278
+
279
+ echo '様<br>';
280
+
281
+ echo 'ご意見ありがとうございました。<br>';
282
+
283
+ echo '頂いたご意見『';
284
+
285
+ echo htmlspecialchars($comment);
286
+
287
+ echo '』<br>';
288
+
289
+ echo htmlspecialchars($mailAd);
290
+
291
+ echo 'にメールを送りましたのでご確認ください。<br>';
292
+
293
+
294
+
295
+ //メール送信ーーーーーーーーーーーーーーーーーーーー
296
+
297
+ // $mail_sub='アンケート受け付けました。';
298
+
299
+ // $mail_body=$nickname."様へ\nアンケートご協力ありがとうございました。";
300
+
301
+ // $mail_body=html_entity_decode($mail_body,ENT_QUOTES,"UTF-8");
302
+
303
+ // $mail_head='From:otayousuke0724@gmail.com';
304
+
305
+ // mb_language('Japanese');
306
+
307
+ // mb_internal_encoding('UTF-8');
308
+
309
+ // mb_send_mail($mailAd,$mail_sub,$mail_body,$mail_head);
310
+
311
+ ?>
312
+
313
+ </body>
314
+
315
+ </html>
316
+
317
+
318
+
319
+ ```

1

初心者マーク追加

2021/01/24 03:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -118,8 +118,6 @@
118
118
 
119
119
  ?>
120
120
 
121
-
122
-
123
121
  </body>
124
122
 
125
123
  </html>