【訂正】ブログを簡単に見るヤツ7 | PHPやります!PHPでスクリプト/CGI作ります!

【訂正】ブログを簡単に見るヤツ7

メールアドレスを変更する処理の修正版です。

メールアドレスを変更する場合は、メールアドレス変更確認メールを送信するようにします。
確認メールから、メールアドレス変更URLにアクセスすることで変更完了とする。

まず、必要なパラメータ。
ID アカウントのID
MAIL 設定する値変更するメールアドレス


処理の流れ
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト

2.パラメータチェック → エラーがあったら、X-StatにERR_PARAMETER(401)を設定してレスポンス。
・ID 数値であること。
・MAIL 正しいメールアドレス形式であること。

3.設定対象のIDが存在すること。 → 存在しない場合は、X-StatにERR_NOTFOUND(402)を設定してレスポンス。
存在するか確認する方法

4.変更するメールアドレスが既に登録されていないか確認。 → 既に登録されている場合は、X-StatにERR_MAIL_ALREADY(304)を設定してレスポンス。

5.メールアドレスを取得。
使用するSQL
select MAIL from tbl_user where ID = ?
$stmt->bind_param("i", $id);

6.トークン作成
メールアドレスとタイムスタンプをくっつけた物をmd5+base64したヤツ。

7.メールアドレス変更テーブルに「ID・変更前アドレス・変更後アドレス・トークン・日時」を登録。IDが存在する場合は、上書き。
使用するSQL
(存在する場合) update tbl_mailtemp set MAILNEW = ?, MAILOLD = ?, TOKEN = ? where ID = ?
         $stmt->bind_param("ssi", $mailnew, $mailold, $token, $id);

(存在しない場合)insert into tbl_mailtemp (ID, MAILNEW, MAILOLD, TOKEN) values (?, ?, ?, ?)
         $stmt->bind_param("iss", $id, $mailnew, $mailold, $token);

8.変更後メールアドレスに、メールアドレス変更確認メールを送信する。送信に失敗した場合は、X-StatにERR_MAIL(504)を設定してレスポンス。

9.X-StatにSUCCESS(200)を設定してレスポンス。


メールアドレス変更URLにアクセスしてからの処理。

1.パラメータチェック → エラーがあった場合は、エラー画面。
・ID 数値であること。
・TOKEN 設定されていること。

2.メールアドレス変更テーブルに、IDが登録されているか確認。 → 登録されていない場合は、エラー画面。

3.メールアドレス変更テーブルから「変更前アドレス・変更後アドレス・日時」を取得
SQL
select MAILNEW, MAILOLD, UNIX_TIMESTAMP(DATE) from tbl_mailtemp where ID = ? and TOKEN = ?
$stmt->bind_param("is", $id, $token);

4.メールアドレス変更テーブルの、更新対象レコードの更新日時から24時間以上経っていないか確認。
  →24時間以上経っている場合は、無効なアクセスとする。メールアドレス変更テーブルからレコードを削除する。