質問編集履歴

2

passRemindSend.php に書いたコードです。

2019/07/11 08:07

投稿

kuromame
kuromame

スコア12

test CHANGED
File without changes
test CHANGED
@@ -33,3 +33,477 @@
33
33
  ↓エックスサーバーからPHPでメールを送りたい
34
34
 
35
35
  https://programming-learning.com/2017/08/15/%E3%82%A8%E3%83%83%E3%82%AF%E3%82%B9%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8B%E3%82%89php%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E3%82%8A%E3%81%9F%E3%81%84/
36
+
37
+
38
+
39
+
40
+
41
+ 以下のコードが passRemindSend.php の内容です。
42
+
43
+
44
+
45
+ <?php
46
+
47
+
48
+
49
+ //共通変数・関数ファイルを読み込み
50
+
51
+ require('function.php');
52
+
53
+
54
+
55
+ debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「');
56
+
57
+ debug('「 パスワード再発行メール送信ページ ');
58
+
59
+ debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「');
60
+
61
+ debugLogStart();
62
+
63
+
64
+
65
+ //ログイン認証はなし(ログインできない人が使う画面だから)
66
+
67
+
68
+
69
+ //=================================
70
+
71
+ // 画面処理
72
+
73
+ //=================================
74
+
75
+ //post送信されていた場合
76
+
77
+ if (!empty($_POST)) {
78
+
79
+ debug('POST送信があります。');
80
+
81
+ debug('POST情報:' . print_r($_POST, true));
82
+
83
+
84
+
85
+ //変数にPOST情報代入
86
+
87
+ $email = $_POST['email'];
88
+
89
+
90
+
91
+ //未入力チェック
92
+
93
+ validRequired($email, 'email');
94
+
95
+
96
+
97
+ if (empty($err_msg)) {
98
+
99
+ debug('未入力チェックOK。');
100
+
101
+
102
+
103
+ //emailの形式チェック
104
+
105
+ validEmail($email, 'email');
106
+
107
+ //emailの最大文字数チェック
108
+
109
+ validMaxLen($email, 'email');
110
+
111
+
112
+
113
+ if (empty($err_msg)) {
114
+
115
+ debug('バリデーションOK.');
116
+
117
+
118
+
119
+ //例外処理
120
+
121
+ try {
122
+
123
+ //DBへ接続
124
+
125
+ $dbh = dbConnect();
126
+
127
+ //SQL文作成
128
+
129
+ $sql = 'SELECT count(*) FROM users WHERE email = :email AND delete_flg = 0';
130
+
131
+
132
+
133
+ $data = array(':email' => $email);
134
+
135
+ //クエリ実行
136
+
137
+ $stmt = queryPost($dbh, $sql, $data);
138
+
139
+
140
+
141
+ //クエリ結果の値を取得
142
+
143
+ $result = $stmt->fetch(PDO::FETCH_ASSOC);
144
+
145
+
146
+
147
+
148
+
149
+ //EmailがDBに登録されている場合
150
+
151
+ if ($stmt && array_shift($result)) {
152
+
153
+ debug('クエリ成功。DB登録あり');
154
+
155
+ $_SESSION['msg_success'] = SUC03;
156
+
157
+
158
+
159
+ $auth_key = makeRandKey(); //認証キー生成
160
+
161
+
162
+
163
+ //メール送信
164
+
165
+ $from = 'brevet@shingo5200.xsrv.jp';
166
+
167
+ $to = $email;
168
+
169
+ $subject = '【パスワード再発行認証】| 超長距離サイクリングの装備術';
170
+
171
+ $comment = <<<EOF
172
+
173
+ 本メールアドレス宛にパスワード再発行のご依頼がありました。
174
+
175
+ 下記のURLにて認証キーをご入力頂くとパスワードが再発行されます。
176
+
177
+
178
+
179
+ パスワード再発行認証キー入力ページ:◯◯◯◯◯
180
+
181
+ 認証キー:{$auth_key}
182
+
183
+ *認証キーの有効期限は30分となります
184
+
185
+
186
+
187
+ 認証キーを再発行されたい場合は下記ページより再度再発行をお願い致します。
188
+
189
+ ◯◯◯◯◯
190
+
191
+
192
+
193
+ //////////////////////////////////////////
194
+
195
+ 超長距離サイクリングの装備術
196
+
197
+ URL ◯◯◯◯◯
198
+
199
+ E-mail brevet@shingo5200.xsrv.jp
200
+
201
+ //////////////////////////////////////////
202
+
203
+ EOF;
204
+
205
+
206
+
207
+ sendMail($from, $to, $subject, $comment);
208
+
209
+ debug('sendMailの中身' . print_r($from, true));
210
+
211
+ debug('sendMailの中身' . print_r($to, true));
212
+
213
+ debug('sendMailの中身' . print_r($subject, true));
214
+
215
+ debug('sendMailの中身' . print_r($comment, true));
216
+
217
+
218
+
219
+ //認証に必要な情報をセッションへ保存
220
+
221
+ $_SESSION['auth_key'] = $auth_key;
222
+
223
+ $_SESSION['auth_email'] = $email;
224
+
225
+ $_SESSION['auth_key_limit'] = time() + (60 * 30); //現在時刻より30分後のUNIXタイムスタンプを入れる
226
+
227
+ debug('セッション変数の中身:' . print_r($_SESSION, true));
228
+
229
+
230
+
231
+ header("Location:passRemindRecieve.php"); //認証キー入力ページへ
232
+
233
+
234
+
235
+
236
+
237
+ } else {
238
+
239
+ debug('クエリに失敗したかDBに登録のないEmailが入力されました。');
240
+
241
+ $err_msg['common'] = MSG07;
242
+
243
+ }
244
+
245
+ } catch (Exception $e) {
246
+
247
+ error_log('エラー発生:' . $e->getMessage());
248
+
249
+ $err_msg['common'] = MSG07;
250
+
251
+ }
252
+
253
+ }
254
+
255
+ }
256
+
257
+ }
258
+
259
+ ?>
260
+
261
+
262
+
263
+ <?php
264
+
265
+ $siteTitle = 'パスワード再発行メール送信';
266
+
267
+ require('head.php');
268
+
269
+ ?>
270
+
271
+
272
+
273
+ <body class="page-signup page-1colum">
274
+
275
+
276
+
277
+ <!-- メニュー -->
278
+
279
+ <?php
280
+
281
+ require('header.php');
282
+
283
+ ?>
284
+
285
+
286
+
287
+ <p id="js-show-msg" style="display:none;" class="msg-slide">
288
+
289
+ <?php echo getSessionFlash('msg_success'); ?>
290
+
291
+ </p>
292
+
293
+
294
+
295
+
296
+
297
+ <!-- メインコンテンツ -->
298
+
299
+ <div id="contents" class="site-width">
300
+
301
+
302
+
303
+ <!-- Main -->
304
+
305
+ <section class="main">
306
+
307
+
308
+
309
+ <div class="form-container">
310
+
311
+
312
+
313
+ <form action="" method="post" class="form">
314
+
315
+ <p>ご指定のメールアドレス宛にパスワード再発行用のURLと認証キーをお送り致します。</p><br>
316
+
317
+ <div class="area-msg">
318
+
319
+ <?php
320
+
321
+ if (!empty($err_msg['common'])) echo $err_msg['common'];
322
+
323
+ ?>
324
+
325
+ </div>
326
+
327
+ <label class="<?php if (!empty($err_msg['email'])) echo $err_msg['email']; ?>">
328
+
329
+ E-mail
330
+
331
+ <input type="text" name="email" value="<?php echo getFormData('email'); ?>">
332
+
333
+ </label>
334
+
335
+ <div class="area-msg">
336
+
337
+ <?php
338
+
339
+ if (!empty($err_msg['email'])) echo $err_msg['email'];
340
+
341
+ ?>
342
+
343
+ </div>
344
+
345
+ <div class="btn-container">
346
+
347
+ <input type="submit" class="btn btn-mid" value="送信する">
348
+
349
+ </div>
350
+
351
+ <a href="mypage.php" class="a_href-change">&lt; マイページに戻る</a>
352
+
353
+ <form>
354
+
355
+ </div>
356
+
357
+ </section>
358
+
359
+ </div>
360
+
361
+
362
+
363
+ <!-- footer -->
364
+
365
+ <?php
366
+
367
+ require('footer.php');
368
+
369
+ ?>
370
+
371
+
372
+
373
+
374
+
375
+ 以下が送信ボタンを押した時のデバッグの内容です。
376
+
377
+ デバッグを見るとメールは送信されているようですが、実際にはメールは届いていません。
378
+
379
+
380
+
381
+ [11-Jul-2019 16:45:07 Asia/Tokyo] デバッグ:現在日時タイムスタンプ:1562831107
382
+
383
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
384
+
385
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:「 パスワード再発行メール送信ページ 
386
+
387
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
388
+
389
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
390
+
391
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:セッションID:t7up3srgvdchfunaoc5l7v0a5l
392
+
393
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:セッション変数の中身:Array
394
+
395
+ (
396
+
397
+ [msg_success] =>
398
+
399
+ [auth_key] => SgyfcZ2c
400
+
401
+ [auth_email] => tsunoda123tobai@gmail.com
402
+
403
+ [auth_key_limit] => 1562832907
404
+
405
+ )
406
+
407
+
408
+
409
+ [11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:現在日時タイムスタンプ:1562831161
410
+
411
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
412
+
413
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:「 パスワード再発行メール送信ページ 
414
+
415
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
416
+
417
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
418
+
419
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:セッションID:khk9v0u7orpccd3m80o03do0ej
420
+
421
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:セッション変数の中身:Array
422
+
423
+ (
424
+
425
+ [msg_success] =>
426
+
427
+ [auth_key] => SgyfcZ2c
428
+
429
+ [auth_email] => tsuno123tobai@gmail.com
430
+
431
+ [auth_key_limit] => 1562832907
432
+
433
+ )
434
+
435
+
436
+
437
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:現在日時タイムスタンプ:1562831933
438
+
439
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:POST送信があります。
440
+
441
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:POST情報:Array
442
+
443
+ (
444
+
445
+ [email] => tsuno123tobai@gmail.com
446
+
447
+ )
448
+
449
+
450
+
451
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:未入力チェックOK。
452
+
453
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:バリデーションOK.
454
+
455
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:クエリ成功。
456
+
457
+ [11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:クエリ成功。DB登録あり
458
+
459
+ [11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:メールを送信しました。
460
+
461
+ [11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身brevet@shingo5200.xsrv.jp
462
+
463
+ [11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身tsuno123tobai@gmail.com
464
+
465
+ [11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身【パスワード再発行認証】| 超長距離サイクリングの装備術
466
+
467
+ [11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身 本メールアドレス宛にパスワード再発行のご依頼がありました。
468
+
469
+ 下記のURLにて認証キーをご入力頂くとパスワードが再発行されます。
470
+
471
+
472
+
473
+ パスワード再発行認証キー入力ページ:◯◯◯◯◯
474
+
475
+ 認証キー:lXPAJ3wR
476
+
477
+ *認証キーの有効期限は30分となります
478
+
479
+
480
+
481
+ 認証キーを再発行されたい場合は下記ページより再度再発行をお願い致します。
482
+
483
+ ◯◯◯◯◯
484
+
485
+
486
+
487
+ //////////////////////////////////////////
488
+
489
+ 超長距離サイクリングの装備術
490
+
491
+ URL ◯◯◯◯◯
492
+
493
+ E-mail brevet@shingo5200.xsrv.jp
494
+
495
+ //////////////////////////////////////////
496
+
497
+ [11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:セッション変数の中身:Array
498
+
499
+ (
500
+
501
+ [msg_success] => メールを送信しました
502
+
503
+ [auth_key] => lXPAJ3wR
504
+
505
+ [auth_email] => tsuno123tobai@gmail.com
506
+
507
+ [auth_key_limit] => 1562833734
508
+
509
+ )

1

画像を追加しました。

2019/07/11 08:07

投稿

kuromame
kuromame

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 自作WEBサービスにパスワードリマインダーの機能を実装しようとしています。
1
+ ![![![イメージ説明](1e031352fd62326aecf32989d7cc9fc8.png)](2510dfc8ec060d4c33a9290994646464.png)](aa177d31692c9eada19bdde93d7d766d.png)自作WEBサービスにパスワードリマインダーの機能を実装しようとしています。
2
2
 
3
3
 
4
4