2

我已经建立了一个 PHP 登录系统,它在加载每个页面之前启动会话并检查用户是否已登录。

在我的受保护页面上,我在顶部有一个包含启动会话和是否加载页面的 if 语句。然后在底部我有另一个包含,它是重定向回登录页面的 else 语句。这在页面直接时工作正常,但是当从其他地方包含时我得到这个错误:解析错误:语法错误,意外 $end

这是代码

包括1:

<?php

session_start();

if ($_SESSION['username'])
{
?>

这是在会话存在时加载的受保护内容

包括2:

<?php
}
else
header ("location: index.php");

?>

我认为这可能是由于将语句上的花括号分成两个 PHP 标记造成的,我这样做的原因是如果 if 语句为真则加载整个页面,而不是将其留在 PHP 中并回显每一行HTML 分开。

我该如何解决这个问题?还是有更好的方法来拆分 IF/ELSE 语句。

谢谢丹尼

4

3 回答 3

1

当前无法在文件之间打开和关闭大括号。如果您尝试这样做,将导致“意外的 $end”语法错误。

我不确定您到底在拍摄什么,但根据您的评论,您应该执行以下操作。

您应该有 1 个文件,您可以随意命名,但我只是将其命名为“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
?>
于 2012-07-14T17:32:38.943 回答
0

仔细检查您的 HTML 并查找?>您想要的/>.

于 2012-07-14T17:13:38.137 回答
-1

您可以尝试使用冒号表示法,而不是使用花括号,如下所示。

<?php

session_start();

if ($_SESSION['username']):
?>

...

<?php else: header("location: index.php"); endif;
于 2012-07-14T16:58:55.187 回答