• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クッキー値の表示について(PHP))

クッキー値の表示について(PHP)

このQ&Aのポイント
  • クッキー値を表示する際に、クッキー名が値そのものである場合、どのように表示するか
  • 連続して画面に表示するためのスクリプトの書き方について教えてほしい
  • クッキーの値を表示するスクリプトの改善方法について

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>setcookie("$hospital[$i]", $hospital, time()+60*60*24*7); このsetcookieがブラウザ側にどう送られているか(ブラウザ側で受け取ったHTTPレスポンスヘッダで)確認されていますか? $hospitalは文字列でしょうか?配列でしょうか?コメントアウトされた部分では配列として扱っていたようですが、少なくとも$hospital = $_GET['iinmei'];の時点では文字列のハズです。 配列でなく文字列に対しても$str[$i]のように書けますが、これは(zero baseで)$i番目の一文字を表すだけです。書けてしまうので文法エラーにはなりませんので要注意です。 なお、Cookieに配列を保存したいのであれば、json_encode/json_decodeやserialize/unserializeを使って「文字列化して格納/取得してから元に戻す」のが手っ取り早いです。 (セット時) setcookie('hospital', json_encode($hospityal_array), time()+60*60*24*7); (取得時) if (isset($_COOKIE['hospital'])) { $hospital_array = json_decode($_COOKIE['hospital']); } else { $hospital_array = array(); }

beterugius
質問者

お礼

ご回答、どうもありがとうございました。 前回ご指摘の、$idxを用いた方法で動作しました。

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

ちょっと状況が読み取れていないかもですが、こんな話なんですかねぇ・・・ for($m=0; $m<$_SESSION['cnt']; $m++){ if (!isset($hospital[$m])) { continue; } $idx = $hospital[$m]; if (!isset($_COOKIE[$idx])) { continue; } // // $_COOKIE[$idx] を使って表示 // }

beterugius
質問者

お礼

毎回お世話になっております^^ ご回答、どうもありがとうございました。

beterugius
質問者

補足

<?php session_start(); //$hospital = array(); // 医院配列 // アクセスした医院名が、医院配列に存在しなければ、医院配列に医院名を追加する //if(!array_key_exists($_GET['iinmei'], $hospital)) array_unshift($hospital, $_GET['iinmei']); $hospital = $_GET['iinmei']; if(is_null($_SESSION['cnt'])) $_SESSION['cnt']=0; if((int)$_GET['chuumoku_flag']===1){ // 注目リストに追加するボタンが押されたら // $chuumoku_iin["$hospital"] = 1; // 注目リストファイルに、キーと値をライト $filename = "../access_log/chuumoku_hospital.txt"; $fp = fopen($filename, 'a'); $buf = $_GET['iinmei'].',1'."\n"; fputs($fp, $buf); fclose($fp); // setcookie("$hospital", $hospital, time()+60*60*24*7); // 1週間分のクッキーを発行 // $_SESSION['cnt']++; // クッキーの数をインクリメント $i = $_SESSION['cnt']; setcookie("$hospital[$i]", $hospital, time()+60*60*24*7); // 1週間分のクッキーを発行 // setcookie("$hospital", $hospital, time()+60*60*24*7); // 1週間分のクッキーを発行 $_SESSION['cnt']++; // クッキーの数をインクリメント }else{ // 注目リストから削除ボタンが押されたら // $chuumoku_iin["$hospital"] = 0; // 注目リストファイルに、キーと値をライト $filename = "../access_log/chuumoku_hospital.txt"; $fp = fopen($filename, 'a'); $buf = $_GET['iinmei'].',0'."\n"; fputs($fp, $buf); fclose($fp); // setcookie("$hospital", "", time()-1000); // クッキー削除 // if($_SESSION['cnt']>0) $_SESSION['cnt']--; // クッキーの数をデクリメント $i = $_SESSION['cnt']; setcookie("$hospital[$i]", "", time()-1000); // クッキー削除 // setcookie("$hospital", "", time()-1000); // クッキー削除 if($_SESSION['cnt']>0) $_SESSION['cnt']--; // クッキーの数をデクリメント } //var_dump($chuumoku_iin); /* $r=0; while(list($key, $val) = each($chuumoku_iin)){ if($val===1) setcookie("chuumoku_hospital", $key, time()+60*60*24*7); // if($val===1) setcookie("chuumoku_hospital[$r]", $key, time()+60*60*24*7); $r++; } */ ?> <!doctype html> <html> <head><title>整形外科クリニック詳細ページ</title> <meta charset="utf-8"> -------------------------------------------------------------- 上記のようなスクリプトで、クッキーを作成しているのですが、 結果の注目リストの医院が、1つ前の医院名をあとで作ったクッキーで 上書きしているようなのです。(注目リストに同じクッキー名(医院名)で連続して 表示されます) どのように書けば、この現象を回避できるでしょうか。

関連するQ&A