概要
閲覧数:1586
投稿日:2014-10-29
更新日:2020-04-03
ユーザー登録時の確認メール
・24h以内ならば有効
・DBよりdatetime型の「レコード作成日時」を取得し、「24h前の現在時刻」と比較
2038年問題を考慮すると、下記実装の方が良い
http://phpcode.w4c.work/php/status/205
コード
// オブジェクト指向型
$urlhash = "○○";
$DBSERVER = "localhost"; //MySQLサーバー名
$DBUSER = "○○"; //ログインユーザー名
$DBPASSWORD = "○○"; //パスワード
$DBNAME = "○○"; //データベース名
$mysqli = new mysqli($DBSERVER, $DBUSER, $DBPASSWORD, $DBNAME);
//MySQL読み込み時の文字コードを設定(クライアントのデフォルト文字セットを設定)
$mysqli->set_charset("utf8");// http://php.net/manual/ja/mysqli.set-charset.php
//接続状況をチェック(直近の接続コールに関するエラーコードを返す)
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());//直近のエラーの内容を文字列で返す
exit();
}
// プリペアドステートメントを作成
if ($stmt = $mysqli->prepare("SELECT created_at FROM user WHERE usr_confirm_hash = ?")) {// http://php.net/manual/ja/mysqli.prepare.php
// パラメータを変数にバインド
$stmt->bind_param("s", $urlhash);// stringの場合は、s。http://jp.php.net/manual/ja/mysqli-stmt.bind-param.php
// クエリ実行
$stmt->execute();
// 結果変数をバインド
$stmt->bind_result($result);// http://jp2.php.net/manual/ja/mysqli-stmt.bind-result.php
// 値を取得
$stmt->fetch();
printf("%s\n", $result);
// ステートメントを閉じる
$stmt->close();
}
// 接続を閉じる
$mysqli->close();
$register = strtotime($result);//取得したレコード作成日時を、タイムスタンプへ変換
$confirm = strtotime("now -24 hour");//24h前の現在時刻
if($confirm<=$register){//C <= R 「24h前の現在時刻」「レコード作成日時」比較
echo "有効";
}else{
echo "無効";
}