网页上登录/未登录用户的 PHP if/else 语句过多


Too many PHP if/else statements for logged/not-logged-in users on web pages

所以我在当前的项目中有很多动态PHP网页,我想知道如何处理登录/未登录的用户。整个页面中的各种组件都为登录用户切换。有些是整个div,有些只是这里和那里的几个词。有些页面最终可能有 10+ 个这样的组件。

我以前读过,在整个页面中散布PHP会降低性能,以及在php中回显HTML,由于这个问题,这两者都在我的项目中很常见。

我想知道这里是否有一些技巧可以避免这种情况?

下面是一个例子,它显示了某些嵌入式HTML脚本的一些冗长:

<?php
    if (isset($_SESSION['sess_username']) and $_SESSION['sess_username'] != '') {
        echo '<div class="logged-user">';
        echo '<div class="btn-group">';
        echo '<a href="#" class="btn btn-link dropdown-toggle" data-toggle="dropdown">';
        echo '<img src="assets/img/user-avatar.png" alt="User Avatar" />';
        echo '<span class="name">' . $sess_username . '</span>';
        echo '<span class="caret"></span>';
        echo '</a>';
        echo '<ul class="dropdown-menu" role="menu">';
        echo '<li>';
        echo '<a href="#">';
        echo '<i class="fa fa-user"></i>';
        echo '<span class="text">Profile</span>';
        echo '</a>';
        echo '</li>';
        echo '<li>';
        echo '<a href="#">';
        echo '<i class="fa fa-cog"></i>';
        echo '<span class="text">Settings</span>';
        echo '</a>';
        echo '</li>';
        echo '<li>';
        echo '<a href="#">';
        echo '<i class="fa fa-power-off"></i>';
        echo '<span class="text">Logout</span>';
        echo '</a>';
        echo '</li>';
        echo '</ul>';
        echo '</div>';
        echo '</div>';
    } else {
        echo '<p><a href="login.php"><span>Log In</span></a></li></p>';
    }
?>

性能而言,我认为的一个选项基本上是有两个页面的代码,只需在页面顶部运行 if/else,然后将用户定向到正确的页面。这样可以避免在整个页面中使用尽可能多的 if/else 语句,尽管它不一定会减少页面中散布的 PHP 数量。

衷心感谢任何帮助!

另外,如果有人知道如何轻松地将代码格式化为在SO中向左拉,我很想知道。我敢肯定它在我的帖子中看起来很糟糕。

您可以像这样关闭 PHP 标签:

<?php if (isset($_SESSION['sess_username']) and $_SESSION['sess_username'] != ''): ?>
<div class="logged-user">
 .. more html ..
</div>
<?php endif; ?>

首先,你不需要回显html。

<?php if (isset($_SESSION['sess_username']) and $_SESSION['sess_username'] != '') { ?>
        <div class="logged-user">
        <div class="btn-group">
        <a href="#" class="btn btn-link dropdown-toggle" data-toggle="dropdown">
        <img src="assets/img/user-avatar.png" alt="User Avatar" />
        <span class="name"><?php echo $sess_username;?></span>
        <span class="caret"></span>
        </a>
        <ul class="dropdown-menu" role="menu">
        <li>
        <a href="#">
        <i class="fa fa-user"></i>
        <span class="text">Profile</span>
        </a>
        </li> ... </ul>
        </div>
        </div>
<?php } else { ?>
        <p><a href="login.php"><span>Log In</span></a></li></p>
<?php } ?>
其次,如果您有多个页面,

其中包含多个内容区域,只有登录用户才能访问,您是否可以重新设计站点并简单地使用适当的组件加载页面的登录版本?另一种选择可能是将 html 类设置为变量。

前任:

if (isset($_SESSION['sess_username']) and $_SESSION['sess_username'] != '') {
 //user is logged in, set authorized variable:
  $component_authorized = 'show';
    } else {
  $component_authorized = 'hide';
}
..
<div id="some_content">
<div id="everyone_see_content">...</div>
<div id="only_auth_user" class="<?php echo $component_authorized;?>"><!-- Auth User content --></div>
<div class="other_stuff">
     <!--everyone sees here-->
     <ul class="my_class <?php $component_authorized; ?>">
         <!-- Only Auth User Sees this list-->
     </ul>
</div>

然后只要确保你的css有.hide {display: none;}

最后一个建议是一些Java的使用,在我看来这有点冗长和不必要的。