繁体   English   中英

PHP代码无法正常运行

[英]PHP code not functioning properly

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

单击“接受测试”按钮时,我需要向用户显示5个html页面中的1个,即(在这种情况下为问题文件)。 为此,我创建了从1到5的随机数。页面被命名为1.html,2.html等。

任何人都可以调试此代码吗?

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

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

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

但是指定字段的名称无处。 内容应为:

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

您有多余的引号

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

它应该是

header('Location:'.$var.'.html');

或者,如果您更喜欢注释中提到的双引号,可以使用php双引号变量插值:

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

您将标头设置为的字符串为:

"Location:".$var.".html"

而不是你真正想要的

您需要退出; 发送位置标头后。 否则重定向将不会发生。

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

在页面中写完某些内容后,您将无法调用header()

在这里,成功登录后,您将echo一条消息,然后尝试更改标题。 但是为时已晚。

从php doc:

请记住,必须先通过常规HTML标记,文件中的空白行或从PHP发送任何实际输出,然后调用header() 使用include()require()函数或另一个文件访问函数读取代码,并在调用header()之前输出空格或空行,这是一个非常常见的错误。 使用单个PHP / HTML文件时,存在相同的问题。

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

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

看来您在调用之后声明了test函数,因此 您必须 将它移到调用之前是一种更好的做法,我将其放在session_start();之前session_start();

您还必须避免输出,以使header执行您想要的操作。 您可以通过放置一个exit();来做到这一点exit(); 标头指令之后。

正如GWW在他的回答中所说,您还有额外的报价。

更新资料

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

您可以检查表格是否通过以下方式发送

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

问题未解决?试试以下方法:

PHP代码无法正常运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM