回答編集履歴
2
修正
test
CHANGED
@@ -96,6 +96,8 @@
|
|
96
96
|
|
97
97
|
$comment = $_POST['name'];;// mts10806 idを取り出すのに$comment? 紛らわしいのできちんと意味が合ったネーミングをしましょう
|
98
98
|
|
99
|
+
// mts10806 DBの型とか文字数決まっているのだったらここできちんと入力チェック(バリデーション)行っておかないと容赦なくDBエラーになりますし後述の通りDBエラーになってもそのエラーが拾えません。
|
100
|
+
|
99
101
|
$sql = "INSERT INTO test (id, name) VALUES ('$name', '$comment')"; //pdo使っているならプリペアドステートメント使ってSQLインジェクション対策まですべき
|
100
102
|
|
101
103
|
$res = $pdo->query($sql);// mts10806 拾った$resを使ってない。queryが絶対成功する前提で作っているので成功したかどうかわからない。
|
1
修正
test
CHANGED
@@ -18,4 +18,130 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
+
と思ったら違いましたね。
|
22
|
+
|
23
|
+
変数名がかなり紛らわしい・・。
|
24
|
+
|
21
|
-
|
25
|
+
そこでごっちゃになっている可能性はあります。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
--
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
先に現在のコードに対する指摘
|
34
|
+
|
35
|
+
// mts10806でコード内検索してください。
|
36
|
+
|
37
|
+
```php
|
38
|
+
|
39
|
+
<!DOCTYPE HTML>
|
40
|
+
|
41
|
+
<html lang="ja">
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
<head>
|
46
|
+
|
47
|
+
</head>
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
<body>
|
52
|
+
|
53
|
+
<form method="post" action="DB.php">
|
54
|
+
|
55
|
+
<input type="text" name="id" value=""><br>
|
56
|
+
|
57
|
+
<input type="text" name="name" value="">
|
58
|
+
|
59
|
+
<input type="submit" name="regist" value="Post">
|
60
|
+
|
61
|
+
</form>
|
62
|
+
|
63
|
+
</body> <!-- // mts10806 bodyしめた後にHTML出力書くのは文法的にNG(でるのはでるが、だからっていいわけではない) -->
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<?php
|
70
|
+
|
71
|
+
//mts10806 要件は[IDとパスワードをユーザー情報としてデータベースに保存する]
|
72
|
+
|
73
|
+
//なのにidとnameでは整合性が取れない
|
74
|
+
|
75
|
+
$host = '*******';
|
76
|
+
|
77
|
+
$dbname = '********';
|
78
|
+
|
79
|
+
$dbuser = '********';
|
80
|
+
|
81
|
+
$dbpassword = '*********';
|
82
|
+
|
83
|
+
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8","$dbuser","$dbpassword");
|
84
|
+
|
85
|
+
// mts10806 変数しかないなら別に""で囲う必要なし。
|
86
|
+
|
87
|
+
//逆に変数以外の文字列があるなら{}で囲うかいったん切って文字列連結するか工夫すべき $nameという変数を定義して"$namea"と書いてあると$nameという変数として認識されません。
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
#データベースへの登録
|
92
|
+
|
93
|
+
if( isset($_POST['regist']) ){// mts10806 POSTされたときしか登録処理いかないんだったらこうではなく最後の方に書いてあるREQUEST_METHODの判断でいい
|
94
|
+
|
95
|
+
$name = $_POST['id'];// mts10806 idを取り出すのに$name?
|
96
|
+
|
97
|
+
$comment = $_POST['name'];;// mts10806 idを取り出すのに$comment? 紛らわしいのできちんと意味が合ったネーミングをしましょう
|
98
|
+
|
99
|
+
$sql = "INSERT INTO test (id, name) VALUES ('$name', '$comment')"; //pdo使っているならプリペアドステートメント使ってSQLインジェクション対策まですべき
|
100
|
+
|
101
|
+
$res = $pdo->query($sql);// mts10806 拾った$resを使ってない。queryが絶対成功する前提で作っているので成功したかどうかわからない。
|
102
|
+
|
103
|
+
// mts10806 「DBに何か異常が起きたとき」の対策でトランザクション→コミットorロールバック は入れるべき
|
104
|
+
|
105
|
+
// mts10806 というかIDとパスワードじゃないの?
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
#テーブル内容の表示
|
112
|
+
|
113
|
+
$sql = "SELECT * FROM test ORDER BY id DESC";
|
114
|
+
|
115
|
+
$stmt = $pdo->query($sql); // mts10806 個人的にはfetchAllのPDO::FETCH_COLUMNでざっと取ったほうが直感的
|
116
|
+
|
117
|
+
foreach ($stmt as $row) {
|
118
|
+
|
119
|
+
echo $row['id'].' '.$row['name'];// mts10806 HTMLエスケープ入れましょう
|
120
|
+
|
121
|
+
echo '<br>';
|
122
|
+
|
123
|
+
}
|
124
|
+
|
125
|
+
#リロード時の二重投稿を防止
|
126
|
+
|
127
|
+
if($_SERVER['REQUEST_METHOD'] === 'POST') {// mts10806 「二重投稿」の対応と言うのなら投稿処理も中に入れましょう。「表示処理」とは区画が違います。
|
128
|
+
|
129
|
+
header('Location:DB.php', true, 303);
|
130
|
+
|
131
|
+
}
|
132
|
+
|
133
|
+
#終了
|
134
|
+
|
135
|
+
$stmt = null;
|
136
|
+
|
137
|
+
$pdo = null;
|
138
|
+
|
139
|
+
?>
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
</html>
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
```
|