回答編集履歴
6
SQL文の見直し
test
CHANGED
@@ -64,11 +64,11 @@
|
|
64
64
|
|
65
65
|
$sql = <<<EOT
|
66
66
|
|
67
|
-
|
67
|
+
SELECT `user_id`, `user_name`, `address`, `pass`
|
68
68
|
|
69
|
-
|
69
|
+
FROM `user_data`
|
70
70
|
|
71
|
-
WHERE user_id = ? AND pass = ?
|
71
|
+
WHERE `user_id` = ? AND `pass` = ?
|
72
72
|
|
73
73
|
EOT;
|
74
74
|
|
5
見直し
test
CHANGED
@@ -54,6 +54,10 @@
|
|
54
54
|
|
55
55
|
$pass = $_POST["pass"];
|
56
56
|
|
57
|
+
// このあたりに、$u_id や $pass に不正な文字や不適切な文字が含まれていないかを
|
58
|
+
|
59
|
+
// 検証する処理を置くこと。
|
60
|
+
|
57
61
|
|
58
62
|
|
59
63
|
$mysqli = new mysqli('localhost', 'root', '', '');
|
@@ -74,7 +78,7 @@
|
|
74
78
|
|
75
79
|
$result = $stmt->execute();
|
76
80
|
|
77
|
-
while ($row = $result->fetch_array(MYSQLI_ASSOC)){
|
81
|
+
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
|
78
82
|
|
79
83
|
echo $row['user_id']. '<br />';
|
80
84
|
|
4
加筆修正
test
CHANGED
@@ -89,3 +89,15 @@
|
|
89
89
|
```
|
90
90
|
|
91
91
|
(あくまで机上、テストしてない。そして変数名とか勝手に直しといた)
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
あと、DBに格納されている文字列をhtml出力するのに、
|
96
|
+
|
97
|
+
[htmlspecialchars](https://www.php.net/manual/ja/function.htmlspecialchars.php)()を使うことや、
|
98
|
+
|
99
|
+
パスワード文字列を生のままデータベース上に保存したり比較したりするのではなく、
|
100
|
+
|
101
|
+
例えば [password_hash](https://www.php.net/manual/ja/function.password-hash.php)() で加工して保持したものを、
|
102
|
+
|
103
|
+
[password_verify](https://www.php.net/manual/ja/function.password-verify.php)() を使ってフォーム入力値と比較するということはよく見かけます。
|
3
見直し
test
CHANGED
@@ -50,6 +50,14 @@
|
|
50
50
|
|
51
51
|
```php
|
52
52
|
|
53
|
+
$u_id = $_POST["user_id"];
|
54
|
+
|
55
|
+
$pass = $_POST["pass"];
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
$mysqli = new mysqli('localhost', 'root', '', '');
|
60
|
+
|
53
61
|
$sql = <<<EOT
|
54
62
|
|
55
63
|
select user_id, user_name, address, pass
|
@@ -60,13 +68,13 @@
|
|
60
68
|
|
61
69
|
EOT;
|
62
70
|
|
63
|
-
$stmt = $
|
71
|
+
$stmt = $mysqli->prepare($sql);
|
64
72
|
|
65
|
-
$stmt->bind_param('is', $u
|
73
|
+
$stmt->bind_param('is', $u_id, $pass); // $userがintのつもり、stringなら'ss'を指定
|
66
74
|
|
67
75
|
$result = $stmt->execute();
|
68
76
|
|
69
|
-
while($row = $result->fetch_array(MYSQLI_ASSOC)){
|
77
|
+
while ($row = $result->fetch_array(MYSQLI_ASSOC)){
|
70
78
|
|
71
79
|
echo $row['user_id']. '<br />';
|
72
80
|
|
@@ -80,4 +88,4 @@
|
|
80
88
|
|
81
89
|
```
|
82
90
|
|
83
|
-
(あくまで机上、テストしてない)
|
91
|
+
(あくまで机上、テストしてない。そして変数名とか勝手に直しといた)
|
2
加筆修正
test
CHANGED
@@ -45,3 +45,39 @@
|
|
45
45
|
query() に失敗しているためなので、
|
46
46
|
|
47
47
|
GROUP BYがおかしいのを直しましょう。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
```php
|
52
|
+
|
53
|
+
$sql = <<<EOT
|
54
|
+
|
55
|
+
select user_id, user_name, address, pass
|
56
|
+
|
57
|
+
from user_data
|
58
|
+
|
59
|
+
WHERE user_id = ? AND pass = ?
|
60
|
+
|
61
|
+
EOT;
|
62
|
+
|
63
|
+
$stmt = $new_mysqli->prepare($sql);
|
64
|
+
|
65
|
+
$stmt->bind_param('is', $user, $pass); // $userがintのつもり、stringなら'ss'を指定
|
66
|
+
|
67
|
+
$result = $stmt->execute();
|
68
|
+
|
69
|
+
while($row = $result->fetch_array(MYSQLI_ASSOC)){
|
70
|
+
|
71
|
+
echo $row['user_id']. '<br />';
|
72
|
+
|
73
|
+
echo $row['user_name']. '<br />';
|
74
|
+
|
75
|
+
echo $row['address']. '<br />';
|
76
|
+
|
77
|
+
echo $row['pass']. '<br />';
|
78
|
+
|
79
|
+
}
|
80
|
+
|
81
|
+
```
|
82
|
+
|
83
|
+
(あくまで机上、テストしてない)
|
1
見直し
test
CHANGED
@@ -37,3 +37,11 @@
|
|
37
37
|
fetch()
|
38
38
|
|
39
39
|
の流れを真似して実装を見直してください。
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
query() を使って fetch_array() する場面でエラーになるのは、
|
44
|
+
|
45
|
+
query() に失敗しているためなので、
|
46
|
+
|
47
|
+
GROUP BYがおかしいのを直しましょう。
|