PHPやります!PHPでスクリプト/CGI作ります! -3ページ目

【コーディング】ブログを簡単に見るヤツ11

アカウント削除処理です。

必要な必要なパラメータ
・ID
※今は、リクエストのパラメータにIDのっけてるんですがせっかくセッションにMAILID持ってるので
 セッションから取得するように変更したい。・・・予定。

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

2.パラメータチェック → エラーがあったら、エラー画面を表示。
・ID 数値であること。

3.退会する・退会しないの選択を表示。

------退会するを選択した場合の処理------
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト

2.パラメータチェック
・ID 数値であること。

3.退会対象のユーザー情報を取得する。
SQL
select ID, NAME, MYRSS, MAIL, MAILFLAG, MAILTIME from tbl_user where MAIL = ?
$stmt->bind_param("s", $idmail);

4.【オレ専用RSS】が存在する場合、削除する。

5.アカウント用のテーブルから対象ユーザーを削除する。

6.削除完了画面を表示する。

------退会しないを選択した場合の処理------
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト

2.パラメータチェック → エラーがあったら、エラー画面を表示。
・ID 数値であること。

3.TOPにリダイレクトする。


---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更
・メール送信時間設定
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)
・アカウント削除

---------まだ---------
・アカウント登録


明日には、出来そうですね。コードの見直しして、いろいろ動かしてみます。

・・・しかし、つまんねーブログだな。

ちょっと考えます。

【訂正】ブログを簡単に見るヤツ7(つづき)

前回の続き

メールアドレス変更しますか?で「はい」が選択された場合の処理。

必要なパラメータ。
ID アカウントのID
TOKEN トークン


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.アカウント用のテーブルに、更新対象のユーザーが存在するか確認。
 →存在しない場合は、エラー画面。

4.アカウント用のテーブルに、新しいメールアドレスを設定
SQL
update tbl_user set MAIL = ? where ID = ?
$stmt->bind_param("si", $mail, $id);

5.メールアドレス変更テーブルから、レコードを削除。

6.セッションをクリアする。

7.メールアドレス変更完了画面を表示



メールアドレス変更しますか?で「いいえ」が選択された場合の処理。

必要なパラメータ。
ID アカウントのID
TOKEN トークン


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.メールアドレス変更テーブルから、レコードを削除。

5.TOPにリダイレクト


やっと出来た・・・

---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更
・メール送信時間設定
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)

---------まだ---------
・アカウント登録
・アカウント削除

時間の経過を調べる方法

指定時刻が、現在の時刻から何日経過しているか調べる。

//現在時刻のDateTime作成
$d1 = new DateTime(date("Y-m-d H:i:s"));
//指定時刻のDateTime作成
$d2 = new DateTime('2011-07-11 09:08:51');

echo $d1->getTimestamp();
echo "\n";
echo "\n";

echo $d2->getTimestamp();
echo "\n";
echo "\n";

//1日(24時間)足す
$d2->add(new DateInterval("P1D"));
echo $d2->getTimestamp();
echo "\n";
echo "\n";

//引き算してプラスだったら、24時間以上経っている。
echo $d1->getTimestamp() - $d2->getTimestamp();
echo "\n";

**************実行結果**************
1310429436

1310342931

1310429331

105

************************************

DateTime使えば、簡単に出来ると思ったのにDateIntervalのパラメータが使いにくい。
それに、なんかイヤだな・・・

↓普通に演算することにした・・・

$d1 = time();
$d2 = strtotime('2011-07-11 09:38:51');

echo $d1;
echo "\n";
echo "\n";

echo $d2;
echo "\n";
echo "\n";

echo $d1 - ($d2+60*60*24);
echo "\n";
echo "\n";

なんか、もっと良い方法ってないのかなぁ・・・

【設計】ブログを簡単に見るヤツ9

メールアドレスの変更をする処理で、トークン保存用のテーブルを使います。


<メールアドレス変更テーブル>
ID    ユーザーID
MAILNEW  新しいメールアドレス
MAILOLD  現在のメールアドレス
TOKEN   トークン 
DATE    更新日付

mysql> create table tbl_mailtemp(
ID int not null,
MAILNEW text not null,
MAILOLD text not null,
TOKEN text not null,
DATE timestamp);

こんなカンジです。

やはり、適当な設定をしているので変更になる可能性もあります。

【訂正】ブログを簡単に見るヤツ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時間以上経っている場合は、無効なアクセスとする。メールアドレス変更テーブルからレコードを削除する。