※ ChatGPTを利用し、要約された質問です(原文:クッキーを連想配列で扱う方法について)
クッキーを連想配列で扱う方法について
このQ&Aのポイント
クッキーを連想配列で使おうと思い、うまく動作しないコードがあります。セットされているクッキーの判定と処理方法をアドバイスしてください。
クッキーを連想配列でセットしたいが、うまく動作しないコードがあります。セットされているクッキーの判定と処理方法を教えてください。
クッキーを連想配列で扱うためのコードを書きましたが、上手く動作しません。セットされているクッキーの判定と処理方法についてアドバイスを頂けませんか。
クッキーを連想配列で使ってみようと思い、下記のようなコードを書きましたがうまく動作しません。
当該クッキーがセットされているときは、★の方の処理が実行されるようにしたいのですが・・・。
修正方法のアドバイスをお願いできませんでしょうか。
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']"] なんて書き方が悪いような気がするのですが、
確信はなく、修正方法もわかりません・・・。
お手数ですがご指導どうぞよろしくお願いいたします。
お礼
ありがとうございました。お礼が遅くなってしまい、大変失礼いたしました。 教えていただいようにやったつもりなのですが、 どこかが間違っているのか、やはり希望の動きにはなりませんでした。 if (isset($_COOKIE["mycookie"]["pg4"])) { //修正箇所 $order = "desc"; // ★ $mycookie = $_COOKIE["mycookie"]["pg4"]; //追加箇所 } else { $order = "asc"; $mycookie = "指定のCOOKIEは存在しないか読み出せません。"; //追加箇所 $expiry = time() + 365 * 24 * 3600; setcookie("mycookie['pg4']",1,$expiry); } ↑では、何度ページを再読み込み直しても、やはりelseの方に行ってしまいます。 ブラウザのメニューのクッキー一覧にはちゃんとmycookie['pg4']というものが存在し、 意図通りの値、1が入っているのですが・・・。 もしかしてsetcookieの方の書き方が悪くて配列として認識されていないということなのでしょうか? http://php.net/manual/ja/function.setcookie.php の例3など、配列全体の存在をチェックしてループで一つ一つを取り出す方法なら色々なところで見かけるのですが、 連想配列をキーで直接指定している例がなかなか見つかりません。 お返事をいただきまして、ありがとうございました。