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

MySQLMySQLi

概要

 閲覧数:1430  投稿日: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/3/11 2:37 更新
週間人気ページランキング / 3-4 → 3-10
順位 ページタイトル抜粋 アクセス数
1 配列キー内に「指定文字列が含まれるキー」と「その値」を抽出して、新しい配列を返す | 配列(型) 9
2 後ろから3文字削除 / 「18:00:00」→「18:00」 | 文字列(テキスト処理) 8
3 指定文字列より前を取得 | 文字列(テキスト処理) 5
3 PHPで最後の「指定区切り文字」より後ろを取得 | 配列(型) 5
4 現在WebページのURLパスを第2階層まで取得 | パス 4
4 8桁の生年月日数字を分解 | 文字列(テキスト処理) 4
4 多次元配列の作成 | 多次元配列(型) 4
5 URLから、トップページ(index.html)判定 | ルーティング 3
6 配列の要素に特定の値が存在すれば、要素のキーを返す array_search() | 配列(型) 2
6 24時間以降の時刻を表示 / "02:30" → "26:30" | 日付および時刻関連 2
6 (データベースなどから取得した)多次元配列の値と、一次元配列を比較して、「一致」及び「増減」を返す | 配列(型) 2
6 「指定文字」直後から「指定文字」直前までの文字列を返す | マルチバイト文字列(テキスト処理) 2
7 Smartyのテンプレートにincludeしたファイルを表示 | Smarty(テンプレートエンジン) 1
7 対象文字列の内、「最初の指定文字列以前」と「それ以降の文字列」を取得する | 文字列(テキスト処理) 1
7 null代入とunset()の違い | 変数 1
7 特定のHTMLタグのみ表示を許可 | エスケープ処理 1
7 平均値、分散、標準偏差を求める | 統計 1
7 アルファベット小文字に続けて大文字表示 | 文字列(テキスト処理) 1
7 range( ) を使用して日付期間を配列生成 | 日付および時刻関連 1
7 unset | タグ毎エントリー一覧 1
2025/3/11 1:02 更新