質問編集履歴

3

内容修正

2019/09/11 00:50

投稿

Nitta
Nitta

スコア96

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,24 @@
18
18
 
19
19
 
20
20
 
21
+ ◎要件内容
22
+
23
+
24
+
25
+ ①ログイン画面からパスワード・メールアドレスを入力できる。
26
+
27
+ ②DBにメールアドレスを登録する。
28
+
29
+ ③パスワードは管理者のみが変更する。
30
+
31
+ ④登録されたメールアドレスにパスワードを送信し、
32
+
33
+  送信したら、利用者がログインしあるツールを
34
+
35
+  使用できるようにする。
36
+
37
+
38
+
21
39
  尚、MysqlにはuserDetaのDBは作成済み。
22
40
 
23
41
 
@@ -106,6 +124,80 @@
106
124
 
107
125
  ```
108
126
 
127
+ login.php
128
+
129
+ ```
130
+
131
+ <?php
132
+
133
+
134
+
135
+ require_once('config.php');
136
+
137
+
138
+
139
+ session_start();
140
+
141
+ //POSTのvalidate
142
+
143
+ if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
144
+
145
+ echo '入力された値が不正です。';
146
+
147
+ return false;
148
+
149
+ }
150
+
151
+ //DB内でPOSTされたメールアドレスを検索
152
+
153
+ try {
154
+
155
+ $pdo = new PDO(DSN, DB_USER, DB_PASS);
156
+
157
+ $stmt = $pdo->prepare('select * from userDeta where email = ?');
158
+
159
+ $stmt->execute([$_POST['email']]);
160
+
161
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
162
+
163
+ } catch (\Exception $e) {
164
+
165
+ echo $e->getMessage() . PHP_EOL;
166
+
167
+ }
168
+
169
+ //emailがDB内に存在しているか確認
170
+
171
+ if (!isset($row['email'])) {
172
+
173
+ echo 'メールアドレス又はパスワードが間違っています。';
174
+
175
+ return false;
176
+
177
+ }
178
+
179
+ //パスワード確認後sessionにメールアドレスを渡す
180
+
181
+ if (password_verify($_POST['password'], $row['password'])) {
182
+
183
+ session_regenerate_id(true); //session_idを新しく生成し、置き換える
184
+
185
+ $_SESSION['EMAIL'] = $row['email'];
186
+
187
+ echo 'ログインしました';
188
+
189
+ } else {
190
+
191
+ echo 'メールアドレス又はパスワードが間違っています。';
192
+
193
+ return false;
194
+
195
+ }
196
+
197
+ ```
198
+
199
+
200
+
109
201
  Sign.php
110
202
 
111
203
 

2

内容修正

2019/09/11 00:50

投稿

Nitta
Nitta

スコア96

test CHANGED
File without changes
test CHANGED
@@ -90,6 +90,20 @@
90
90
 
91
91
  }
92
92
 
93
+ try{
94
+
95
+ $stmt = $pdo->prepare("insert into userDeta(email, password) value(?, ?)");
96
+
97
+ $stmt->execute([$email, $password]);
98
+
99
+ echo '登録完了';
100
+
101
+ }catch(\Exception $e){
102
+
103
+ echo '登録済みのメールアドレスです。';
104
+
105
+ }
106
+
93
107
  ```
94
108
 
95
109
  Sign.php

1

内容調整

2019/09/11 00:30

投稿

Nitta
Nitta

スコア96

test CHANGED
File without changes
test CHANGED
@@ -6,26 +6,196 @@
6
6
 
7
7
 
8
8
 
