質問編集履歴

1

前回の質問一旦削除しました。

2017/06/18 04:57

投稿

YamamotoAtsushi
YamamotoAtsushi

スコア17

test CHANGED
@@ -1 +1 @@
1
- googla api calender月替わカレンダーとエラーメッセージにつ
1
+ mysqlにてデーターベースからパスワードとidを取り出し、loginフォームを作
test CHANGED
@@ -1,337 +1,381 @@
1
- google api calender使って祝日を取得し、日替わりケジュ作成するためにカレダー作りたいと考えておりま
1
+ mysqlにid,userid,name,passwordを登録し、idとパ取り出しログイ画面出したいのでが、
2
-
3
- 但し、google api calenderもローカルのxamppで扱うと「unable to find the wrapper "https" 」というエラーメッセージ
2
+
4
-
5
- が出てしまいます。
6
-
7
- た、月めりにしようとファイルが存在しませんというエラーが出ます。申し訳御座いませんがどなたか教えて頂ければと思います。
3
+ まくいきません。下記にコードとエラー画面、試したことを記載しますので教えて頂ければと思います。
4
+
8
-
5
+ まだ、phpのmysqlについて習って日が浅いのでどなたかご教授頂ければと思います。
6
+
9
- お願いします。
7
+ よろしくお願いいたします。
8
+
9
+
10
+
11
+ ログイン画面 login.php
10
12
 
