第2回「ユーザー情報の取得と管理 データベースへ登録」PHP・HTML5・MySQL

こんにちは、今回はアクセスしてきたユーザーの情報をデータベースへ登録する処理です。

少し、ボリューム多めです。20分位かけてゆっくり見ていってください

 

 

目次

・登録するユーザー情報とアクセス情報

・各情報の取得方法

・データベースへ登録処理

 
   

 

・登録するユーザー情報とアクセス情報

今回、登録する情報です。

 
$_SESSION[“ユーザーID”];   ユーザーID(ログインしていればユーザーID、ログインしていなければ空を登録)
date(“Y-m-d”);  アクセス日

 $arrTime = explode(‘.’,microtime(true));

date(‘Y-m-d H:i:s’, $arrTime[0]) . ‘.’ .$arrTime[1];

 アクセス日日時(4桁ミリ秒)

 (empty($_SERVER[“HTTPS”]) ? “http://” : “https://”)

.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];

 アクセスしたページのURL
 $_SERVER[‘HTTP_REFERER’];  リンクのページ
 $_SERVER[‘REMOTE_ADDR’];  ユーザーのIPアドレス
 $_SERVER[‘REMOTE_HOST’];  ユーザーのホスト名
 $_SERVER[‘REMOTE_PORT’];  ユーザーのポート番号
 $_SERVER[‘HTTP_USER_AGENT’];  ユーザーのブラウザ情報
$url_analysis_flag ただ更新されただけか、URLを直接入力して来たか、ページ上やほかのサイトのリンクから来たかのフラグ

※紫背景の、ユーザーIDと更新されただけかフラグ以外は、デフォルトの環境で使えます。

 


・各情報の取得方法

 ユーザーID

まず、ユーザーIDはサイトにログインしていて、その時やサイトにアクセスした際に、セッションを付与されている必要があります。

//セッションをセットします
$_SESSION["ユーザーID"] = データベースから検索したユーザーID

仕様として、ログインしていなければ、何も登録しないようにしています。

 

アクセス日

date(“Y-m-d”);

PHPのデフォルト関数「date()」を使います。

出力結果は、「2017-12-20」と当日の日付が表示されます。

 

アクセス日日時(4桁ミリ秒)

//explode関数で、"."(小数点)で分割し、UNIXタイムを配列に代入
//0番目は日時。1番目は小数点以下のミリ秒。
$arrTime = explode('.',microtime(true));

//日付.4桁ミリ秒を出力
date('Y-m-d H:i:s', $arrTime[0]) . '.' .$arrTime[1];

PHPのデフォルト関数「microtime(true)」関数を使い、4桁ミリ秒を求め、「explode()」関数で分割し配列に代入します。

そして「date()」関数で日付と4桁ミリ秒を出力します。

結果は「2017-12-20 04:27:04.2601」と現在の日付・時刻が表示されます。

参考サイト:https://applian.jp/php-get-millisecond-time

 

アクセスしたページのURL

(empty($_SERVER["HTTPS"]) ? "http://" : "https://").$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

こちらもPHPのデフォルト関数「$_SERVER[]」変数を使います。

結果は「https://www.google.com」と、今、見ているページのURLが表示されます。

※2017年12月現在では、「http」と「https」のサイトがどちらも存在しますので、どちらでも対応できるようにしています。

参考サイト:https://qiita.com/tsujimomo/items/c293d15e34646a826266

      http://www.flatflag.nir87.com/server-358

 

リンクのページ

 $_SERVER['HTTP_REFERER'];

PHPのデフォルト関数「$_SERVER[‘HTTP_REFERER’]」です。

出力結果は、今のページにアクセスする際に、どこのサイトのリンクから推移してきたのかを、URLで表示します。

結果は「https://google.com」等と表示されます。

※URLに直接アドレスを入力してアクセスしたり、ブックマークに登録していてそこをクリックしてアクセスしてきた場合は、何も出力されません。

 

ユーザーのIPアドレス

ユーザーのホスト名

ユーザーのポート番号

 ユーザーのブラウザ情報

こちらは前回の書きました記事で、求め方を記述しています。

こちらをご覧ください。

第1回「ユーザー情報の取得と管理」

 

ただ更新されただけか、URLを直接入力して来たか、ページ上やほかのサイトのリンクから来たかのフラグ

このフラグについては、必要な人だけ見てください。

//現在開いているページのURLを変数に代入。
$this_httpfile_URL = (empty($_SERVER["HTTPS"]) ? "http://" : "https://").$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
	
if ($_COOKIE['last_httpfile_url'] == $this_httpfile_URL) {
	//ただ更新された場合(F5含む)やsubmit(送信更新)した時。URLを直接入力して同じページにアクセスしてきたと場合。
	$url_analysis_flag = "0";
}elseif(empty($_SERVER['HTTP_REFERER'])){
	//URLを入力して直接アクセスしてきた場合や、ブックマークからページにアクセス(最後にアクセスしたページとちがうぺーじにアクセス)した場合。
	$url_analysis_flag = "1";
}else{
	//ページ上やほかのサイトのリンクから来た場合
	$url_analysis_flag = "2";
}

/************************** 下の「$TOPPAGE_URL」変数の値は書き換えてください。 ************************************/
$TOPPAGE_URL = "ここはトップページが置かれえているフォルダの名前を書いてください。";

//TOPPAGEが置いているフォルダ名を取得。(下記のクッキーは同じフォルダを指定する必要があるため)相対パスはダメ見たいです。
$TOP_DIR_name = basename(realpath($TOPPAGE_URL."/"));

//前回開いたページ情報のCOOKIEを削除
setcookie('last_httpfile_url','',time()-1,"/".$TOP_DIR_name."/");
//Cookieに1日間、前回開いたいるページURLを保管。
setcookie('last_httpfile_url',(empty($_SERVER["HTTPS"]) ? "http://" : "https://").$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],time()+60*60*24
,"/".$TOP_DIR_name."/");

コードは長いですが、簡潔に言うと、「ブラウザのクッキーに現在のURLを保存して、クッキーやリファラーで判断し、フラグに数字を代入する。」という処理です。

 

出力結果は「0」「1」「2」で表示されます。

「0」は、ただ更新された場合(F5含む)やsubmit(送信更新)した時。URLを直接入力して同じページにアクセスしてきたと場合。

「1」は、URLを入力して直接アクセスしてきた場合や、ブックマークからページにアクセス(最後にアクセスしたページとちがうぺーじにアクセス)した場合。

「2」は、ページ上やほかのサイトのリンクから来た場合。

 

参考URL:http://wataame.sumomo.ne.jp/archives/5068

 

 


・データベースへ登録処理

データベース(MySQL)への登録です。

登録するテーブルと列を作りましょう。

そこに、INSERT文でそれぞれの列に、上記の情報を登録します。

 

ここに関しては具体的なコードは割愛します。

 

 


 

 

この処理は、各ページに行いたい処理ですので、別ファイルで作り、それをもともとのページで「includ()」で読み込むのがいいでしょう。

 

 

今回の記事は以上です。お疲れさまでした。

,

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です