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

MySQLMySQLi

概要

 閲覧数:1200  投稿日: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
2024/4/27 7:59 更新
週間人気ページランキング / 4-20 → 4-26
順位 ページタイトル抜粋 アクセス数
1 後ろから3文字削除 / 「18:00:00」→「18:00」 | 文字列(テキスト処理) 13
2 URLから、トップページ(index.html)判定 | ルーティング 9
3 現在WebページのURLパスを第2階層まで取得 | パス 8
4 配列の空要素を削除 / array_diff()で空配列と比較し配列の差分を返す | 配列(型) 7
4 配列の内容(ひらがな)を、読み(あ行~わ行)で分け、新たな配列へ格納 | 配列(型) 7
5 対象文字列の内、「最初の指定文字列以前」と「それ以降の文字列」を取得する | 文字列(テキスト処理) 6
6 多次元配列キーを、多次元配列内にある「特定キーの値」へ変更 | 多次元配列(型) 5
7 指定文字列より前を取得 | 文字列(テキスト処理) 3
7 可変変数(変数) カテゴリー 3
7 文字列の中で変数展開される要件 | 文字列(テキスト処理) 3
8 配列キー内に「指定文字列が含まれるキー」と「その値」を抽出して、新しい配列を返す | 配列(型) 2
8 「input type="datetime-local"」で受け取った文字列をハイフンへ変更 | 日付および時刻関連 2
8 switch文判定 … 「in_array」「array_keys」 | 配列(型) 2
8 (データベースなどから取得した)多次元配列の値と、一次元配列を比較して、「一致」及び「増減」を返す | 配列(型) 2
8 null代入とunset()の違い | 変数 2
8 PHPで最後の「指定区切り文字」より後ろを取得 | 配列(型) 2
9 「指定配列要素が配列内で重複している数」をカウント後、配列要素として追加 | 配列(型) 1
9 現在のセッション名を取得、表示 | セッション 1
9 foreachの中でswitch文 | 配列(型) 1
9 「可変変数」 × 「配列要素を、文字列連結して表示」 … for文+implode | 可変変数(変数) 1
2024/4/27 1:02 更新