teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

追記しました

2021/06/01 00:45

投稿

Nanmotsu
Nanmotsu

スコア22

title CHANGED
File without changes
body CHANGED
@@ -71,4 +71,81 @@
71
71
  }
72
72
  echo "exception not occurred<br>";
73
73
  ```
74
- を入れると、exception not occurredが表示されます。
74
+ を入れると、exception not occurredが表示されます。
75
+
76
+
77
+
78
+ 追記2
79
+
80
+ ```php
81
+ <?php
82
+
83
+
84
+ function h($str)
85
+ {
86
+ return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
87
+ }
88
+
89
+ session_start();
90
+ $name = $_POST['name'];
91
+ $dsn = "mysql:host=localhost; dbname=login_test; charset=utf8";
92
+ $username = "※※※※※※";
93
+ $password = "※※※※※※";
94
+ try {
95
+ $dbh = new PDO($dsn, $username, $password,
96
+ [
97
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
98
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
99
+ ]);
100
+ }
101
+ catch (PDOException $e) {
102
+ echo "in catch clause<br>";
103
+ exit($e->getMessage());
104
+ }
105
+ echo "exception not occurred<br>";
106
+ var_dump($dbh);
107
+ var_dump($e);
108
+
109
+
110
+ $sql = "SELECT * FROM users WHERE name = :name";
111
+ $stmt = $dbh->prepare($sql);
112
+ $stmt->bindValue(':name', $name);
113
+ $stmt->execute();
114
+ $member = $stmt->fetch(); //配列で取得
115
+
116
+ if (password_verify($_POST['num'], $member['num'])) {
117
+ //DBのユーザー情報をセッションに保存
118
+ $_SESSION['name'] = $member['name'];
119
+ $_SESSION['num'] = $member['num'];
120
+ $msg = 'ログインしました。';
121
+ $link = '<a href="index.php">ホーム</a>';
122
+ } else {
123
+ $msg = '名前もしくはパスワードが間違っています。';
124
+ $link = '<a href="index.php">戻る</a>';
125
+ }
126
+ ?>
127
+
128
+
129
+ <!DOCTYPE html>
130
+ <html lang="ja">
131
+ <head>
132
+ <meta charset="utf-8">
133
+ <link rel="icon" href="favicon.ico">
134
+ <link rel="stylesheet" href="css/practicestyle.css">
135
+ <title>login</title>
136
+ </head>
137
+
138
+ <body>
139
+
140
+
141
+ <h1><?= h($msg); ?></h1>
142
+ <?php echo $link; ?>
143
+
144
+ </body>
145
+ </html>
146
+
147
+ ```
148
+
149
+ が全コードとなります。
150
+
151
+ var_dump($dbh);で「object(PDO)#1 (0) { }」と表示されます。

1

情報の追加

2021/06/01 00:45

投稿

Nanmotsu
Nanmotsu

スコア22

title CHANGED
File without changes
body CHANGED
@@ -27,4 +27,48 @@
27
27
 
28
28
  php.iniなどのファイルをいじらないといけないのかもしれませんが、どの部分をいじればよいかわかりません。
29
29
 
30
- つたない質問で申し訳ありませんが、ご教授いただけると助かります。
30
+ つたない質問で申し訳ありませんが、ご教授いただけると助かります。
31
+
32
+
33
+
34
+
35
+
36
+ 情報不足ですみません。
37
+
38
+ ・phpと同じサーバなのか(コード内でlocalhostを指定しているので同じであると予想)
39
+ →VPSに登録して、CENTOS7、APACHE、MariaDB、phpを入れていますので、同じサーバ―だと思います。
40
+
41
+ ・ソフトウェアは何か
42
+ →MariaDBです
43
+
44
+ ・バージョン
45
+ 「mysql --version」で以下が表示されました。
46
+ Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
47
+ です。
48
+
49
+ ・DBは起動しているか
50
+ 「systemctl status maridb」で
51
+ active(running)と表示されました。
52
+
53
+ ・作成したデータベースは何か(コード内で指定しているlogin_testと予想)
54
+ はい。login_testです。
55
+
56
+ ・ユーザは作成したのか。権限付与したのか
57
+ mariadbのほうでユーザーを作成して、login_testにのみ権限付与しました。
58
+
59
+ ・phpではなく、データベースのコマンド操作で同じ結果を得られているのか
60
+ mariadb内でDB作成しましたので、そのあたりは大丈夫と思います。
61
+
62
+
63
+
64
+
65
+
66
+ また、
67
+ ```php
68
+ } catch (PDOException $e) {
69
+ echo "in catch clause<br>";
70
+ exit($e->getMessage());
71
+ }
72
+ echo "exception not occurred<br>";
73
+ ```
74
+ を入れると、exception not occurredが表示されます。