PHP代码运行不正常

PHP代码运行不正常,php,html,Php,Html,在中有额外的引号 <?php (E_ALL & ~E_NOTICE); session_start(); // is the one accessing this page logged in or not? if (!isset($_SESSION['db_is_logged_in']) || $_SESSION['db_is_logged_in'] !== true) { // not logged in, move to login page head

在中有额外的引号

<?php
(E_ALL & ~E_NOTICE);
session_start();

// is the one accessing this page logged in or not?

if (!isset($_SESSION['db_is_logged_in']) || $_SESSION['db_is_logged_in'] !== true) {

    // not logged in, move to login page

    header('Location: login.php');
    exit;
}
else {
    echo "Welcome To The Test Page:";
    echo $_SESSION['logname'];
}

if (isset($_POST['submit'])) {
    test();
}

function test()
{
    $var = rand(1, 5);
    header("Location:{$var}.html");
    exit;
} 

<html>
    <body>
        <form action="<?=$_SERVER['PHP_SELF'];?>"  method="post">
            <input type="submit" name="submit" value="Take Test">
        </form>
    </body>
</html>
应该是

header('"Location:".$var.".html"');
或者,如果您喜欢本答案注释中提到的双引号,您可以使用php双引号变量插值:

header('Location:'.$var.'.html');
将标题设置为的字符串为:

header("Location: {$var}.html");

你需要退出,而不是你真正想要的;发送位置标头后。否则重定向将不会发生

"Location:".$var.".html"
在您的页面中写入内容后,您不能打电话

在这里,当您成功登录时,
echo
a消息,然后尝试更改标题。但是太晚了

从php文档:

请记住,在发送任何实际输出之前,必须调用
header()
,无论是通过普通HTML标记、文件中的空行还是从PHP。使用或函数或其他文件访问函数读取代码,并在调用
头()之前输出空格或空行,这是一个非常常见的错误。使用单个PHP/HTML文件时也存在同样的问题

如果您想包含一些页面内容,那么就包含它,不要更改标题中的位置


另外,正如其他人指出的,您的标题字符串是错误的,
“Location:”.$var.“.html”
就足够了。

看来您在调用后声明了
test
函数,所以您必须在调用之前移动它,这是更好的做法,我会将它放在
会话_start()之前

您还必须避免输出,以便让
标题执行您想要的操作。您可以通过放置一个
exit()在标题指令之后

正如GWW在回答中所说,你还有额外的引语

更新


我以前没有注意到这一点,在PHP中,您可以在声明之前调用函数,尽管这让我有点困惑。

其他注释解决了两个问题:更改标题之前的输出,以及引号周围的无效格式

另一个问题是,从未从HTML中指定
$\u POST['submit']
。你有:

header("Location:".$var.".html");
exit;

但是没有指定字段的名称。应改为:

<input type="submit" value="Take Test" />

您可以检查表单是否由

<input type="submit" name="submit" value="Take Test" />

尝试手动将表单指向页面,而不是使用服务器变量


这对于经验丰富的php开发人员来说可能是显而易见的,但问题是什么?什么(如果有的话)正在发生,或者没有发生?当我点击“接受测试”时。没有发生任何事情,显示相同的页面…或者只是
标题(“位置:$var.html”)或为清晰起见:
标题(“位置:{$var}.html”)您的代码中还有其他人在回答中提到的其他问题。您应该确保在php错误报告中设置了警告。您可以将错误报告(E_ALL&~E_通知);如果他打开了PHP警告,他应该会收到一条警告消息。我如何在不使用header函数的情况下实现它???@Vinod K,如果你有一个header,你想要重定向,那么你不应该写任何东西。如果您只想包含另一个页面的内容,然后包含它,您可以保留第一个
echo
,这取决于您想要什么。@Vinod K根据您的意图,您可以简单地
包含该页面并使其产生所需的输出。如果您真的想将浏览器重定向到另一个页面,
标题(“Location:{$var}.html”)
是可以的,但您只需确保在执行此操作之前没有生成任何输出。@Vinod K也许您有某种输出缓冲?这项工作使用。如果在调用之前修改了标题,那么就没什么问题了。如果您正在使用某种模板引擎,这可能就是您没有收到任何错误的原因。否则,我就被难住了。您是否尝试将
test
函数的声明放在其调用之前?
if($_SERVER['REQUEST_METHOD'] == 'POST') {
test();
}
<form action="<?=$_SERVER['PHP_SELF'];?>"  method="post">  
<form action="test.php"  method="post">
<form action="<? echo $_SERVER['PHP_SELF'];?>"  method="post">