回答編集履歴

6

SQL文の見直し

2020/01/20 02:37

投稿

退会済みユーザー
test CHANGED
@@ -64,11 +64,11 @@
64
64
 
65
65
  $sql = <<<EOT
66
66
 
67
- select user_id, user_name, address, pass
67
+ SELECT `user_id`, `user_name`, `address`, `pass`
68
68
 
69
- from user_data
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

見直し

2020/01/20 02:37

投稿

退会済みユーザー
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

加筆修正

2020/01/20 02:25

投稿

退会済みユーザー
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

見直し

2020/01/20 02:22

投稿

退会済みユーザー
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 = $new_mysqli->prepare($sql);
71
+ $stmt = $mysqli->prepare($sql);
64
72
 
65
- $stmt->bind_param('is', $user, $pass); // $userがintのつもり、stringなら'ss'を指定
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

加筆修正

2020/01/20 02:19

投稿

退会済みユーザー
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

見直し

2020/01/20 02:09

投稿

退会済みユーザー
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がおかしいのを直しましょう。