我已经构建了一个PHP登录系统,它在加载每个页面之前启动会话,并检查用户是否登录。
在我的受保护页面上,我在顶部有一个启动会话的include,以及关于是否加载页面的if语句。然后在底部我有另一个include,它是重定向回登录页面的else语句。当直接在页面中时,这很好,但当从其他地方包含时,我会收到以下错误:解析错误:语法错误,意外的$end
这是代码
包括1:
<?php
session_start();
if ($_SESSION['username'])
{
?>
这是受保护的内容,如果会话存在,就会加载
包括2:
<?php
}
else
header ("location: index.php");
?>
我认为这可能是由于将语句上的大括号拆分为两个PHP标记造成的,我之所以这样做是为了在if语句为true的情况下加载整个页面,而不是将其留在PHP中并单独回显HTML的每一行。
我该如何解决此问题?或者有没有更好的方法来拆分IF/ELSE语句。
谢谢Danny
当前无法在文件之间打开和关闭大括号。如果您尝试这样做,将导致"意外的$end"语法错误。
我不确定你到底在拍什么,但根据你的评论,你应该做以下事情。
您应该有一个文件,您可以将其命名为任何名称,但我只将其称为"allProtectedContent.php"
您说过需要保护多个文件(我认为您的意思是:如果会话存在,则需要执行多个php文件)。因此,在allProtectedContent.php中,您可以包含所有要执行/输出的文件文件。
然后在你的主文件中,你应该有这样的:
<?php
if(isset($_SESSION['username']))
{
include 'allProtectedContent.php';
}
else
{
header('Location: index.php');
}
?>
因此,只有在设置了$_SESSION中的用户名密钥的情况下,您在allProtectedContent.php中输入的任何内容才会被执行/输出。
allProtectedContent.php示例:
<?php
// verify session
// echo some stuff
// include more files
// execute some functions
// run any php code you want
?>
仔细检查HTML,并在您想要/>
的地方查找键入错误的?>
。
您可以尝试使用冒号表示法,而不是使用大括号,如下所示。
<?php
session_start();
if ($_SESSION['username']):
?>
...
<?php else: header("location: index.php"); endif;