11
13
  ```php
12
14
 
13
15
  <?php
14
16
 
17
+ require 'password.php';
18
+
19
+ // セッション開始
20
+
21
+ session_start();
22
+
23
+
24
+
25
+ $db['host'] = "localhost"; // DBサーバのurl
26
+
27
+ $db['user'] = "testuser";
28
+
29
+ $db['pass'] = "testpass";
30
+
31
+ $db['dbname'] = "booksample";
32
+
33
+
34
+
35
+ // エラーメッセージの初期化
36
+
37
+ $errorMessage = "";
38
+
39
+
40
+
41
+ // ログインボタンが押された場合
42
+
43
+ if (isset($_POST["login"])) {
44
+
45
+ // 1.ユーザIDの入力チェック
46
+
47
+ if (empty($_POST["userid"])) {
48
+
49
+ $errorMessage = "ユーザIDが未入力です。";
50
+
51
+ } else if (empty($_POST["password"])) {
52
+
53
+ $errorMessage = "パスワードが未入力です。";
54
+
55
+ }
56
+
57
+
58
+
59
+ // 2.ユーザIDとパスワードが入力されていたら認証する
60
+
61
+ if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
62
+
63
+ // mysqlへの接続
64
+
65
+ $mysqli = new mysqli($db['host'], $db['user'], $db['pass']);
66
+
67
+ if ($mysqli->connect_errno) {
68
+
69
+ print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error);
70
+
71
+ exit();
72
+
73
+ }
74
+
75
+
76
+
77
+ // データベースの選択
78
+
79
+ $mysqli->select_db($db['dbname']);
80
+
81
+
82
+
83
+ var_dump($db['dbname']);
84
+
85
+
86
+
87
+ // 入力値のサニタイズ
88
+
89
+ $userid = $mysqli->real_escape_string($_POST["userid"]);
90
+
91
+ var_dump($userid);
92
+
93
+ // クエリの実行
94
+
95
+ $query = "SELECT * FROM users WHERE name = '" . $userid . "'";
96
+
15
97
 
16
98
 
17
- // 初期値
18
-
19
- $y = date('Y');
20
-
21
- $m = date('m');
22
-
23
-
24
-
25
- // 日付の指定がある場合
26
-
27
- if(!empty($_GET['date']))
28
-
29
- {
30
-
31
- $arr_date = explode('-', htmlspecialchars($_GET['date'], ENT_QUOTES));
32
-
33
-
34
-
35
- if(count($arr_date) == 2 and is_numeric($arr_date[0]) and is_numeric($arr_date[1]))
36
-
37
- {
38
-
39
- $y = (int)$arr_date[0];
99
+ $result = $mysqli->query($query);
100
+
40
-
101
+ var_dump($query);
102
+
103
+ var_dump($result);
104
+
105
+ if (!$result) {
106
+
107
+ print('クエリーが失敗しました。' . $mysqli->error);
108
+
41
- $m = (int)$arr_date[1];
109
+ $mysqli->close();
110
+
42
-
111
+ exit();
112
+
43
- }
113
+ }
114
+
115
+
116
+
117
+
118
+
119
+
120
+
44
-
121
+ while ($row = $result->fetch_assoc()) {
122
+
123
+ // パスワード(暗号化済み)の取り出し
124
+
125
+ $db_hashed_pwd = $row['password'];
126
+
45
- }
127
+ }
128
+
129
+
130
+
131
+ var_dump($db_hashed_pwd);
132
+
133
+
134
+
135
+ // データベースの切断
136
+
137
+ $mysqli->close();
138
+
139
+
140
+
141
+ // 3.画面から入力されたパスワードとデータベースから取得したパスワードのハッシュを比較します。
142
+
143
+ //if ($_POST["password"] == $pw) {
144
+
145
+ if (password_verify($_POST["password"], $db_hashed_pwd)) {
146
+
147
+ // 4.認証成功なら、セッションIDを新規に発行する
148
+
149
+ session_regenerate_id(true);
150
+
151
+ $_SESSION["USERID"] = $_POST["userid"];
152
+
153
+ header("Location: main.php");
154
+
155
+ exit;
156
+
157
+ } else {
158
+
159
+ // 認証失敗
160
+
161
+ $errorMessage = "ユーザIDあるいはパスワードに誤りがあります。";
162
+
163
+ }
164
+
165
+ } else {
166
+
167
+ // 未入力なら何もしない
168
+
169
+ }
170
+
171
+ }
46
172
 
47
173
 
48
174
 
49
- // 祝日の取得の関数
175
+
50
-
51
- function japan_holiday($year = '')
176
+
52
-
53
- {
54
-
55
- $apiKey = 'GoogleAPIキー ';
56
-
57
- $holidays = array();
58
-
59
-
60
-
61
- // カレンダーID
62
-
63
- $calendar_id = urlencode('グーグルカレンダーのID');
64
-
65
-
66
-
67
- // 取得期間
68
-
69
- $start = date($year."-01-01\T00:00:00\Z");
70
-
71
- $finish = date($year."-12-31\T00:00:00\Z");
72
-
73
-
74
-
75
- $url = "https://www.googleapis.com/calendar/v3/calendars/{$calendar_id}/events?key={$apiKey}&timeMin={$start}&timeMax={$finish}&maxResults=50&orderBy=startTime&singleEvents=true";
76
-
77
-
78
-
79
- if ($results = file_get_contents($url, true))
80
-
81
- {
82
-
83
- // JSON形式で取得した情報を配列に格納
84
-
85
- $results = json_decode($results);
86
-
87
-
88
-
89
- // 年月日をキー、祝日名を配列に格納
90
-
91
- foreach ($results->items as $item) {
92
-
93
- $date = strtotime((string) $item->start->date);
94
-
95
- $title = (string) $item->summary;
96
-
97
- $holidays[date('Y-m-d', $date)] = $title;
98
-
99
-
100
-
101
- var_dump($holidays);
177
+ var_dump($db_hashed_pwd);
102
-
103
- }
178
+
104
-
105
-
106
-
107
- // 祝日の配列を並び替え
179
+
108
-
109
- ksort($holidays);
180
+
110
-
111
-
112
-
113
- var_dump($holidays);
181
+
114
-
115
- }
116
-
117
-
118
-
119
- return $holidays;
120
-
121
- }
122
-
123
-
124
-
125
- // 祝日取得
126
-
127
- $national_holiday = japan_holiday($y);
128
182
 
129
183
  ?>
130
184
 
131
- <!DOCTYPE html>
185
+ <!doctype html>
186
+
132
-
187
+ <html>
188
+
133
- <head>
189
+ <head>
134
-
190
+
135
- <meta charset="utf-8">
191
+ <meta charset="UTF-8">
192
+
136
-
193
+ <title>サンプルアプリケーション</title>
194
+
137
- </head>
195
+ </head>
138
-
196
+
139
- <table>
197
+ <body>
198
+
140
-
199
+ <h1>ログイン機能 サンプルアプリケーション</h1>
200
+
201
+ <!-- $_SERVER['PHP_SELF']はXSSの危険性があるので、actionは空にしておく -->
202
+
203
+ <!--<form id="loginForm" name="loginForm" action="<?php print($_SERVER['PHP_SELF']) ?>" method="POST">-->
204
+
205
+ <form id="loginForm" name="loginForm" action="" method="POST">
206
+
207
+ <fieldset>
208
+
209
+ <legend>ログインフォーム</legend>
210
+
211
+ <div><?php echo $errorMessage ?></div>
212
+
213
+ <label for="userid">ユーザID</label><input type="text" id="userid" name="userid" value="">
214
+
141
- <tr>
215
+ <br>
142
-
216
+
143
- <td><a href="./date=<?php echo date('Y-m', strtotime($y .'-' . $m . ' -1 month')); ?>">&lt; 前の月</a></td>
217
+ <label for="password">パスワード</label><input type="password" id="password" name="password" value="">
144
-
145
- <td><?php echo $y ?>年<?php echo $m ?>月</td>
218
+
146
-
147
- <td><a href="./date=<?php echo date('Y-m', strtotime($y .'-' . $m . ' +1 month')); ?>">次の月 &gt;</a></td>
148
-
149
- </tr>
150
-
151
- </table>
152
-
153
-
154
-
155
- <table>
156
-
157
- <tr>
219
+ <br>
220
+
158
-
221
+ <input type="submit" id="login" name="login" value="ログイン">
222
+
159
- <th>日</th>
223
+ </fieldset>
160
-
161
- <th>月</th>
224
+
162
-
163
- <th>火</th>
164
-
165
- <th>水</th>
166
-
167
- <th>木</th>
168
-
169
- <th>金</th>
170
-
171
- <th>土</th>
172
-
173
- </tr>
225
+ </form>
226
+
174
-
227
+ </body>
228
+
175
- <tr>
229
+ </html>
230
+
176
-
231
+ ```
232
+
177
-
233
+ メイン画面 main.php
234
+
235
+ ```php
178
236
 
179
237
  <?php
180
238
 
181
-
182
-
183
- // 1日の曜日を取得
239
+ session_start();
184
-
185
- $wd1 = date("w", mktime(0, 0, 0, $m, 1, $y));
240
+
186
-
187
-
188
-
241
+
242
+
189
- // 数だけ空のセルを作成
243
+ // ログイン状態チェック
190
-
244
+
191
- for ($i = 1; $i <= $wd1; $i++) {
245
+ if (!isset($_SESSION["USERID"])) {
192
-
246
+
193
- echo "<td> </td>";
247
+ header("Location: logout.php");
248
+
194
-
249
+ exit;
250
+
195
- }
251
+ }
196
-
197
-
198
-
199
- $d = 1;
252
+
200
-
201
- while (checkdate($m, $d, $y)) {
253
+
202
-
203
-
204
-
205
- // 日曜:赤色
206
-
207
- if(date("w", mktime(0, 0, 0, $m, $d, $y)) == 0)
208
-
209
- {
210
-
211
- echo "<td style='color:red;'>$d</td>";
212
-
213
- }
214
-
215
- // 土曜:青色
216
-
217
- elseif(date("w", mktime(0, 0, 0, $m, $d, $y)) == 6)
218
-
219
- {
220
-
221
- echo "<td style='color:blue;'>$d</td>";
222
-
223
- }
224
-
225
- // 祝日:黄色
226
-
227
- elseif(!empty($national_holiday[date("Y-m-d", mktime(0, 0, 0, $m, $d, $y))]))
228
-
229
- {
230
-
231
- echo "<td style='background:yellow;'>$d</td>";
232
-
233
- }
234
-
235
- // 土日祝以外
236
-
237
- else
238
-
239
- {
240
-
241
- echo "<td>$d</td>";
242
-
243
- }
244
-
245
-
246
-
247
- // 週の始まりと終わりでタグを出力
248
-
249
- if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6)
250
-
251
- {
252
-
253
- // 週を終了
254
-
255
- echo "</tr>";
256
-
257
-
258
-
259
- // 次の週がある場合は新たな行を準備
260
-
261
- if (checkdate($m, $d + 1, $y)) {
262
-
263
- echo "<tr>";
264
-
265
- }
266
-
267
- }
268
-
269
-
270
-
271
- $d++;
272
-
273
- }
274
-
275
-
276
-
277
- // 最後の週の土曜日まで空のセルを作成
278
-
279
- $wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y));
280
-
281
-
282
-
283
- for ($i = 1; $i < 7 - $wdx; $i++)
284
-
285
- {
286
-
287
- echo "<td> </td>";
288
-
289
- }
290
254
 
291
255
  ?>
292
256
 
257
+
258
+
259
+ <!doctype html>
260
+
261
+ <html>
262
+
263
+ <head>
264
+
265
+ <meta charset="UTF-8">
266
+
267
+ <title>サンプルアプリケーション</title>
268
+
269
+ </head>
270
+
271
+ <body>
272
+
273
+ <h1>ログイン機能 サンプルアプリケーション</h1>
274
+
275
+ <!-- ユーザIDにHTMLタグが含まれても良いようにエスケープする -->
276
+
277
+ <p>ようこそ<?=htmlspecialchars($_SESSION["USERID"], ENT_QUOTES); ?>さん</p>
278
+
279
+ <ul>
280
+
281
+ <li><a href="logout.php">ログアウト</a></li>
282
+
293
- </tr>
283
+ </ul>
294
-
284
+
295
- </table>
285
+ </body>
296
286
 
297
287
  </html>
298
288
 
289
+
290
+
299
291
  ```
