アプリ版:「スタンプのみでお礼する」機能のリリースについて

クッキーを連想配列で使ってみようと思い、下記のようなコードを書きましたがうまく動作しません。
当該クッキーがセットされているときは、★の方の処理が実行されるようにしたいのですが・・・。
修正方法のアドバイスをお願いできませんでしょうか。

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']"] なんて書き方が悪いような気がするのですが、
確信はなく、修正方法もわかりません・・・。

お手数ですがご指導どうぞよろしくお願いいたします。

A 回答 (1件)

他の言語は分かりませんがPHPでの連想配列は



$a["0"]["1"] という形になります

なので

$_COOKIE["mycookie"]["pg4"]

でいけるかと。
    • good
    • 0
この回答へのお礼

ありがとうございました。お礼が遅くなってしまい、大変失礼いたしました。

教えていただいようにやったつもりなのですが、
どこかが間違っているのか、やはり希望の動きにはなりませんでした。

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など、配列全体の存在をチェックしてループで一つ一つを取り出す方法なら色々なところで見かけるのですが、
連想配列をキーで直接指定している例がなかなか見つかりません。

お返事をいただきまして、ありがとうございました。

お礼日時:2011/07/28 00:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!