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

MySQLMySQLi

概要

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





類似度ページランキング
順位 ページタイトル抜粋
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/11/23 10:57 更新
週間人気ページランキング / 11-16 → 11-22
順位 ページタイトル抜粋 アクセス数
1 配列キー内に「指定文字列が含まれるキー」と「その値」を抽出して、新しい配列を返す | 配列(型) 8
1 後ろから3文字削除 / 「18:00:00」→「18:00」 | 文字列(テキスト処理) 8
2 URLから、トップページ(index.html)判定 | ルーティング 6
3 指定文字列より前を取得 | 文字列(テキスト処理) 5
4 配列の内容(ひらがな)を、読み(あ行~わ行)で分け、新たな配列へ格納 | 配列(型) 4
4 MySQLのdatetime型カラムに格納している値と比較して、24時間以内かどうかを判定 | 日付および時刻関連 4
5 現在WebページのURLパスを第2階層まで取得 | パス 3
5 対象文字列の内、「最初の指定文字列以前」と「それ以降の文字列」を取得する | 文字列(テキスト処理) 3
5 2 つの配列(文字列とdatetime)が要素順で 対応している時、日付を整形して 新しい配列を作成 | 配列(型) 3
6 再帰処理で平坦な連想配列をツリー化 | 多次元配列(型) 2
6 「1週間後の年月日時分秒」を表示 … time() | 日付および時刻関連 2
6 投稿日時をTwitterのように「★分前」「★時間前」という文字列変換するユーザ定義PHP関数 | 日付および時刻関連 2
6 配列要素を、文字列連結して表示(元配列を上書) … foreach文+implode | 配列(型) 2
6 8桁の生年月日数字から、年齢を計算 | 日付および時刻関連 2
6 null代入とunset()の違い | 変数 2
6 PHPで最後の「指定区切り文字」より後ろを取得 | 配列(型) 2
7 配列定数同士をarray_mergeで後ろに単純連結(キーは新たに振り直す) | 定数 1
7 gethostbyaddr / IPアドレスからホスト名を取得 | ネットワーク 関数 1
7 マークダウンで書かれたURLを(エスケープ処理するのではなく)削除する | テキスト処理 1
7 対象文字列を、文字数に応じて半分に分割後、それぞれを取得 | 文字列(テキスト処理) 1
2024/11/23 1:02 更新