PHPを最近始めたばかりの初心者です。
ご教授の程、どうぞ宜しくお願い致します!m(__)m
早速ですが、商品一覧のページを作成しました。
下記のように商品毎にそれぞれ「お気に入り追加」というアンカーを設置しています。
lang
1<!-- index.php --> 2 3<ul> 4 <li>商品1</li> 5 <li><a href="favorite.php?keep_in=10001">お気に入り追加</a></li> 6 <li>商品2</li> 7 <li><a href="favorite.php?keep_in=10002">お気に入り追加</a></li> 8 . 9 . 10 . 11</ul>
「お気に入り追加」をクリックするとCookieに商品IDを追加して行き、
もう一度「お気に入り追加」をクリックで商品IDを削除するにはどうしたら良いでしょうか?
setcookieで配列にして記憶させておいて、再度「お気に入り追加」をクリックで keep_in と同じ値が既にCookieにある場合は、該当する配列を削除する様にしたら良いのでしょうか?
lang
1// favorite.php 2 3if (isset($_GET['keep_in'])) { 4 $value = $_GET['keep_in']; 5 setcookie("KeepID[$value]", $value, time()+60*60*24*30, "/"); 6}
お気に入り追加を行った商品の保存期間は30日として設定しています。
後々やりたいことになりますが、Cookieで記録した配列はPDOでプレースホルダーにして
MySQLで商品詳細として抽出し表示したいと思っています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
シリアライズすれば良いと思います。
lang
1$keeplist[$value] = $value; 2setcookie("keeplist", serialize($keeplist), time()+60*60*24*30, "/");
取り出すときはデシリアライズします。
lang
1$keeplist = unserialize($_COOKIE["keeplist"]);
例外処理とか無視した最小限で書くと下記のような感じです。
lang
1<?php 2$keeplist = array(); 3 4if (isset($_COOKIE['keeplist'])) { 5 $keeplist = unserialize($_COOKIE["keeplist"]); 6} 7 8if (isset($_GET['keep_in'])) { 9 $value = $_GET['keep_in']; 10 if (isset($keeplist[$value])) { 11 unset($keeplist[$value]); 12 } else { 13 $keeplist[$value] = $value; 14 } 15 16 setcookie("keeplist", serialize($keeplist), time()+60*60*24*30, "/"); 17} 18 19var_dump($keeplist);
コメントにもある通り、クッキーのような外部からくる値を unserialize
するのは危険なので json_encode/json_decode
を使うほうが良いです。
投稿2015/03/24 00:35
編集2018/02/06 00:35総合スコア4514
0
ごめん、余計なことした、cookie のときは [] 使えないんだね
lang
1 if( isset( $_GET[ 'keep_in' ] ) ) { 2 if( array_key_exists( 'KeepID', $_COOKIE ) && ( $p = array_search( $_GET[ 'keep_in' ], $_COOKIE[ 'KeepID' ] ) ) !== false ) { 3 // Delete value from cookie. 4 setcookie("KeepID[{$p}]", '', time() - 3600, '/'); 5 unset($_COOKIE['KeepID'][$p]); 6 } else { 7 // Add value in cookie. 8 $value = $_GET[ 'keep_in' ]; 9 setcookie("KeepID[{$value}]", $value, time() + 2592000 /*60*60*24*30*/, '/'); 10 } 11 } 12 13 var_dump( $_COOKIE );
投稿2015/03/25 19:21
総合スコア81
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ごめんなさい、逆でした
lang
1array_search( $_GET[ 'keep_in' ], $_COOKIE[ 'KeepID' ] )
setcookie で表示されたエラーは、array_search のエラー出力が原因です。
投稿2015/03/24 13:05
総合スコア81
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/25 10:51
0
lang
1if ( isset( $_GET[ 'keep_in' ] ) ) { 2 if ( ( $p = array_search( $_COOKIE[ 'KeepID' ], $_GET[ 'keep_in' ] ) ) !== false ) { 3 // Delete value from cookie. 4 setcookie( "KeepID[{$p}]", '', time() - 3600, '/' ); 5 unset( $_COOKIE[ 'KeepID' ][ $p ] ); 6 } else { 7 // Add value in cookie. 8 setcookie( 'KeepID[]', $_GET[ 'keep_in' ], time() + 2592000/*60*60*24*30*/, '/' ); 9 } 10}
KeepID[] = ~ ってすると自動で連番振って新しい要素追加してくれる。
お気に入りとかもデータベース管理したほうがいいと思うけど、登録とかしなきゃいけなくなるからね
俺なら場合によっては登録以外の方法取るけど
投稿2015/03/24 10:05
編集2015/03/24 10:14総合スコア81
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/24 12:16
2015/03/24 13:08
2015/03/24 13:13
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/24 09:45
2015/03/24 14:57
2015/03/24 14:59
2015/03/24 15:03
2015/03/25 10:50
2015/03/26 02:35
2015/03/26 09:18
2015/03/26 09:31
2015/03/26 13:23
2015/03/27 00:45
2015/03/27 14:04