【问题标题】:Conditional Statements in PHP code Between HTML CodeHTML 代码之间的 PHP 代码中的条件语句
【发布时间】:2011-04-18 06:31:30
【问题描述】:

在 PHP 中使用由 HTML 代码分隔的条件语句时遇到了一些问题。这是我正在尝试编写的代码类型。这是一个个人资料页面,只有其个人资料所在的用户才能看到它(我正在使用会话变量进行检查):

<?php if(check if user is logged in) ?>
<display users profile in html>
<?php else ?>
<display an error>

但这不起作用。我还尝试通过在if 末尾添加: 并使用endif 语句来使用速记符号,但它不起作用。 (在早期的项目中,: 方法适用于foreachendforeach,所以我想我会尝试一下)

有什么想法吗?

【问题讨论】:

    标签: php html conditional-statements


    【解决方案1】:

    尝试用括号分隔条件。

    <?php if(check if user is logged in) { ?>
    <display users profile in html>
    <?php } else { ?>
    <display an error>
    <?php } ?>
    

    【讨论】:

      【解决方案2】:

      使用括号,因为对于 php 解释器来说,这跨越了多行

      <?php if(check if user is logged in)  { ?>
      <display users profile in html>
      <?php } else { ?>
      <display an error>
      <?php } // else ?>
      

      【讨论】:

        【解决方案3】:

        您可能忘记了alternative control structure syntax 中的endif

        <?php if(check if user is logged in): ?>
        <display users profile in html>
        <?php else: ?>
        <display an error>
        <?php endif; ?>
        

        不可能像你写的那样省略大括号。只有在其后跟 regular statement 时才有可能。

        【讨论】:

        • +1 用于使用end* / : 方法在 HTML 中执行条件。
        • 好样的。我讨厌“endif”语法。随时给我漂亮友好的花括号。 ;)
        • +1。这是唯一一种替代语法比使用大括号更具可读性的情况。
        • &lt;display users profile in html&gt;
        • 请注意我刚刚遇到的一个烦人的错误 - 你必须使用&lt;?php 标签。常用的&lt;? 标签是不行的
        【解决方案4】:

        使用大括号 {}

        <?php if(check if user is logged in) { ?>
        <display users profile in html>
        <?php } else { ?>
        <display an error>
        <?php } ?>
        

        【讨论】:

        • 我更喜欢大括号,尤其是当您使用 IDE 时
        【解决方案5】:

        您最初的想法是正确的。根据PHP documentation,有两种方法可以做到这一点:

        <?php if($loggedin): ?> 
        <p>User is logged in.</p>
        <?php else: ?>
        <p>User is not logged in.</p>
        <?php endif; ?>
        

        或者:

        <?php if($loggedin){ ?> 
        <p>User is logged in.</p>
        <?php }else{ ?>
        <p>User is not logged in.</p>
        <?php } ?>
        

        【讨论】:

          【解决方案6】:

          PHP 对 if() 块(以及一般的块)有两种表示法。

          首先,你有冗长的符号,它涉及在 if() 块的末尾明确声明 endif;。它看起来像这样:

          if(whatever):
             do something
          else:
             do something else
          endif;
          

          ifelse 行末尾的冒号很重要,否则 PHP 会认为您使用的是其他符号(如下)。

          其次,你有花括号符号,它看起来类似于 C 或 Perl 样式代码,看起来像这样:

          if(whatever) {
             do something
          } else {
             do something else.
          }
          

          使用这种样式表示法,如果你的块只有一行长,你可以不用花括号对。 (我个人认为像这样离开它们是不好的做法,但是很多人都信誓旦旦,而且它是完全有效的语法。但是当你在 PHP 代码之间切换时,我看到 PHP 对单行块感到困惑和 HTML;这就是为什么我总是喜欢使用大括号,即使我只写一行)。

          你的问题是你混合了这两种符号。您正在尝试使用冗长的符号,但行中没有冒号,因此 PHP 认为您的意思是大括号符号。但是由于大括号符号允许遗漏大括号,PHP 将您的代码视为有效语法,即使它不会按您计划的那样工作。

          您的解决方案是整理它,以便您肯定使用一种或另一种语法。如我的示例所示,在每个块的开头和结尾添加大括号({}}),或者添加冒号和 endif; 行。

          所以您的代码应该类似于以下两个示例之一:

          <?php if(check if user is logged in): ?>
              <display users profile in html>
          <?php else: ?>
              <display an error>
          <?php endif; ?>
          

          或者...

          <?php if(check if user is logged in) { ?>
              <display users profile in html>
          <?php } else { ?>
              <display an error>
          <?php } ?>
          

          希望对您有所帮助。

          【讨论】:

            【解决方案7】:

            另一种有条件地呈现模板的方法是使用include

            例子

            if($condition)
            {
                include 'page1.php';
            }else{
                include 'page2.php';
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多