クッキーに配列で値をいれた時にうまく取り出せないです

このQ&Aのポイント
  • setcookie()で画面の項目をクッキーに保存したいのですが、項目が多いので項目制限のためか全部クッキーに保存されず配列にいれることにしました。
  • その際保存,読み出すときは下記のように書いたのですが、うまく拾ってくれません。
  • しかしながらprint_r($_COOKIE)で見た時は値が入っているようです。記述のミスなどがあればご指摘をお願いいたします。
回答を見る
  • ベストアンサー

クッキーに配列で値をいれた時にうまく取り出せないです

質問させていただきます。 setcookie()で画面の項目をクッキーに保存したいのですが、 項目が多いので項目制限のためか全部クッキーに保存されず配列にいれることにしました。 (implodeで一つの項目にしようかとも思いましたが、項目によっては一つの項目で複数の値をもつためやめました) その際保存,読み出すときは下記のように書いたのですが、うまく拾ってくれません。 しかしながらprint_r($_COOKIE)で見た時は値が入っているようです。 記述のミスなどがあればご指摘をお願いいたします。 //保存するとき $time = time() + 3600 * 24 * 30; setcookie("Item[a]",$_SESSION['a'],$time) setcookie("Item[b]",$_SESSION['b'],$time) setcookie("Item[c]",$_SESSION['c'],$time) //読み出すとき $_SESSION['a'] = $_COOKIE['Item[a]']; $_SESSION['b'] = $_COOKIE['Item[b]']; $_SESSION['c'] = $_COOKIE['Item[c]'];

  • PHP
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • shu_a
  • ベストアンサー率87% (14/16)
回答No.1

配列によってクッキーをセットした場合は、 []内がキーとなり、クッキーの値にアクセスされます。 なので $_SESSION['a'] = $_COOKIE['Item']['a']; ではないでしょうか?

VIPFIRE
質問者

お礼

ご指摘の通りの方法で出来ました ありがとうございます

