2012-01-16 5 views
0

addToDb.phpの中にheredoc形式(下に表示)があります。ユーザーがフォームの送信ボタンをクリックすると、フォームはaddToDb.phpにポストバックします(下のフォームの「ADD RECORD」ボタン)。投稿/リダイレクト/取得シナリオでheader()と干渉するheredoc

私はフォーム上に大丈夫なデータがあることを確認した後、データベースにデータを追加し、303のリダイレクトにheader()を使用します(これはpost/redirect/getを使用する私の最初の試みです)。

私はエラーを取得する:

「警告:ヘッダー情報を変更することはできません - すでにによって送られたヘッダCに(出力がCで始まっ:165:\ xamppの\ htdocsに\ fooという\ addToDb.php):\ XAMPP \ htdocsに\ FOO \ addToDb.phpライン129上及びCで:\ XAMPP \ htdocsに\ FOO \ addToDb.phpライン130" 上の

echo <<<_END 
    <h1>Please add a new student....</h1> 
    <p>Fields with an asterisk (*) are required fields.</p> 
    <form action="addToDb.php" method="post"> 
    <b><i>First name *</b></i> : <input type="text" name=$firstNameLabel /><br /> 
Middle initial : <input type="text" name=$middleInitialLabel /><br /> 
    <b><i>Last name *</b></i> : <input type="text" name=$lastNameLabel /><br /> 
     <b><i>School*</i></b> : <input type="text" name=$schoolLabel size=40/><br /> 
     Grade: <input type="text" name=$gradeLabel /><br /> 
     <b><i>Email *</b></i> : <input type="text" name=$emailLabel size=40 /><br /> 
    <input type="submit" name="addrecord" value="ADD RECORD" /><br /> 
</form> 
_END; 

*(注:ヒアドキュメントを閉じて上記_END、 addToDb.phpの165行目に表示されます。このエラーメッセージには165行目が記載されています)。*

したがって、[レコードを追加]ボタンを押すと、同じaddToDb.phpファイルが再度入力され、上記と同じフォームが再度表示されます。

// check for valid form data and add to the database, then redirect now......... 
header("HTTP/1.1 303 See Other"); 
header("Location: http://localhost/foo/index.php"); 
exit(); 
を次のように

addToDb.phpが原因提出に再入力され、I)は、(ユーザーが入力し、有効な形式のデータをチェックし、それが有効なデータと通話ヘッダだ場合は、データベースに保存します

(注:2つの呼び出し上記のヘッダにはaddToDb.php内の線129と130に表示されます)

だからここに何が起こるかです:

    私はプッシュ
  • 有効なデータでフォームに記入
  • は、フォームが、私は再入力addToDb.php
  • として再表示されている
  • を「レコードを追加」私のレコードがデータベースに正常に追加しましたが、取得します。 .....
  • 私は、ブラウザでのindex.phpが表示されていない、私はまだaddToDb.php
  • を参照して、上述と以下の繰り返しのように、私はエラーメッセージが表示されます:

「警告:ヘッダー情報を変更できません - 既にヘッダーC:\ xampp \ htdocs \ foo \ addToDb.phpの129行目とC:\ xampp \ htdocs \ foo \ addToDbに送信されます(C:\ xampp \ htdocs \ foo \ addToDb.php:165で開始された出力)。 php on line 130 "

私は以前は問題なしでheredocの手法を使用していました。

しかし、これは私の人生ではじめて、Post/Redirect/Getを実装しようとしています。

だから、私のPRGに何らかの形で干渉しているヘレドックはありますか?

答えて

0

ヘッダーは、クライアントに送信される最初のものでなければなりません。 HTTPヘッダーを送信する前に、クライアントにデータを送信しない(つまり、echoを使用するか、プレーンhtmlをPHPタグの外に置く)限り、まずコード内の好きなことを行うことができます。ヘッダーが送信された後、もちろん、あなたが好きなことをすることができます。

だからあなたがエラーを取得している:あなたはそこにあなたを提供しなかったので、

Cannot modify header information - headers already sent by... 

ヘッダは自動的に、文書の最初に提供されました。

+0

それは私をしました。ありがとう。すべてのデバッグエコーと他のすべての出力を削除すると直ちに、リダイレクトはindex.phpに有効でした。私はさらにvar_dump()呼び出しを削除しなければならなかった。 – wantTheBest

+0

喜んで助けてください。 :) – vdbuilder

関連する問題