使用header()重定向.Header()不起作用(可能是因为数据已发送)


Redirect using header(). Header() not working (maybe because data has been sent)

我正在做一个零和交叉项目。我正在尝试将用户重定向到"请稍候"页面,而其他用户正在移动。

在游戏开始时,我给每个玩家一封信(我知道这很有效)。

$find_user = mysql_query("SELECT `user_id` FROM `games` WHERE `game_id`='".$number_of_games."'");
$find_user = mysql_result($find_user, 0);
if($find_user == $_SESSION["userId"]) {
    $letter = "X";
} else {
    $letter = "O";
}

生成页面的其余部分,并将内容写入页面。

用户移动后,将运行以下程序:

header("Location: ../wait".$turn.".php");

这适用于"X"(在数据库中创建游戏的人),他们会被重定向到一个页面,上面写着"请等待O移动"。

然而,当"O"移动时,它们不会被重定向到"立即等待"页面。

标头在代码中的同一位置。

此外,如果这有什么不同。。。以下代码位于玩家玩游戏的php文件的底部(刷新它)。

$url=$_SERVER['REQUEST_URI'];
header("Refresh: 5; URL=$url"); 

我知道结构很混乱,但这是我的第一个大型PHP项目,我可以提供一些帮助。

为什么重定向是针对"X"而不是针对"O"?

更新:

如果我键入:

print("<script>top.location.href = '../waitO.php'</script>");

它重定向。

如果我键入:

print("<script>top.location.href = '../wait'".$letter."'.php'</script>"); 

它什么都不做。

您也可以这样重定向:

print("<script>top.location.href = '...'</script>")

这是因为标头重定向功能仅在打印HTML内容(或任何内容)之前有效。

如果你收到了信息,你需要用HTML重定向,比如:

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