2012-01-16 55 views
0

我有一個定界符形式(如下所示)的干擾。當用戶單擊表單上的提交按鈕(下面的表單中的「添加記錄」按鈕)時,表單會發回addToDb.php。定界符與內部addToDb.php在郵政/重定向/報頭()獲取場景

驗證我的表格上還行數據後,我將數據添加到我的數據庫,並使用標頭(),以303重定向(這是我第一次嘗試過使用後/重定向/獲取)。

我得到一個錯誤:

「警告:不能更改頭信息 - 頭已經發出(輸出開始在C:\ XAMPP \ htdocs中\富\ addToDb.php:165)在C:\ 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,封閉所述定界符,上線165出現在addToDb.php - 該行165錯誤消息我得到的是提及)*

因此,當按下「添加記錄」提交按鈕時,將重新輸入相同的addToDb.php文件,並再次顯示與上面相同的表單。

當addToDb.php由於重新進入到提交,我檢查由用戶提供有效的表單數據保存到數據庫中,如果是有效的數據,並調用header()函數如下:

// 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(); 

(注:兩次調用頭球攻門高出出現在線路129和130 addToDb.php)

所以這裏發生了什麼:

  • 我填寫表格與有效數據
  • 推「添加記錄」
  • 然後形式重新顯示爲我重新輸入addToDb.php
  • 我的成功記錄被添加到數據庫中,但是。 .....
  • 我沒有看到的index.php在瀏覽器中,我仍然看到addToDb.php
  • ,我得到如上所述和下面重複錯誤消息:

「警告:無法修改標題信息 - 標題已經通過發送(輸出開始C:\ XAMPP \ htdocs中\ FOO \ addToDb.php:165)在C:\ XAMPP \ htdocs中\ FOO \ addToDb.php上管線129和在C:\ XAMPP \ htdocs中\ FOO \ addToDb。在線130上的PHP「

我在過去沒有任何問題使用過heredoc方法。

但是,這是我生命中的第一次,我想實現郵政/重定向/獲取。

所以 - 是定界符某種程度上與我的PRG干擾?

回答

0

標頭必須是發送給客戶端的第一件東西。只要你沒有發送任何數據給客戶端(比如使用echo或在php標籤之外放置純html),你可以在代碼中做任何你喜歡的事情(比如測試post/get變量) 。標題發送後,你當然可以做你喜歡的任何事情。

所以,你所得到的錯誤:

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

的頭都是在文檔的開頭自動提供的,因爲你沒有提供你的存在。

+0

那樣做了。謝謝。只要我刪除所有的調試回聲和所有其他輸出,重定向工作到index.php罰款。我甚至不得不刪除一個var_dump()調用。 – wantTheBest 2012-01-16 22:28:12

+0

很高興幫助。 :) – vdbuilder 2012-01-16 22:39:47