Php 表单提交后重定向的正确方法

Php 表单提交后重定向的正确方法,php,forms,redirect,submit,Php,Forms,Redirect,Submit,也许这是一个愚蠢的问题,但在表单保存到数据库中之后,什么是将用户重定向到成功页面的正确方法呢 我不知道为什么,但是如果我添加action=“done.php”,表单就不会将数据保存到我的数据库中 我试图添加标题(“location:/done.php”)成功了,但当我将页面移动到原始服务器(PHP 4和MySQL 3.23.5)时,当我尝试发送表单时出现错误警告:无法修改标题信息-标题已由…发送。 以下是我的php代码: if(isset($_POST['submit'])) { $name=$

也许这是一个愚蠢的问题,但在表单保存到数据库中之后,什么是将用户重定向到成功页面的正确方法呢

我不知道为什么,但是如果我添加
action=“done.php”
,表单就不会将数据保存到我的数据库中


我试图添加
标题(“location:/done.php”)成功了,但当我将页面移动到原始服务器(PHP 4和MySQL 3.23.5)时,当我尝试发送表单时出现错误
警告:无法修改标题信息-标题已由…发送。

以下是我的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文件转换为不带BOM的UTF-8的问题

谢谢大家的建议

消息“headers ready sent”表示您的脚本已经输出了一些内容。此错误消息上方的网页上是否显示任何内容?检查
标记前是否有空格

Location头应该在“:”后面有一个空格,并且应该是一个绝对URI,如下所示:

header("Location: http://www.yoursite.com/done.php");
“Headers ready sent”很可能意味着在php代码之前.php文件中有一些内容。这可能像空白一样简单,也可能您的PHP代码嵌入到HTML中。在任何一种情况下,都要确保PHP代码之前没有任何内容,这样就可以了


至于这种重定向方法的正确性,我相信这是一种普遍接受的技术。

标题已发送
意味着某些内容已发送到浏览器

mysql是否有错误


另外,请注意,这是在PHP4.1中引入的,因此如果您使用的是非常旧的PHP版本,则可能会导致错误。

其他人已经回答了已发送的标题。另一种方法是,如果更新成功,则包括或要求done.php。不要忘记包含/要求后的退出

if (mysql_query($sql,$con)) {

    header ("location:/done.php");
    require_once('done.php');
    exit();
    }
    else {
echo "Something is wrong";
}

修复了它将.php文件转换为不带BOM的UTF-8的问题

谢谢大家的建议

使用
ob_start()

在页面顶部,就在
抱歉之后,我的错误PHP版本是4.3.11。我认为这是一个php错误。@iKaspars如果它在您的测试机器上工作,而在原始服务器上不工作,我猜这将是一个mysql问题。信息是否插入数据库?是的,信息正在插入数据库。成功后是否有其他方法重定向?如果我删除标题(“Location:done.php”);我没有收到任何错误和重定向,但表单正在提交,数据正在插入到database@iKaspars很奇怪。这不是一个好的做法,但是如果你使用
@mysql\u query
而不是
mysql\u query
,会发生什么呢?不能有空格,因为它是同一个代码,在本地主机和我的服务器上都能正常工作,但在客户端上不能正常工作。我尝试了你关于标题的长url的建议-不起作用。修复标题不会修复错误“headers ready sent”错误。您错过了错误消息的结尾部分。是否收到“output started at…”如果是,将告诉您哪一行脚本已经输出了内容。警告:无法修改header信息-headers ready sent by(output started at/home/virtual/site167/fst/var/www/html/tekstile/index.php:1)在第27行的/home/virtual/site167/fst/var/www/html/tekstile/index.php中,第27行是-header(“location:/done.php”);仔细查看index.php的第1行。这导致php输出了一些东西。这不是注入错误,因为如果我删除-header(“location:/done.php”);一切正常我不是说这个问题是由SQL注入引起的。我只是说你的应用程序中有一个巨大的安全漏洞。非常感谢,我在过去的两个小时里一直在绞尽脑汁。你的代码帮了我很大的忙