第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