2011-03-03 89 views
6

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

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

谢谢大家的建议!

+4

谷歌SQL注射后。 – notJim 2011-03-03 16:08:42

+0

它不是注入错误,因为如果我删除-header(“location:/done.php”);一切正常 – iKaspars 2011-03-03 17:01:52

+4

我不是说这个问题是由SQL注入引起的。我的意思是你在你的应用程序中有一个巨大的安全漏洞。 – notJim 2011-03-05 00:12:11

回答

0

解决它是PHP文件转换为UTF-8 without BOM

谢谢大家的建议!

6

“标题已发送”消息意味着您的脚本已经输出了一些内容。此错误消息上方的网页上是否显示任何内容?检查<?php标记之前是否有空格。在<?php ?>标签之前或之后检查任何包含文件的空白。

Location头应该后有空间“:”,应该是一个绝对URI,类似以下内容:

header("Location: http://www.yoursite.com/done.php"); 
+0

有没有空格,因为它是相同的代码,适用于本地主机和我的服务器上,但不在客户端上 我试过你的建议为长的网址头 - 没有工作。 – iKaspars 2011-03-03 16:06:46

+0

修复标题不会修复“标题已发送”错误。您错过了错误消息的结尾部分。你的“输出开始于...”吗?如果这样会告诉你哪一行脚本已经输出了某些内容。 – qbert220 2011-03-03 16:44:42

+0

警告:无法修改标头信息 -/home/virtual/site167/fst/var中已经发送的标头(输出开始于/home/virtual/site167/fst/var/www/html/tekstile/index.php:1) /www/html/tekstile/index.php 27行 。 27行是 - header(“location:/done.php”); – iKaspars 2011-03-03 16:46:54

4

“已经发送了头”很可能意味着有一些内容你.php文件在您的PHP代码之前。这可能和空白一样简单,或者你的PHP代码被嵌入到HTML中。无论哪种情况,请确保没有任何出现在您的PHP代码之前,并且您应该没问题。

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

1

headers already sent表示有东西已经发送到浏览器。

mysql是否给出错误?

此外,请注意$_POST是在PHP 4.1中引入的,所以如果您使用的是真正旧版本的php,那可能会导致错误。

+0

对不起,我的错误PHP版本是4.3.11。 我认为这是一个PHP错误。 – iKaspars 2011-03-03 16:03:05

+0

@iKaspars如果它在你的测试机器上工作,并且它在原始服务器上不起作用,那么我的猜测会是一个mysql问题。信息是否被插入到数据库中? – jeroen 2011-03-03 16:06:29

+0

是的,信息被插入到数据库中。 成功后还有其他方式重定向吗? – iKaspars 2011-03-03 16:09:21

2

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

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

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

嗯..它不会这样工作乙醚 – iKaspars 2011-03-03 16:16:12

2

使用 ob_start(); 在页面的顶部,只是<?php

+0

非常感谢,我在过去的2小时,我的头脑。你的代码帮了我很多 – hjaffer2001 2012-06-18 11:56:46