[PHP-users 12167] Re: ショッピングカートでクッキーを使いたいのですが、うまく設定できません。

Toshiyuki Kajii php-users@php.gr.jp
Wed, 11 Dec 2002 05:15:15 +0900


梶井です。

* Wed, 11 Dec 2002 04:46:19 +0900
* shogo <sho@drive.co.jp> wrote:

>setcookieを発行した時点では
>$cookie[$key]
>なる変数は作成されません。

大溝さんのソースでは$_POST['item']とありますから、register_globalsに
ついてはご存知と思われるので、どちらかというとドキュメントの不備とい
うか、誤解というかだと思います。

http://jp.php.net/manual/ja/function.setcookie.php

if (isset ($cookie)) {
    while (list ($name, $value) = each ($cookie)) {
        echo "$name == $value<br>\n";
    } 
}

この記述だと、大溝さんの書き方になってしまうのもうなずけるかなと...

>>	$item = $_POST['item'];
>>	while ( list ( $key, $value ) = each ( $item ) ) { 
>>	setcookie("cookie[$key]",$value);
>>	print "{'$cookie[$key]'}";
>>	} 

ただ、いずれにせよループでcookieを発行しながらprintで表示というのは
「クッキーは他のヘッダーを送信する前に送信される必要があります。」
とあるように、無理です。なので、

$item = $_POST['item'];
while ( list ( $key, $value ) = each ( $item ) ) { 
setcookie("cookie[$key]",$value);
}
$cookie = $_COOKIE["cookie"]; ←ここ
while( list ( $key, $value ) = each ( $cookie ) ) {
print "{'$cookie[$key]'}";
}

こんな感じでしょうか。ただ、

>また、ややこしくなると思うのでCookieの発行は
>	setcookie("item[$key]", $value);
>とした方がいいんではないでしょうか。(余計なお世話かも(^^;

これは同感^^;


*---------------------------------------------------*
    Toshiyuki Kajii    梶井 俊幸
    e-mail:            mikoto@camino.nissan.ne.jp
*---------------------------------------------------*