• ベストアンサー

エラー 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です。

  • PHP
  • 回答数2
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
  • utano_m
  • ベストアンサー率45% (14/31)
回答No.2

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

参考URL:
http://search.net-newbie.com/php/function.setcookie.html
akazou1965
質問者

お礼

ご回答いただきありがとうございます。 一番最初の行して試したところ問題なく処理できました。 解決してスッキリしました。 入門書に載っていたコードだったので信用しており、コード 以外での問題だと思っていましたが、この手の入門書をまるっきり 信用していてはダメですね。

その他の回答 (1)

  • ma2shin
  • ベストアンサー率41% (69/167)
回答No.1

<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?> <body>より上にかかないとだめだよん!!

akazou1965
質問者

お礼

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

関連するQ&A

  • PHPのクッキー情報を活用したい

    PHPのクッキー情報を活用したい 現在入門書で勉強中、例のとおりに打ち込んだつもりなのですが、プログラムがうまく動きません。アドバイスお願いします。使用OSはwindows7、ブラウザはfirefox3.6.11です。apatcheは2.2で、PHPは5.2.14です。 プログラムは以下のとおりです。 (1)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> (2)cookie_rec.php <html> <head> <title>クッキーでデータを記録する</title> </head> <body> <?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?> クッキー"email"を保存しました。 </body> </html> これを動かして、一枚目はうまく出るのですが、2枚目には Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php10\day02-3\cookie_rec.php:6) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php10\day02-3\cookie_rec.php on line 6 とエラーが出ます。cookie_rec.phpの6行目はしっかり確認しました。他のところも確認しましたが、なぜエラーなのかわかりません。どこが悪いのでしょうか?

    • ベストアンサー
    • PHP
  • PHP入門の本を買って勉強しているのですが・・・

    この前、10日間で覚えるPHP5入門教室という本を買い、勉強していたのですがクッキー関連のところでつまりました。 ・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> 本通りに上記のコードをうってみたのですがクッキーが保存されないのです。本によると1回目にe-mailを送信すると二回目に自動的にcookie.phpのテキストボックスに表示されると書いてあったのですがそれが表示されないのです。一応、本についてるCDに入っているサンプルデータのやつを使ってやっても同じ結果になりました。 それと恐縮ですがPHPをわかりやすく解説していただいているサイトがあれば教えてください。

    • ベストアンサー
    • PHP
  • PHP文法エラーについて

    恐れ入ります。 下記PHP文法で、ブラウザに次のエラーが表示されます。「Notice: Undefined variable: _FORM in C:\xampp\htdocs\Step2Kadai\input.php on line 3」 該当PHP命令文は下記です。 <?php session_start(); $_SESSION['address'] = $_FORM['address']; ?> <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MF-02 input</title> <meta charset="utf-8"> </head> <body> <h1>MF-02 input</h1> <form action="mf_form.php" method="post"> <p>アドレス: <input type="email" name="address"> <input type="submit" value="送信"></p> </form> </form> </body> </html> 以上。エラーメッセージのline 3は、$_SESSION['address'] = $_FORM['address']; のところです。 ご指摘をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHP文法エラーについて

    はじめて、お世話になります。よろしくお願い致します。 プログラム文は後述致しますが、実行すると、ブラウザに下記エラーが表示されます。何のエラーで、どこを直せば、よいのでしょうか? Parse error: syntax error, unexpected ';', expecting ',' or ')' in C:\xampp\htdocs\Step2Kadai\kakunin.php on line 16 kakunin.php on line 16のところは、 echo htmlspecialchars($_SESSION['mail']; です。 [input.php] <?php session_start(); $_SESSION['address'] = $_REQUEST['address']; ?> <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MF-02 input</title> <meta charset="utf-8"> </head> <body> <h1>MF-02 input</h1> <form action="mf_form.php" method="post"> <p>アドレス: <input type="email" name="address"> <input type="submit" value="送信"></p> </form> </form> </body> </html> [mf_form.php] <?php session_start(); $_SESSION['mail'] = $_REQUEST['mail']; ?> <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MF-02 form</title> <meta charset="utf-8"> </head> <body> <h1>MF-02 form</h1> <p><a href="kakunin.php">確認<?php echo htmlspecialchars($_SESSION['mail']); ?></a></p> </body> </html> [kakunin.php] <?php session_start(); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MF-02 kakunin</title> <meta charset="utf-8"> </head> <body> <h1>MF-02 kakunin</h1> <p>アドレス: <?php echo htmlspecialchars($_SESSION['mail']; ?>) <?php </p> </body> </html> 以上です。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • POSTでwarning!

    いつも大変お世話になり誠にありがとうございます。 また、同じような質問で申し訳ありません。 標記の件。 ブログフォームのソースは下記です。 表示のソースも下記です。 どうすれば表示されるでしょうか? ご回答のほど宜しくお願い申し上げます。        記 <h2>ブログフォーム</h2> <form action="blog_create.php" method=_POST> <label>ペンネーム:</label> <input type="text" name="name" value=""><br> <label>タイトル:</label> <input type="text" name="title" value=""><br> <label>カテゴリー:</label> <input type="text" name="category" value=""><br> <label>ブログ本文:</label><br> <textarea name="content" id="content" cols="50" rows="80"></textarea><br> <input type="submit" value="確認画面へ"> <?php $name = $_POST["name"]; $title = $_POST["title"]; $category = $_POST["category"]; $content = nl2br($_POST["content"]); echo "ペンネーム{$name}"; echo "タイトル{$title}"; echo "カテゴリー {$category}"; echo "本文 {$content}"; ?> <hr> <br> <input type="submit" action="/kanryou.php" value="送信する"> Warning: Undefined array key "name" in C:\xampp\htdocs\blog_create.php on line 13 Warning: Undefined array key "title" in C:\xampp\htdocs\blog_create.php on line 14 Warning: Undefined array key "category" in C:\xampp\htdocs\blog_create.php on line 15 Warning: Undefined array key "content" in C:\xampp\htdocs\blog_create.php on line 16 ペンネームタイトルカテゴリー 本文

    • ベストアンサー
    • PHP
  • クッキー認証>クッキー削除ができない!!

    今回は、クッキー認証画面を作成している際、 エラーが出てしまって先に進めず投稿しました。 下記にプログラム記載 ----H_01.html---------------------------------- <html> <head> <title>クッキー認証</title> </head> <body> <center> <form method="POST" action="H_02.php"> 名前<input type="text" name="name"> パスワード<input type="Password" name="pass"> cookieを記録する<input type="checkbox" name="chk"> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> </center> </body> </html> ------------------------------------------------ -----H_02.php---------------------------------- <?php $name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; if ($cnt == True) { $lim = time()+7*24*60*60; //有効期限1週間 setcookie('name',$name,$lim); setcookie('pass',$pass,$lim); } else { setcookie('name'); setcookie('pass'); } ?> ------------------------------------------------ else文内の、setcookie二行にエラーが出ます。 htmlでチェックボックスにチェックが施されていない場合、クッキーを削除。 調べてみたのですが、どうしたらよいのかわからず 投稿しました。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのエラーメッセージ

    HTML文書からPHPに送ったファイル名のついたファイルをunlink()関数で削除しようとしているのですが、添付したスクリーンショットのようなエアーメッセージが出てきて進めません。 PHPのコードは下のようなものです。 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> QAdeleteFile.php</title> </head> <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\\xampp\\htdocs\\".$FileName; echo $FileName ; unlink($FileName); echo "<form id='next' method='POST' action='QAgmeOver.php' >"; echo "<input type='submit' value='call QAgameOver' >"; echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> </html> エラーメッセージで言っているQAgameOver.phpというのは上に挙げたコードのプログラムです。このメッセージでは、PHP はそのファイルをこのプログラムの中で探そうとしているように見えますが、そのファイルは当然ローカルサーバーのルートであるhtdocs の中に置いてあります。 なぜこうなるのでしょうか?詳しい方、どうか教えてください。

    • ベストアンサー
    • PHP
  • fopenのエラー

    [schdule_edit.php] Warning: fopen(C:\Program Files\xampp\htdocs\schedule\samplefile.txt) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\schedule\schedule_edit.php on line 55 Warning: fwrite(): supplied argument is not a valid stream resource in C:\xampp\htdocs\schedule\schedule_edit.php on line 56 Warning: fclose(): supplied argument is not a valid stream resource in C:\xampp\htdocs\schedule\schedule_edit.php on line 57 ---------------------------------------------------------------- 上記のようなエラーがでます。何が原因でこのエラーが出るのか、 色々調べたのですが自分では答えを見つ ける事ができませんでしたので、教えてください。 ---------------------------------------------------------------- [schdule_edit.php] <? if(isset($_POST["regist"])){ //全角→半角 $year=mb_convert_kana($_POST["year"],"a","UTF-8"); $month=mb_convert_kana($_POST["month"],"a","UTF-8"); $day=mb_convert_kana($_POST["day"],"a","UTF-8"); //入力チェック $error_message=array(); if(isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2007){ $year=$_POST["year"]; }else{ $error_message[]="年を正しく入力してください"; } if(isset($_POST["month"]) && is_numeric($_POST["month"]) && $_POST["month"] > 0 && $_POST["month"] < 13){ $month=$_POST["month"]; }else{ $error_message[]="月を正しく入力してください"; } if(isset($_POST["day"]) && is_numeric($_POST["day"]) && $_POST["day"]>0 && $_POST["day"]<32){ $day=$_POST["day"]; }else{ $error_message[]="日を正しく入力してください"; } if(isset($_POST["title"])){ if(strstr($_POST["title"],"|")){ $error_message[]="タイトルに|は使えません"; }else{ } $error_message[]="タイトルを入力してください"; } } if(isset($_POST["body"])){ if(strstr($_POST["body"],"|")){ $error_message[]="内容に|は使えません"; }else{ } $error_message[]="内容を入力してください"; } if(!count($error_message)){ //内容の改行を<br>に変換 $body=str_replace(array("\r","\n","\r\n"),"<br>",$body); $filename = "C:\\Program Files\\xampp\\htdocs\\schedule\\samplefile.txt"; $schedule_date =sprintf("%04d%02d%02d",$year,$month,$day); $line=$schedule_dare."|".$title."|".$body; $fp = fopen($filename, "w"); fwrite($fp, $line); fclose($fp); if(count($error_message)){ foreach ($error_message as $value){ print($value); } } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>スケジュール</title> </head> <body> <form action="schedule_edit.php" method="post"> <input type="text" size="4" name="year">年 <input type="text" size="4" name="month">月 <input type="text" size="4" name="day">日 <br><br> タイトル:<input type="text" size="31" name="title"> <br><br> 内容:<br> <textarea name="body"></textarea> <br><br> <input type="submit" name="regist" value="登録"> </form> </body> </html> ---------------------------------------------------------------- [schedule_list.php] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>スケジュール</title> </head> <body> <?php $filename = "C:\\Program Files\\xampp\\htdocs\\schedule\\samplefile.txt"; $schedule_list = file($filename); foreach ($schedule_list as $line) { // (1) 取得したファイルの各行について、日付、タイトル、本文に分ける list($schedule_date, $title, $body) = explode("|", $line); // 分けた変数を$schedule_date、$title、$bodyに print("日付:$schedule_date タイトル:$title 内容:$body <br>"); } ?> </body> </html> ---------------------------------------------------------------- 宜しくお願いします。

    • ベストアンサー
    • PHP
  • xamppでformによるデータの送信ができない

    初歩的な質問かもしれませんが、WEBページで探してみてもなかなか見つからないので大変すいませんがお教えください。 ローカルPCでxamppを使用して以下の2つのファイルを作成しました。 ■test1.html(C:\xampplite\htdocs) <FORM action="test2.php" method="POST"> <INPUT type="text" name="a" size="70"><br> <INPUT type="submit" value=" 登録 "> <INPUT type="reset" value=" クリア "> </FORM> ■test2.php(C:\xampplite\htdocs) <?php print $a; ?> formを使用してデータの送信をしたいのですが受け取ってくれません。 xamppの中でデータの送信ができるような設定をしなければならないのか?それともXAMPP以外のソフトを入れなければならないのでしょうか?大変お手数ですがお教えください。 使用環境  WindowsXPSP2 xampplite-win32-1.6.4

    • ベストアンサー
    • PHP
  • クッキーがよくわかりません

    クッキーの利用の仕方が不明です。 ↓以下のようなプログラムを↓をコピペしてきたのですが、よくわかりません…$data=$_COOKIE["data"];の部分でエラー発生します。 どういうことでしょうか? http://w1.nirai.ne.jp/freeze/main/files/10_01_cookie.html <?php       //クッキーは<html>よりも先に記述する $data=$_COOKIE["data"];     //まずクッキーを読み出す  if(!isset($data)){       //何もデータが無ければ   $data = $_POST['data'];   //postで受け取ったデータを  }else{             //クッキーデータがあれば   $data = $data."<br>".$_POST['data'];    //前のデータに新しいデータをくっつける  } setcookie("data", $data, time()+60*10);    //そしてそのデータを60秒×10つまり10分間記憶する ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>クッキーで、すぐ消える一行メモ</title> </head> <body> クッキーで、すぐ消える一行メモ<br> 文章を入力して表示クリックを、何度か繰り返してください。10分で消えます。<br> <form action="10_01_cookie.php" method="post"> <input type="text" name="data" size="50"> <input type="submit" value="表示!"> </form> <!--ここからPHPが始まります。--> <?php echo $data;    //入力された文を改行をはさんで記憶しているので、それを記述する ?> <!--これでPHPは終わりです。--> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう