質問編集履歴
2
プリペアドステートメント と プレースホルダ ーを使用し記述し直しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -64,4 +64,97 @@
|
|
64
64
|
データベースの変数名
|
65
65
|

|
66
66
|
PHPでは正常に変数に格納されました
|
67
|
-

|
67
|
+

|
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
初心者マーク追加
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
|
```
|