[英]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">
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.