<?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等......
有人可以调试这段代码吗?
答案 0 :(得分:6)
其他评论解决了两个问题:更改标题前的输出,以及引号周围的格式无效。
另一个问题是从未在HTML中指定$_POST['submit']
。你有:
<input type="submit" value="Take Test" />
但是指定的字段名称无处可去。这应该是:
<input type="submit" name="submit" value="Take Test" />
答案 1 :(得分:3)
中有额外的引号
header('"Location:".$var.".html"');
应该是
header('Location:'.$var.'.html');
或者如果您更喜欢在本答案的评论中提到的双引号,您可以使用php双引号变量插值:
header("Location: {$var}.html");
您将设置标题的字符串为:
"Location:".$var.".html"
而不是你真正想要的东西
答案 2 :(得分:2)
你需要退出;发送位置标题后。否则,重定向将不会发生。
header("Location:".$var.".html");
exit;
答案 3 :(得分:2)
在您的网页上写下内容后,您无法致电header()
。
此处,当您成功登录后,您echo
会收到一条消息,然后尝试更改标题。但为时已晚。
来自php doc:
请记住,在发送任何实际输出之前必须调用
header()
,无论是普通HTML标记,文件中的空行还是PHP。使用include()
或require()
函数或其他文件访问函数读取代码是一个非常常见的错误,并且在header()
<之前输出空格或空行/ strong>被调用。使用单个PHP / HTML文件时存在同样的问题。
如果您想要包含一些页面内容,然后包含它,请不要更改标题中的位置。
另外,正如其他人指出的那样,标题的字符串错误,"Location:".$var.".html"
就足够了。
答案 4 :(得分:1)
看来你在电话后声明了test
函数,所以你必须最好在电话会议之前移动它,我会把它放在{ {1}}
你还必须避免输出,以便让session_start();
做你想做的事。您可以通过在标头指令后放置header
来完成此操作。
GWW在回答中说,你还有额外的报价。
<强>更新强>
好吧,之前我没有注意到这一点,在PHP中你可以在声明之前调用函数,虽然这目前让我感到困惑。
答案 5 :(得分:0)
您可以检查表单是否由
发送if($_SERVER['REQUEST_METHOD'] == 'POST') {
test();
}
答案 6 :(得分:0)
尝试手动将表单指向页面,而不是使用服务器var。
这
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
到
<form action="test.php" method="post">
甚至
<form action="<? echo $_SERVER['PHP_SELF'];?>" method="post">