【问题标题】:Splitting IF/ELSE statement between two php tags, gives Parse error: syntax error, unexpected $end在两个 php 标签之间拆分 IF/ELSE 语句,给出 Parse 错误:语法错误,意外 $end
【发布时间】:2012-07-14 16:51:32
【问题描述】:

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

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

这是代码

包括1:

<?php

session_start();

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

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

包括 2 个:

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

?>

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

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

谢谢 丹尼

【问题讨论】:

  • 我不相信在两个不同的文件中打开和关闭花括号时,在多个标签中拆分花括号会起作用。这样做不是更好吗:if($_SESSION['username']) { /*include protected content*/ }
  • @bluegman991 谢谢,我怎样才能在不回显每一行 HTML 的情况下包含整个受保护的页面?并且无需启动会话即可访问文件。
  • 将受保护的页面放在单独的文件中(可能在受保护的目录中),然后在 if 语句中包含受保护的文件。
  • @bluegman991 这样做的唯一问题是登录系统被用于预订系统,因此包含将出现在许多页面中,而不仅仅是一个需要保护的文件。

标签: php session include if-statement


【解决方案1】:

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

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

你应该有 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
?>

【讨论】:

  • 抱歉,我之前的评论似乎不起作用。系统有很多页面,例如 new_booking.php edit_booking.php search_results.php 等。我希望在加载之前检查所有这些页面。让所有这些文件都有一个单独的页面然后将它们包含在其中会很痛苦。因此,如果可能的话,我希望在不包含该页面的情况下这样做。
  • 所以基本上你试图检查会话变量是否存在,在尽可能多的文件中,尽可能少的文本。
  • @DannyGreen 好吧,因为您不希望包含该页面,唯一的另一种方法是浏览和编辑每个文件,并包含一个带有此代码的文件 if(!isset($_SESSION['username'])) { header('Location: index.php'); exit; } 或将每个文件中的代码。
【解决方案2】:

仔细检查您的 HTML 并查找您想要输入 /&gt; 的错误 ?&gt;。

【讨论】:

  • 即使我在保护区里放了一个简单的段落标签,我也会遇到同样的问题,所以不要认为这是受保护的内容造成的。
【解决方案3】:

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

<?php

session_start();

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

...

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

【讨论】:

  • 是的,仍然无法工作:/得到同样的错误。这很烦人,系统工作正常,直到我将其从受保护的页面中取出并放入包含中。
猜你喜欢
  • 2012-05-16
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2012-08-15
  • 2014-12-18
  • 2012-11-03
相关资源
最近更新 更多