PHPにCookieを使った観覧履歴を追加したい
Posted: 2016年1月25日(月) 04:07
私は今、PHPを使ってサイトを作っているのですが、サイトを利用した人に観覧履歴が追加出来たらなと思い、Cookieを利用して構築を試みようとしています。
観覧したら、Cookieの配列に値を追加していき、Cookieの配列に空きがなくなれば、古い要素の配列から消去し、要素0に履歴を追加するコードを組みました。
上記のようなコードを書きました。
//Cookieの配列の要素に空きがあれば$idを格納する
の処理では、$idを追加していきたいとき、
$history = {}
↓
$history = {0}
↓
$history = {0,1}
↓
$history = {0,1,2}
↓
$history = {0,1,2,3}
↓
$history = {0,1,2,3,4}
とできるのですが、
//Cookieの配列に空きがなくなれば、
//$idの値を要素ごとに1つずつずらし、
//要素0に$idを格納する
の処理がうまいこと動きません
現状では、
$history = {0,1,2,3,4} から$id=6を追加したら、
$history = {6,1,2,3,4} から$id=7を追加したら、
$history = {7,1,2,3,4}
となってしまい、ソートがされません。
正しくは、
$history = {0,1,2,3,4} から$id=6を追加したら、
$history = {6,0,1,2,3} から$id=7を追加したら、
$history = {7,6,0,1,2}
とソートしたいです。
開発環境はMAMPを利用してローカル環境で開発しており、OSはMac OS X Yosemiteです。
Cookieの確認は、chromeから
[設定]→[プライバシー コンテンツの管理]→[すべてのCookieサイト データ...]
からドメインで検索して、Cookieの確認を行っています。
ご回答よろしくお願いします。
観覧したら、Cookieの配列に値を追加していき、Cookieの配列に空きがなくなれば、古い要素の配列から消去し、要素0に履歴を追加するコードを組みました。
<?php
$id = isset($_GET['ID']) ? $_GET['ID'] : null; //GETでIDを受け取る
/* cookieに登録を行う */
//cookieの配列の要素に空きがあれば$idを格納する
if (isset($_COOKIE["history"])){
$history_id = $_COOKIE["history"];
for($i = 0; $i <= 4; $i++){
if(!isset($history_id[$i])){
setcookie ("history[$i]", $id);
break;
}
}
//cookieの配列に空きがなくなれば、
//$idの値を要素ごとに1つずつずらし、
//要素0に$idを格納する
if(isset($history_id[4])){
for($j = 4; $j >= 1; $j--){
$history_id[$j] = $history_id[$j-1];
}
setcookie ("history[0]", $id);
}
}
else{
setcookie ("history[0]", $id);
}
?>
//Cookieの配列の要素に空きがあれば$idを格納する
の処理では、$idを追加していきたいとき、
$history = {}
↓
$history = {0}
↓
$history = {0,1}
↓
$history = {0,1,2}
↓
$history = {0,1,2,3}
↓
$history = {0,1,2,3,4}
とできるのですが、
//Cookieの配列に空きがなくなれば、
//$idの値を要素ごとに1つずつずらし、
//要素0に$idを格納する
の処理がうまいこと動きません
現状では、
$history = {0,1,2,3,4} から$id=6を追加したら、
$history = {6,1,2,3,4} から$id=7を追加したら、
$history = {7,1,2,3,4}
となってしまい、ソートがされません。
正しくは、
$history = {0,1,2,3,4} から$id=6を追加したら、
$history = {6,0,1,2,3} から$id=7を追加したら、
$history = {7,6,0,1,2}
とソートしたいです。
開発環境はMAMPを利用してローカル環境で開発しており、OSはMac OS X Yosemiteです。
Cookieの確認は、chromeから
[設定]→[プライバシー コンテンツの管理]→[すべてのCookieサイト データ...]
からドメインで検索して、Cookieの確認を行っています。
ご回答よろしくお願いします。