在两个php标记之间拆分IF/ELSE语句,会产生解析错误:语法错误,意外$end

在两个php标记之间拆分IF/ELSE语句,会产生解析错误:语法错误,意外$end,php,session,include,if-statement,Php,Session,Include,If Statement,我构建了一个PHP登录系统,它在加载每个页面之前启动会话,并检查用户是否登录 在我的受保护页面的顶部有一个include,用于启动会话,还有一个if语句,用于说明是否加载页面。然后在底部有一个include语句,它是重定向回登录页面的else语句。当直接在页面中时,这可以很好地工作,但是当从其他地方包含时,我会得到以下错误:Parse error:syntax error,unexpected$end 这是密码 包括1: <?php session_start(); if ($_SES

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

在我的受保护页面的顶部有一个include,用于启动会话,还有一个if语句,用于说明是否加载页面。然后在底部有一个include语句,它是重定向回登录页面的else语句。当直接在页面中时,这可以很好地工作,但是当从其他地方包含时,我会得到以下错误:Parse error:syntax error,unexpected$end

这是密码

包括1:

<?php

session_start();

if ($_SESSION['username'])
{
?>
这是在会话存在时加载的受保护内容

包括2:

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

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

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

谢谢
Danny

您可以尝试使用冒号符号,而不是使用大括号,如下所示

<?php

session_start();

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

...

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

您可以尝试使用冒号符号,而不是使用大括号,如下所示

<?php

session_start();

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

...

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

仔细检查您的HTML并查找输入错误的?>在您想要a/>的地方。

仔细检查您的HTML并查找输入错误的?>在您想要a/>的地方。

当前无法打开和关闭文件之间的花括号。如果尝试执行此操作,将导致意外的$end语法错误

我不确定你到底在拍什么,但根据你的评论,你应该做如下的事情

您应该有一个文件,您可以将其命名为任何名称,但我只将其命名为allProtectedContent.php

您说过需要保护多个文件,我认为您的意思是:如果会话存在,则需要执行多个php文件。因此,在allProtectedContent.php中,可以包含所有要执行/输出的文件

然后,在主文件中,您应该只包含以下内容:

<?php
if(isset($_SESSION['username']))
{
    include 'allProtectedContent.php';
}
else
{
    header('Location: index.php');
}
?>
因此,只有在设置了$\u会话中的用户名键的情况下,才会执行/输出您放入allProtectedContent.php的任何内容

allProtectedContent.php的示例:

<?php
// verify session
// echo some stuff
// include more files
// execute some functions
// run any php code you want
?>

当前无法打开和关闭文件之间的花括号。如果尝试执行此操作,将导致意外的$end语法错误

我不确定你到底在拍什么,但根据你的评论,你应该做如下的事情

您应该有一个文件,您可以将其命名为任何名称,但我只将其命名为allProtectedContent.php

您说过需要保护多个文件,我认为您的意思是:如果会话存在,则需要执行多个php文件。因此,在allProtectedContent.php中,可以包含所有要执行/输出的文件

然后,在主文件中,您应该只包含以下内容:

<?php
if(isset($_SESSION['username']))
{
    include 'allProtectedContent.php';
}
else
{
    header('Location: index.php');
}
?>
因此,只有在设置了$\u会话中的用户名键的情况下,才会执行/输出您放入allProtectedContent.php的任何内容

allProtectedContent.php的示例:

<?php
// verify session
// echo some stuff
// include more files
// execute some functions
// run any php code you want
?>

我认为在两个不同的文件中打开和关闭多个标记时,在多个标记中拆分花括号是行不通的。如果$_SESSION['username']{/*include protected content*/}@bluegman991谢谢,我怎么能在不回显每一行HTML的情况下包含整个受保护页面呢?在不启动会话的情况下访问文件。将受保护的页面放在单独的文件中(可能位于受保护的目录中),然后在if语句中包含受保护的文件。@bluegman991这样做的唯一问题是登录系统被用于预订系统,因此,include将出现在多个页面中,而不仅仅是一个需要保护的文件。我认为在两个不同的文件中打开和关闭它们时,在多个标记中拆分花括号是行不通的。如果$_SESSION['username']{/*include protected content*/}@bluegman991谢谢,我怎么能在不回显每一行HTML的情况下包含整个受保护页面呢?在不启动会话的情况下访问文件。将受保护的页面放在单独的文件中(可能位于受保护的目录中),然后在if语句中包含受保护的文件。@bluegman991这样做的唯一问题是登录系统被用于预订系统,因此,include将出现在多个页面中,而不仅仅是一个需要保护的文件。是的,仍然不起作用。这很烦人,系统工作正常,直到我将其从受保护的页面中取出并放入includes。是的,仍然无法工作:/getting相同的错误。这是恼人的,系统工作正常,直到我把它的保护
d页面并将其放入includes。即使我在保护区中放置了一个简单的段落标记,我也会遇到相同的问题,所以不要认为这是由保护内容引起的。即使我在保护区中放置了一个简单的段落标记,我也会遇到相同的问题,所以不要认为这是由受保护的内容引起的。对不起,我之前的评论似乎不起作用。系统中有很多页面,比如new_booking.php edit_booking.php search_results.php等,我希望在加载之前检查所有这些页面。让所有这些文件都有一个单独的页面,然后将它们包含在其中,这将是一种痛苦。如果可能的话,我希望在不包含页面的情况下执行此操作。因此,基本上,您要检查会话变量是否存在,在尽可能多的文件中,尽可能少的文本。@DannyGreen因为您不想包含页面,所以唯一的其他方法是浏览并编辑每个文件,如果需要,包括一个包含此代码的文件!isset$_会话['username']{header'Location:index.php';exit;}或将该代码放入每个文件中。很抱歉,我之前的评论似乎不起作用。系统中有很多页面,比如new_booking.php edit_booking.php search_results.php等,我希望在加载之前检查所有这些页面。让所有这些文件都有一个单独的页面,然后将它们包含在其中,这将是一种痛苦。如果可能的话,我希望在不包含页面的情况下执行此操作。因此,基本上,您要检查会话变量是否存在,在尽可能多的文件中,尽可能少的文本。@DannyGreen因为您不想包含页面,所以唯一的其他方法是浏览并编辑每个文件,如果需要,包括一个包含此代码的文件!isset$_会话['username']{header'Location:index.php';exit;}或将该代码放入每个文件中。