関連するQ&A

  • クッキーの削除がうまくいきません

    <?php setcookie("a","おいしいクッキー"); $a=$_COOKIE["a"]; print "$a"; print "<br />"; setcookie("a","",time()-60); $b=$_COOKIE["a"]; print "$b"; ?> と書いて、クッキーの設定は出来たのですが、有効期限を過去にしても クッキーが削除されずにエラーメッセージが出ます。 エラーメッセージ Warning: Cannot modify header information - headers already sent by (output started at C:\Eclipse\workspace\PHP\cookie.php:7) in C:\Eclipse\workspace\PHP\cookie.php on line 11 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • クッキーの削除方法

    PHP5にて以下のようにクッキーを連想配列でセットしています。 setcookie("cookie[1]", "10", time()+600); setcookie("cookie[2]", "20", time()+600); setcookie("cookie[10]", "100", time()+600); この場合、一部のクッキー(例えばcookie[2]で設定したもの) だけを削除するにはどうすれば宜しいのでしょうか? 試しに以下の様に記述してみましたが、上手く削除されませんでした。 setcookie("cookie[2]"); また、全てのクッキー(全ての連想配列)を いっぺんに削除する方法もありましたら、お教えください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPで違うサーバーのスクリプトでクッキーを読めますか?

    サーバーAで次のようにクッキーを設定しました。 test.php <? setcookie("TEST","値"); ?> サーバーBで次のようにクッキーを読み込み ました。 test2.php <? $kekka=$HTTP_COOKIE_VARS["TEST"]; print $kekka; ?> 構想は、「値」と表示させることなのですが、 何も表示されませんでした。 上記は、何が間違えているでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • クッキーを連想配列で扱う方法について

    クッキーを連想配列で使ってみようと思い、下記のようなコードを書きましたがうまく動作しません。 当該クッキーがセットされているときは、★の方の処理が実行されるようにしたいのですが・・・。 修正方法のアドバイスをお願いできませんでしょうか。 if (isset($_COOKIE["mycookie['pg4']"])) { //この記述が問題でしょうか? $order = "desc"; // ★ } else { $order = "asc"; $expiry = time() + 365 * 24 * 3600; setcookie("mycookie['pg4']",1,$expiry); } これを実行した後に、ブラウザ(Firefox 5)のクッキーを見ると、 名前: mycookie['pg4'] 内容: 1 とあり、一応クッキーの送信はされているようです。 また(連想)配列をやめて、"mycookie['pg4']"の部分を全て"mycookie"に変更すれば希望の動作をしてくれます。 ただ、レンタル共有サーバーでの運用ということもありなるべく配列でクッキーをセットしたいのと、 このページ用のクッキーの値の有無(過去の訪問の有無)のみを判定したので、 連想配列でできればいいなぁ、と考えました。 ちなみにHTMLのbody中で、 <?=($_COOKIE["mycookie['pg4']"]);?>と書いてもやはり結果が出力されないので、 恐らくは$_COOKIE["mycookie['pg4']"] なんて書き方が悪いような気がするのですが、 確信はなく、修正方法もわかりません・・・。 お手数ですがご指導どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP cookieの値が更新されないときがある

    setcookie()を使ってcookieの値を更新したのですが、反映されない時があります。 クッキーに自作のセッションIDみたいなIDを保管して、そのIDを訪れる度に更新しようとしています。セッションIDなら session_regenerate_id();を使うと、更新されますよね?それと同じように自作IDに関しても、更新したいと思っています。 クッキーがうまく更新されていない時もsetcookie()の戻り値はtrue (1)です。どうしたら、session_regenerate_id();みたいにIDを更新して、反映させることができますか?

    • ベストアンサー
    • PHP
  • クッキー

    <?php setcookie(...); sleep(...); $cookiedata = $_COOKIE['...']; このようにして書き込んで間もないクッキーの値を$cookiedataに入れようとしましたがNULLが入っていました。 <?php $buf = ...; setcookie($buf); sleep(...); $cookiedata = $buf; とするのではなく、実際にクッキーから取得したいのですが、よい方法はありませんか?

    • 締切済み
    • PHP
  • クッキーに配列データを

    こんばんは。お世話になってます。 クッキーに配列データを保存したく、調べながら試行錯誤を繰り返していますが行き詰まってしまい、 アドバイスを頂戴できればと投函させて頂きます。 やりたいことは、掲示板にて書き込まれた内容をDBで管理しているのですが、各スレッドごとに1つのファイル(ページ)にて 呼び出しており、ページを閲覧した際、過去に1度でも閲覧した内容はカウント(訪問者数)せず、初めて閲覧した時のみ カウントするといった内容にしたいのですが、DBに登録されているデータも複数あることから、 DBに登録されているデータの連番を、配列データ(クッキー名:view)としてクッキーに登録しようと 考えるところまで至っていますが、うまく登録することが出来ずにいる次第です。 他にもっと適切なやり方があったら、そのご意見も頂戴したいのですが、以上のような考え方の場合、以下のスクリプトにおいて、 どこが不適切なのかをご指摘いただければ幸いにおもっております。 以下が、現在テスト中のスクリプトです。 $view_array = $_COOKIE["view[]"]; $view_array = unserialize(base64_decode($view_array)); //print_r($view_array); if(isset($_COOKIE["view[]"])){ if(!in_array($pno, $view_array)){ $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array[] = $pno; setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } }else{//クッキーに該当する配列がなかった場合 $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array = array($pno); setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } 以上、お忙しいなか恐縮ですが、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • クッキーの利用について

    CGIのプログラムで、複数の異なるURLのファイルからJavascriptを介してクッキーを利用する仕組みを考えています。 SetCookieでpath、domainの値を指定していますが、SetCookie後、発行したフォルダから他のフォルダに移動して再びsetCookieを行おうとすると、Cookieに正しく値が設定されないという現象が起こって困っております。 おそらくSetCookieの値の書き方の問題かと思いますが、どなたかおわかりになる方はいませんか?

  • クッキーに関して

    こんばんは。お世話になっております。 ここ1~2週間ほどクッキーについて学んでいるのですが、開発環境と実際のweb上での動きに違いが見られ、何がどう違うのか?が見えなくなってしまいました。下記に現状を書き留めますのでご指導頂けたら幸いに思います。 $addr = $_SERVER['REMOTE_ADDR']; setcookie("addr", $addr, time() + 60*60*24); setcookie("key_no", $key_no, time() + 60*60*24); 以上を設置すると、web上のサーバーにアップしたものに関しては、クッキーのファイルに、addr、key_no共に保存されるが、ローカルではクッキーファイル内にkey_noが見られない。 ブラウザを閉じた後、クッキー情報を取得するために、 if(isset($_COOKIE["addr"])){  $addr = $_SERVER['REMOTE_ADDR'];  $addr1 = $_COOKIE["addr"];   if($addr == $addr1){ として始めるものの、web上ではクッキーの取得に成功し、ローカル上ではクッキーを認識しない。 と、以上のような状況です。ソース的な不備も含め、ご指導いただきたく思います。お忙しい中恐縮ですが宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • phpでクッキーが削除できない(時がある)

    プルダウンで選択された都道府県にすんでいるユーザーの検索処理をしたいのです。 検索をクリックすると、クッキーを発行して、再読み込み。 phpでクッキーの値をみて、クッキーに値があれば、 ユーザー検索。なければ無視、というものです。 if($ck_flg == "1") { のあとに、 setcookie("accEnter","",time()-1); でクッキー値を削除していますが、 クッキーが削除できないためうまく制御ができません。 ただ、<option>タグの行を少し減らすと、クッキーが削除されて、 うまく動くようになります。 HTMLのコードの行数なども影響あるのでしょうか? setcookieの使い方がまずいのでしょうか? ご教示ください。 ■mypage.php(都道府県で検索) <?php $ck_flg = _ss($_COOKIE["flg"]); ?> <html> <body> <form name="search" action="./mypage.php" method="GET" >   <select name="pref">    <option value="東京都">東京都</option>    <option value="千葉県">千葉県</option>    <option value="埼玉県">埼玉県</option>    <option value="神奈川県">神奈川県</option>   </select>   //検索リンクをクリックすると再読み込み。   <a href="javascript: document.cookie = 'flg=1'; document.search.submit();">検索</a> </form> <php //検索リンクがクリックされていたらクッキーを削除して、ユーザーを検索。 //それ以外は無視。 if($ck_flg == "1") {   # COOKIE削除(再読込防止)   setcookie("accEnter","",time()-1);   //プルダウンで選択されたユーザーを検索   $sql = "SELECT id, username";   $sql .= " FROM user WHERE (pref= '神奈川県');"; }

    • 締切済み
    • PHP

専門家に質問してみよう