9
- ログインログウト機能設けて
10
-
11
- 特定に認証したものだけ更新登録等できるよう
12
-
13
- したいのですが、のよすればいいでしょうか?
14
-
15
-
16
-
17
- **********
18
-
19
-
20
-
21
- ①新規登録する場合認証されたもみ。
22
-
23
-
24
-
25
- ②各人のログインID及びパスワードを
26
-
27
- レンタルサーバーのDBに登録する。
28
-
29
-
30
-
31
- ③認証Okのもののみツールの該当サイト部分を閲覧・登録できるようにする。
9
+ 以下ようなコードでパスワード及びドレス入力し
10
+
11
+ ログイン登録したんですが、以下のようなエラーが出ます。
12
+
13
+ どうすれば改善きますでしょうか?
14
+
15
+
16
+
17
+ ご教示下さい。
18
+
19
+
20
+
21
+ 尚、MysqlにuserDetaDBは作成済み。
22
+
23
+
24
+
25
+ エラー内容
26
+
27
+ ```
28
+
29
+ SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'exits userDeta( id int not null auto_increment primary key, email varchar(25' at line 1 登録済みのメールアドレスです。
30
+
31
+ ```
32
+
33
+
34
+
35
+ Sign/sign.php
36
+
37
+ ```
38
+
39
+ <?php
40
+
41
+ require_once('../config.php');
42
+
43
+
44
+
45
+ try{
46
+
47
+ $pdo = new PDO(DSN, DB_USER, DB_PASS);
48
+
49
+ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
50
+
51
+ $pdo->exec("create table if not exits userDeta(
52
+
53
+ id int not null auto_increment primary key,
54
+
55
+ email varchar(255),
56
+
57
+ password varchar(255),
58
+
59
+ created timestamp not null default current_timestamp
60
+
61
+ )");
62
+
63
+ }catch(Exception $e){
64
+
65
+ echo $e->getMessage().PHP_EOL;
66
+
67
+ }
68
+
69
+
70
+
71
+ if(!$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
72
+
73
+ echo '入力された値が不正です。';
74
+
75
+ return false;
76
+
77
+ }
78
+
79
+
80
+
81
+ if(preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i', $_POST['password'])){
82
+
83
+ $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
84
+
85
+ }else{
86
+
87
+ echo 'パスワードは半角英数字をそれぞれ1文字以上含んだ8文字以上で設定してください。';
88
+
89
+ return false;
90
+
91
+ }
92
+
93
+ ```
94
+
95
+ Sign.php
96
+
97
+
98
+
99
+ ```
100
+
101
+ <?php
102
+
103
+
104
+
105
+ function h($s){
106
+
107
+ return htmlspecialchars($s, ENT_QUOTES, utf-8);
108
+
109
+
110
+
111
+ }
112
+
113
+
114
+
115
+ //session_id発行
116
+
117
+ session_start();
118
+
119
+
120
+
121
+ if (isset($_SESSION['EMAIL'])){
122
+
123
+ echo 'ようこそ'. h($_SESSION['EMAIL'])."さん<br>";
124
+
125
+ echo "<a href='/logout.php'>ログアウトはこちら!</a>";
126
+
127
+ exit;
128
+
129
+ }
130
+
131
+
132
+
133
+ ?>
134
+
135
+
136
+
137
+ <!DOCTYPE html>
138
+
139
+ <html lang="ja">
140
+
141
+ <head>
142
+
143
+ <meta charset="utf-8">
144
+
145
+ <title>Login</title>
146
+
147
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
148
+
149
+ <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" media="screen">
150
+
151
+ </head>
152
+
153
+ <body>
154
+
155
+ <div class="container">
156
+
157
+ <h1>ようこそ、ログインしてください!!</h1>
158
+
159
+ <form action="login.php" method="post">
160
+
161
+ <label for="email">email</label>
162
+
163
+ <input type="email" name="email" placeholder="○○○○○○@gmail.com">
164
+
165
+ <label for="password">password</label>
166
+
167
+ <input type="password" name="password" placeholder="nghwr437"><br>
168
+
169
+ <br>
170
+
171
+ <button type="submit">Sign In!</button>
172
+
173
+ </form>
174
+
175
+ <h1>初めての方はこちら</h1>
176
+
177
+   <form action="Sign/signUp.php" method="post">
178
+
179
+ <label for="email">email</label>
180
+
181
+ <input type="email" name="email">
182
+
183
+ <label for="password">password</label>
184
+
185
+ <input type="password" name="password"><br>
186
+
187
+ <br>
188
+
189
+ <button type="submit">Sign Up!</button>
190
+
191
+ <p style="color: #FF0000;">*パスワードは半角英数字をそれぞれ1文字以上含んだ、8文字以上で設定してください!<p>
192
+
193
+ </form>
194
+
195
+ </div>
196
+
197
+ </body>
198
+
199
+ </html>
200
+
201
+ ```