- ベストアンサー
エラー Warning: Cannot modify header information
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です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マニュアルより抜粋 setcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。 ほかのヘッダ情報と同様に、クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。 <html> や <head> タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
その他の回答 (1)
- ma2shin
- ベストアンサー率41% (69/167)
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?> <body>より上にかかないとだめだよん!!
お礼
早速のご回答ありがとうございます。 ご指摘のとおり <?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?> を一番最初の行にしたらエラーがでなくなりました。 ありがとうございました。
お礼
ご回答いただきありがとうございます。 一番最初の行して試したところ問題なく処理できました。 解決してスッキリしました。 入門書に載っていたコードだったので信用しており、コード 以外での問題だと思っていましたが、この手の入門書をまるっきり 信用していてはダメですね。