注册后重定向用户时出现问题

时间:2010-05-27 20:16:40

标签: php mysql

我正在创建一个简单的网站。我的情况是这样的。注册用户后,我想在3秒后将用户重定向到主页(如果注册成功)。我现在的代码如下:

$query = "INSERT INTO Privileges VALUES('$user','$password1','$role')";

$result = mysql_query($query, $dbcon) 
 or die('Registration Failed: ' . mysql_error());
print 'Thanks for Registering , You will be redirected shortly';

ob_start();

echo "Test";

header("Location: http://www.php.net");

ob_flush()

我收到错误消息     警告:无法修改标头信息 - 已经发送的标头(输出已启动     at / home / srinivasa / public_html / ThanksForRegistering.php:27)in home / srinivasa     /public_html/ThanksForRegistering.php在第35行。

我现在需要做什么?

7 个答案:

答案 0 :(得分:2)

对于初学者,请删除echo "Test";和print语句,告诉我们会发生什么。

答案 1 :(得分:1)

您无法从PHP执行此操作,因为在将页面发送到客户端之前会对所有内容进行评估。您可以做的是输出一些JavaScript,它在3秒后通过重定向。

它看起来像这样(我不太了解PHP,所以我不确定ob_startob_flush做了什么):

$query = "INSERT INTO Privileges VALUES('$user','$password1','$role')";

$result = mysql_query($query, $dbcon) 
 or die('Registration Failed: ' . mysql_error());
print 'Thanks for Registering , You will be redirected shortly';
print '<script type="text/javascript">'
print 'setTimeout(function() { window.location = "http://www.php.net"; }, 3000);'
print '</script>'

ob_start();
ob_flush();

答案 2 :(得分:1)

为了在3秒后重定向用户,您有两个选择。

首先,删除header功能。

然后你可以使用Javascript:

<script type="text/javascript">
    setTimeout('function() {window.location = "http://example.com";}',3000);
</script>

或头部中的元刷新标记:

<meta http-equiv="refresh" content="3;url=http://example.com/" />

单独使用PHP无法实现。

答案 3 :(得分:1)

我猜问题是'你为什么要重定向?'。如果您想在用户注册之前将用户发送到他们想要的页面并且仍然给他们一个友好的“感谢注册”消息,您可以考虑将成功消息放入$_SESSION变量并回显出来在目标页面上。

类似的东西:

//process registration
if($success) {
  $_SESSION['reg_success']="You're one of us now!";
  header("Location: http://www.php.net"); 
  exit;
}
//otherwise have another go at registering

答案 4 :(得分:0)

您不能echo 'test'或向浏览器打印任何其他信息,然后设置重定向标题...如果您发送文本,则将text / html的标题发送到浏览器,然后是内容。

发送非标头内容后重定向的唯一方法是通过javascript。因此,如果您想在重定向之前告诉客户一些事情,您可以做两件事之一。

1)在将计数3秒的页面上发送javascript,然后执行重定向

2)设置刷新标头(在回显任何内容之前)刷新同一页面,并在刷新时重定向。

<?php

//  refresh / redirect to an internal web page
//  ------------------------------------------
header( 'refresh: 5; url=/webdsn/' );
echo '<h1>You will be re-directed in 5 seconds...</h1>';

通过这个位置的快速谷歌搜索: http://www.desilva.biz/php/phprefresh.html

答案 5 :(得分:0)

使用javascript代替,以便确保在屏幕上打印文字。

您可以使用方法here作为一个选项。

如果由于某种原因javascript在浏览器中不起作用,请确保包含一个链接供他们点击。

答案 6 :(得分:0)

您的问题是在尝试修改标头之前创建了输出。尝试重新排序您的代码。

$query = "INSERT INTO Privileges VALUES('$user','$password1','$role')";

ob_start();

$result = mysql_query($query, $dbcon) 
 or die('Registration Failed: ' . mysql_error());
print 'Thanks for Registering , You will be redirected shortly';


echo "Test";

header("Location: http://www.php.net");

ob_flush();

这会纠正您的标头错误消息,但您将不得不使用其他一个解决方案来使用javascript或meta标签执行重定向位