【发布时间】:2012-02-11 19:03:47
【问题描述】:
我在 addToDb.php 中有一个 heredoc 表单(如下所示)。当用户单击表单上的提交按钮(下面表单中的“添加记录”按钮)时,表单将回传到 addToDb.php。
在确认表单上的数据正常后,我将数据添加到我的数据库并使用 header() 进行 303 重定向(这是我第一次尝试使用 post/redirect/get)。
我收到一个错误:
“警告:无法修改标头信息 - 标头已由 C:\xampp\htdocs\foo\addToDb.php 中的(输出开始于 C:\xampp\htdocs\foo\addToDb.php:165)发送在第 129 行和第 130 行的 C:\xampp\htdocs\foo\addToDb.php 中"
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 关闭了 heredoc,出现在 addToDb.php 的第 165 行——我收到的错误消息中提到了第 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();
(注意:上面对 header 的两个调用出现在 addToDb.php 的第 129 和 130 行)
这就是发生的事情:
- 我用有效数据填写表格
- 按“添加记录”
- 然后在我重新输入 addToDb.php 时重新显示表单
- 我的记录成功添加到数据库中,但是......
- 浏览器看不到index.php,还是看到addToDb.php
- 我收到如上所述的错误消息,并在下面重复:
“警告:无法修改标头信息 - 标头已由第 129 行 C:\xampp\htdocs\foo\addToDb.php 中的(输出开始于 C:\xampp\htdocs\foo\addToDb.php:165)发送并在第 130 行的 C:\xampp\htdocs\foo\addToDb.php 中"
我过去使用heredoc方法没有问题。
但这是我人生中第一次尝试实现 Post/Redirect/Get。
那么——heredoc 是否以某种方式干扰了我的 PRG?
【问题讨论】:
标签: php heredoc post-redirect-get