也许这是一个愚蠢的问题,但是在将表单保存在数据库中后,将用户重定向到成功页面的正确方法是什么?
我不知道为什么,但如果我添加action="done.php"
,则表单不会将数据保存到我的数据库中。
我尝试添加header ("location:/done.php");
它有效,但当我将页面移动到原始服务器(PHP 4和MySQL 3.23.5)时,我尝试发送表单Warning: Cannot modify header information - headers already sent by ........
时出错
这是我的php代码:
if(isset($_POST['submit']))
{
$name=$_POST['name'];
$email = $_POST['email'];
$company = $_POST['company'];
$adress = $_POST['adress'];
$post = $_POST['post'];
$phone = $_POST['phone'];
$sql="INSERT INTO tekstile_users (id, name, email, company, adress, post, phone)
VALUES
('', '$name','$email','$company', '$adress', '$post', '$phone')";
if (mysql_query($sql,$con)) {
header ("location:/done.php");
}
else {
echo "Something is wrong";
}
}//end of submit button
我修复它将.php文件转换为UTF-8 without BOM
。
感谢大家的建议!
答案 0 :(得分:6)
“已发送标头”消息表示您的脚本已输出内容。网页上是否显示此错误消息?检查<?php
标记之前的任何空格。还要在<?php ?>
标记之前或之后检查任何包含空格的文件。
Location头应该在“:”之后有一个空格,并且应该是一个绝对URI,类似于以下内容:
header("Location: http://www.yoursite.com/done.php");
答案 1 :(得分:4)
“已发送标头”很可能意味着您的PHP代码之前.php文件中有一些内容。这可能就像空白一样简单,或者您的PHP代码可能嵌入在HTML中。在任何一种情况下,确保在PHP代码之前没有 nothing ,你应该没事。
至于这种重定向方法的正确性,我相信这是一种普遍接受的技术。
答案 2 :(得分:2)
其他人已就已发送的标头进行了回答。如果更新成功,则另一种方法是包含或要求done.php。不要忘记include / require之后的退出。
if (mysql_query($sql,$con)) {
header ("location:/done.php");
require_once('done.php');
exit();
}
else {
echo "Something is wrong";
}
答案 3 :(得分:2)
使用
ob_start();
在页面顶部和<?php
答案 4 :(得分:1)
headers already sent
表示某些内容已经发送到浏览器。
mysql是否出错?
另外,请注意在PHP 4.1中引入了$_POST
,因此如果您使用的是非常旧版本的php,则可能会导致错误。
答案 5 :(得分:0)
我修复它将.php文件转换为UTF-8 without BOM
。
感谢大家的建议!