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

时间:2011-03-03 15:41:35

标签: php forms redirect submit

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

我不知道为什么,但如果我添加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

感谢大家的建议!

6 个答案:

答案 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

感谢大家的建议!

相关问题