300
292
 
301
-
302
-
303
- 試したことは以下の通りです。
304
-
305
- APIまでの部分を下記に変えて、月代わりをしようとしましたが
306
-
307
- 出来ませんでした。
293
+ logout.php
308
-
309
-
310
294
 
311
295
  ```php
312
296
 
297
+ <?php
298
+
299
+ session_start();
300
+
301
+
302
+
313
- if(isset($_GET['date'])){
303
+ if (isset($_SESSION["USERID"])) {
314
-
315
- $y = date('Y');
304
+
316
-
317
- $m = date('m');
318
-
319
- $date = $_GET['date'];
320
-
321
- } else {
322
-
323
- $date ="";
305
+ $errorMessage = "ログアウトしました。";
324
306
 
325
307
  }
326
308
 
327
-
309
+ else {
310
+
311
+ $errorMessage = "セッションがタイムアウトしました。";
312
+
313
+ }
314
+
315
+ // セッション変数のクリア
316
+
317
+ $_SESSION = array();
318
+
319
+
320
+
321
+ @session_destroy();
322
+
323
+ ?>
324
+
325
+
326
+
327
+ <!doctype html>
328
+
329
+ <html>
330
+
331
+ <head>
332
+
333
+ <meta charset="UTF-8">
334
+
335
+ <title>サンプルアプリケーション</title>
336
+
337
+ </head>
338
+
339
+ <body>
340
+
341
+ <h1>ログイン機能 サンプルアプリケーション</h1>
342
+
343
+ <div><?php echo $errorMessage; ?></div>
344
+
345
+ <ul>
346
+
347
+ <li><a href="login.php">ログイン画面に戻る</a></li>
348
+
349
+ </ul>
350
+
351
+ </body>
352
+
353
+ </html>
328
354
 
329
355
  ```
330
356
 
357
+
358
+
359
+ 出ているエラー
360
+
361
+ Notice: Undefined variable: db_hashed_pwd in C:\xampp\htdocs\login\login.php on line 59
362
+
363
+ 59行目が、var_dumpで調べてもデーターベースからパスワードを引き出せていないというものでした。
364
+
331
- 新しphp7.1.4に変え
365
+ 空のnullとう文字が出しまいます。
366
+
332
-
367
+ 試したことは、$query = "SELECT * FROM users WHERE name = '" . $userid . "'";のあとに
368
+
369
+ ```php
370
+
333
- php.iniの部分の;extension=php_openssl.dllの;を取り外したことですが、
371
+ $query = "SELECT * FROM users WHERE password;
372
+
334
-
373
+ ```
374
+
375
+ をつけたり、
376
+
335
- エラメッセージが改善さる気配がありせんでした。
377
+ hash(sha1,"password")でパスワドを切ていないかを調べましたが、切れていないようです
336
-
378
+
337
- 申し訳御座ませんどなたか教えて頂ければと思います。
379
+ データーベース扱いが初めてなものでどなたか頂ければと思います。
380
+
381
+ 宜しくお願い致します。