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

10日で覚えるPHP入門教室の本を買ってPHPを学習中の初心者です。
この本のサンプル例題でクッキーを使って初回入力データを2目のアクセスでも表示するコードがあるのですが、どうしても
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\php10\day02-3\cookie_rec.php:6) in C:\xampp\htdocs\php10\day02-3\cookie_rec.php on line 6
のエラーがでます。

下記がそのサンプルコードズバリです。
-----cookie.php-------
<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<form method="POST" action="cookie_rec.php">
E-Mailアドレス:
<input type="text" name="email" size="30" maxlength="50"
value="<?php print($_COOKIE['email']); ?>" />
<input type="submit" value="送信" />
</form>
</body>
</html>

------cookie_rec.php-------
<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
クッキー"email"を保存しました。
</body>
</html>

cookie.phpでメルアドを送信するとcookie_rec.phpでクッキーにセットして次回cookie.phpを開けたらメルアドが既にinputboxに入力した状態になるはずですが、どうしてcookie.phpの送信ボタンを押すと上記のエラー表示となります。

なにが原因しているのでしょうか?
お解りになる方、宜しくお願い致します。

環境はXAMPP Windows Version 1.6.3aのローカルでOSはXPです。

A 回答 (2件)

マニュアルより抜粋



setcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。
ほかのヘッダ情報と同様に、クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。
<html> や <head> タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。

参考URL:http://search.net-newbie.com/php/function.setcoo …
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。
一番最初の行して試したところ問題なく処理できました。
解決してスッキリしました。

入門書に載っていたコードだったので信用しており、コード
以外での問題だと思っていましたが、この手の入門書をまるっきり
信用していてはダメですね。

お礼日時:2007/09/18 22:12

<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>



<body>より上にかかないとだめだよん!!
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます。
ご指摘のとおり
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
を一番最初の行にしたらエラーがでなくなりました。

ありがとうございました。

お礼日時:2007/09/18 22:04

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