Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 注册后重定向用户时出现问题_Php_Mysql - Fatal编程技术网

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

Php 注册后重定向用户时出现问题,php,mysql,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 Registeri

我正在创建一个简单的网站。我的情况是这样的。注册用户后,如果注册成功,我想在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()
我收到了错误信息 警告:无法修改标题信息-已启动输出发送的标题 在/home/srinivasa/public_html/thanksforregisting.php:27 in/home/srinivasa /第35行的public_html/thanksforregisting.php


现在我需要做什么?

对于初学者,请删除回声测试;和print语句,让我们知道发生了什么。

您不能从PHP执行此操作,因为在将页面发送到客户端之前,所有这些都会得到评估。您可以做的是输出一些JavaScript,在经过3秒后执行重定向

它看起来像这样,我对PHP不太了解,所以我不确定ob_启动和ob_刷新的功能:

您不能回显“测试”或将任何其他信息打印到浏览器,然后设置重定向标题。。。如果发送文本,则会将文本/html的标题发送到浏览器,后跟内容

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

1在页面上发送javascript,该页面将持续3秒,然后执行重定向

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>';
通过此位置的快速谷歌搜索:

为了在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是做不到的。

改用javascript,这样可以确保文本打印在屏幕上

您可以将该方法用作一个选项


如果由于某种原因javascript无法在浏览器中运行,请确保包含一个供他们单击的链接。

我想问题是“为什么要重定向?”。如果你想把用户发送到他们想要登记的页面之前,仍然要对他们注册消息表示友好的感谢,你可以考虑把成功消息放入一个$i会话变量,并在目标页面上重复它。 比如:

//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

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

$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或元标记执行重定向位

他的问题是在他发送内容后发出http标题。请随意重读他的问题并投票否决我。@Ian P:这不是答案,应该是评论。网络逻辑。你的答案不应该出现在任何人的脑海里。我是说,我不想粗鲁,但这太过分了。伊恩的回答确实解决了这个问题,尽管这并不完全是OP想要的。@Ian P:删除打印和回送语句后,我被重定向了。它解决了我的部分问题。现在要显示用户感谢注册信息,我应该怎么做?永恒的学习者-我建议将他们重定向到一个页面,上面写着“您现在已注册”。在那个HTML页面中,我将包含在元素中。如果要在那里修复JavaScript,它不会做任何事情。如果redirect确实被调用,那么它只会每3秒调用一次。在你留下评论并修复它之前,我就意识到了这一点。你是对的。。编辑为不呼叫所有忽略警告的人员:无法修改标题信息-标题已发送警告延迟。在尝试重定向时,人员确实很有创意。不幸的是,HTTP规范中没有刷新头。我必须声明,我已经很长时间没有使用刷新头了,但只是记住了它。。维基百科说它是通过最初的netscape浏览器引入的:它不是HTTP规范的一部分。ob函数做输出缓冲。基本上,当调用start时,输出存储在缓冲区中,在调用ob_flush时发送。如果OP将ob_开始放在开头,那么就不会有问题,因为它会缓冲输出并在任何内容之前发送标题。@Arda:如果不显示任何感谢注册文本,那就不会执行重定向了,虽然?在显示消息后不会重定向,就像他想要的那样。或者可能类似于$\u SESSION['message']的东西,这样也可以发送失败消息。
$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();