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