概要
閲覧数:1327
投稿日: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 "無効"; }