ユーザー登録時の確認メール。24h以内ならば有効。DBよりdatetime型の「レコード作成日時」を取得し、「24h前の現在時刻」と比較

MySQLMySQLi

概要

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





類似度ページランキング
順位 ページタイトル抜粋
1 ユーザー登録時の確認メール。24h以内ならば有効。DBよりdatetime型の「レコード作成日時」を取得し、「24h前の現在時刻」と比較 78
2 MySQLのdatetime型カラムより取得した「文字列」を、(先頭0なしの)年月日時分秒で表示 34
3 MySQLのdatetime型カラムに格納している値と比較して、24時間以内かどうかを判定 34
4 MySQLのdatetime型カラムより取得した「月日文字列」先頭に0があった場合、削除 30
5 MySQLのdatetime型へ格納するため、現在日時の1440分(1日)後を計算 28
6 2 つの配列(文字列とdatetime)が要素順で 対応している時、日付を整形して 新しい配列を作成 27
7 UNIXのタイムスタンプから日付(文字列)を取得後、「現在の年月日時分秒」を表示 … getdate() 27
8 指定日時より指定期間前の日時を取得 … strtotime() 26
9 投稿日時をTwitterのように「 26
10 Smartyのテンプレートにincludeしたファイルを表示 24
11 (データベースなどから取得した)多次元配列の値と、一次元配列を比較して、「一致」及び「増減」を返す 24
12 UNIXのタイムスタンプから日付(文字列)を取得後、「アクセスした時点の年月日時分秒」を整形して表示 … date() 24
13 gethostbynamel / 指定したインターネットホスト名に対応するIPv4アドレスの配列を取得 24
14 stdClassで、指摘キー毎の数をカウント後、新たなキー「count」として追加 / foreach 24
15 「range(int または numeric string または string)で生成した複数配列」をマージした結果の型を確認 23
16 gethostbyaddr / IPアドレスからホスト名を取得 22
17 dateとgmdateの比較 22
18 gethostbyname / インターネットホスト名に対応するIPv4アドレスを取得 22
19 「1週間後の年月日時分秒」を表示 … time() 22
20 対象文字列の内、「最初の指定文字列以前」と「それ以降の文字列」を取得する 21
2025/2/06 3:08 更新
週間人気ページランキング / 1-30 → 2-5
順位 ページタイトル抜粋 アクセス数
1 URLから、トップページ(index.html)判定 | ルーティング 11
2 24時間以降の時刻を表示 / "02:30" → "26:30" | 日付および時刻関連 5
3 後ろから3文字削除 / 「18:00:00」→「18:00」 | 文字列(テキスト処理) 4
3 PHPで最後の「指定区切り文字」より後ろを取得 | 配列(型) 4
3 8桁の生年月日数字を分解 | 文字列(テキスト処理) 4
3 配列の内容(ひらがな)を、読み(あ行~わ行)で分け、新たな配列へ格納 | 配列(型) 4
4 現在WebページのURLパスを第2階層まで取得 | パス 3
4 「指定文字」直後から「指定文字」直前までの文字列を返す | マルチバイト文字列(テキスト処理) 3
4 null代入とunset()の違い | 変数 3
4 配列キー内に「指定文字列が含まれるキー」と「その値」を抽出して、新しい配列を返す | 配列(型) 3
5 対象文字列を、文字数に応じて半分に分割後、それぞれを取得 | 文字列(テキスト処理) 2
5 日付表示(フォーマット指定) | 日付および時刻関連 2
5 foreach内で一度「true」判定された後、次回以降「false」にする仕組みがないと、foreachの度に「true」「false」判定することができない | 条件分岐 2
5 配列の空要素を削除 / array_diff()で空配列と比較し配列の差分を返す | 配列(型) 2
5 多次元配列で「二次元目の最大値 +1 」 を返す | 配列(型) 2
5 指定文字列より前を取得 | 文字列(テキスト処理) 2
5 foreachの中でswitch文 | 配列(型) 2
6 指定配列キーの重複数をカウント | 配列(型) 1
6 Smartyのテンプレートにincludeしたファイルを表示 | Smarty(テンプレートエンジン) 1
6 MySQLのdatetime型カラムに格納している値と比較して、24時間以内かどうかを判定 | 日付および時刻関連 1
2025/2/6 1:02 更新