【问题标题】:php variables inside html issueshtml问题中的php变量
【发布时间】:2019-06-11 03:58:00
【问题描述】:

我的 php 和 html 有问题。我理解这样的概念,一旦<?php ;?> 打开,你就不能在里面放另一行,比如<?php ;?>,让它看起来像<?php <?php ;?> ;?>,因为它会抛出错误,如果没有,它会在我的结尾......同样如此我知道使用echo、print 等或多或少是我所追求的。我的困境是,如果使用会话,我将如何构建它?这是我目前所拥有的,所有这些都在<body> 标签内:

<?php echo $_SESSION['id']?'
<div id="top_mid">
    <h2><?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest';?></h2>
</div>':'
<h2>
    <li id="toggle" style="list-style: none;">
        <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                  <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
        </p>
</h2>';
?>

您可以注意到,这行:&lt;h2&gt;&lt;?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest';?&gt;&lt;/h2&gt; 是给我带来错误的原因,因为它已经在之前的 &lt;?php ;?&gt; 语句中...

我尝试过使用&lt;h2&gt;echo "$_SESSION['username'] ? $_SESSION['username'] : 'Guest';"&lt;/h2&gt;,但这也不起作用...任何帮助将不胜感激...

我需要为该会话用户名创建一个变量吗?比如:

$username = "&lt;?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest';?&gt;"; 然后将其放在&lt;h2&gt; 元素中?如果是这样,我将如何对其进行重组以使其正常工作,因为我已经尝试过并且它会抛出错误?

【问题讨论】:

  • 你意识到你错过了session_start();
  • 不,我有。 - 我只是没有包括我在 html 之上的所有内容
  • 好的。不得不检查。许多人并不了解它,我们看到很多与它相关的问题。其他人很可能会提到同样的事情。
  • 不用担心,如果我所拥有的措辞不正确,我深表歉意......但是是的,我确实有。我手头的主要问题是如何制作 html 部分中的内容,特别是 &lt;h2&gt; 元素读取用户是否登录,如果已登录,则读取他们已经在 php 中的用户名......跨度>
  • &lt;h&gt; 标签可以接受一些额外的参数,从我之前所做的,可能不与 PHP 结合使用,但如果打算在你的 &lt;h2&gt; 标签中使用 PHP,那么您可能可以使用&lt;h2 &lt;?php // code &gt;Text&lt;/h2&gt;,但这当然未经测试;-)

标签: php html mysql session


【解决方案1】:

在混合 HTML 和未关闭 PHP 时,您的代码中有非常基本的错误...

<?php echo $_SESSION['id'] ? 
'<div id="top_mid">
    <h2>'.($_SESSION['username'] ? $_SESSION['username'] : 'Guest').'</h2>
</div>' : '<h2>
    <li id="toggle" style="list-style: none;">
        <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                  <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
        </p>
</h2>';
?>

所以,试着让它更容易:

<?php echo $_SESSION['id'] ? $string1 : $string2; ?>

这是基本条件。 String2 是简单的字符串,没什么特别的。 String1 包含另一个条件,需要与字符串分离并连接回来。为了更简单:

$string1 = '<div id="top_mid"><h2>';
$string1 .= ($_SESSION['username'] ? $_SESSION['username'] : 'Guest');
$string1 .= '</h2></div>';

希望这足以解释它,这些是真正的基础。这对你来说一定很明显。

【讨论】:

  • 这成功了!你能解释一下为什么&lt;h2&gt;标签里面有什么吗?
  • 不胜感激!
  • 给你,希望对你有帮助
  • 非常感谢您发布的内容帮助我更好地理解它!
【解决方案2】:

查看您的代码。有一些基本错误。

<?php if(isset($_SESSION['id'])): ?>
<div id="top_mid">
    <h2><?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest';?></h2>
</div>
<?php else: ?>
<h2>
    <li id="toggle" style="list-style: none;">
        <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                  <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
        </p>
</h2>
<?php endif; ?>

【讨论】:

    【解决方案3】:

    我个人使用三元运算符,其中if 语句似乎有点过分,例如:

    echo $animal=="fish"?"Wet":"Dry";
    

    对于其他任何事情,if 语句更容易阅读。而echo 并不总是必要的:

    <?php if($_SESSION['id']){ ?>
      <div id="top_mid">
        <h2><?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest';?></h2>
      </div>
    <?php } else { ?>
      <h2>
        <li id="toggle" style="list-style: none;">
          <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                    <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
          </p>
      </h2>
    <?php } ?>
    

    【讨论】:

      【解决方案4】:

      改用这个:

      <?php if($_SESSION['id']):?>
      <div id="top_mid">
          <h2><?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest';?></h2>
      </div>
      <?php else: ?>
          <h2>
              <li id="toggle" style="list-style: none;">
                  <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                            <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
                  </p>
          </h2>
      <?php endif; ?>
      

      【讨论】:

        【解决方案5】:

        问题更多在于您试图在另一个 &lt;?php ?&gt; 内部调用 &lt;?php ?>

        也就是说,您需要将代码的第 3 行解析为字符串的另一部分,而不是一个新的 php 块。希望我对您代码的编辑对您有足够的意义

        <?php echo $_SESSION['id']?'
        <div id="top_mid">
            //modified to just be part of the string:
            <h2>'.($_SESSION['username'] ? $_SESSION['username'] : 'Guest' ).'</h2>
        </div>':'
        <h2>
            <li id="toggle" style="list-style: none;">
                <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                          <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
                </p>
        </h2>';
        ?>
        

        【讨论】:

        • 确实如此,事实上 ejzy 的格式与您的 &lt;h2&gt; 标签内的格式相同。这就是我一直在寻找的东西,但我不太明白为什么会这样,我认为需要 print 或 echo...
        • 这是因为你已经在附和一个声明。因为您正在嵌入ternary's(抱歉不知道该单词的复数形式),所以您不必每次使用一个时都写echo,就在第一个之前。把它想象成一个大的if...then... 声明。 (注意php在三元的php.net/ternary上有一堆注释)
        • 很有趣,所以如果echo 已经存在,就像我拥有它一样,就不需要在其中包含其他echo 了吗?在&lt;h2&gt; 标签中拥有你所拥有的东西是这种东西的正确格式吗?我的意思是,我想这是因为它可以工作并且我正在使用它,我只是想确保这是将其编码的最佳方式......
        • 好吧,你所拥有的只是一根长长的字符串。并且您正在中断它以输入更多数据。您的中间部分可以简化为'this' . $variable . 'That'。除了在这种情况下,你的变量只是另一个三元。本质上就像说$variable = ($_SESSION['username'] ? $_SESSION['username'] : 'Guest' ); 然后在你的字符串&lt;?php echo $_SESSION['id']?' &lt;div...&lt;h2&gt;'.$variable.'&lt;/h2&gt;...' 这有意义吗?
        • 刮我的cmets。见ejzy的。他的解释比我的清楚得多
        【解决方案6】:

        你缺少'>',我建议优化代码,像这样......

        <?php if($_SESSION['id']): ?>
        <div id="top_mid">
            <h2><?php echo $_SESSION['username'] ? $_SESSION['username'] : 'Guest'; ?></h2>
        </div>
        <?php else: ?>
        <h2>
            <li id="toggle" style="list-style: none;">
                <p>Please <a id="open" class="open" href="#open">Login | Register</a>
                   <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
                </p>
        </h2>
        <?php endif; ?>
        

        【讨论】:

          【解决方案7】:

          (你缺少关闭标签)那么这条线呢?如果您发布的代码是正确的,那么您就缺少基本的东西

          <?php echo $_SESSION['id']?' <!-- You're missing closing TAG -->
          

          应该是

          <?php echo $_SESSION['id'] ?>
          

          并且您不能在 PHP 标记中已经有另一个 PHP 标记(在关闭它之前)

          【讨论】:

          • 关闭它,
          • 如果你想回显一个 HTML 或者设置一个 if 条件,用它来关闭
          【解决方案8】:

          (假设你已经设置了session_start();)

          你不能像这样嵌套&lt;?echo 和?&gt;。还要注意你的内联/速记if 语句周围的(isset()),以确保您实际上正在检查它是否已设置。你拥有它的方式实际上并没有检查变量的任何内容。 (甚至不确定这是有效的语法吗?)

          做:

          <?php echo $_SESSION['id'] ?> <!-- note the closed ?> tag -->
          <div id="top_mid">
              <!-- wrapped your $_SESSION['username'] check in (isset()) -->
              <h2><?php echo (isset($_SESSION['username'])) ? $_SESSION['username'] : 'Guest';?></h2>
          </div>
          <h2>
              <li id="toggle" style="list-style: none;">
                  <p>Please 
                      <a id="open" class="open" href="#open">Login | Register</a>
                      <a id="close" style="display: none;" class="close" href="#close">Login | Register</a> to access this page!
                  </p>
              </li> <!-- you were missing this close tag -->
          </h2>
          <!-- removed the nested closing ?> tag -->
          

          更新,因为我们正在谈论做条件:

          <?php
          
          if (isset($_SESSION['id'])) 
          {
              echo "<div id='top_mid'>";
              echo "<h2>".(isset($_SESSION['username'])) ? $_SESSION['username'] : 'Guest';."</h2>";
              echo "</div>";
          }
          else
          {
              //...do other stuff
          }
          
          ?>
          

          ...虽然这种方法可以让您处理双引号、单引号或转义引号,并且确实为编码添加了一个额外的层(echo EVERYTHING),但它会保留您的 if/else 语句很多 更清晰,如果您使用的是代码荧光笔,您可以轻松地看到页面上条件语句之间或函数中吐出的内容。

          【讨论】:

          • 感谢您指出这一点。我完全忘了关闭&lt;li&gt; 标签。关于您的设置,我确实有一个问题:第一行 - &lt;?php echo $_SESSION['id'] ?&gt; 你关闭了 - 该行是否适用于下面的内容?没有的话,就这么关了,还有必要吗?
          • php可以处理从页面开始到结束的变量;他们继续通过关闭和打开标签——这些标签只是用来表示什么是——而不是php。在您的情况下,如果您 不 关闭它,则会在尝试将 html 解析为 PHP 时出错。有时您还需要处理关闭标签之间的if 语句(尽管我从未在实践中使用过它们):stackoverflow.com/questions/564130/…
          • 很有趣,话虽如此,像@rybo111 或更好的@webinan 的回答不是更充分吗?
          • 嗯,实际上是的——但老实说,我不明白你想用代码做什么。一般来说,我发现在 php.ini 中回显所有内容要干净得多。我会用一个新的例子来更新我的答案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-26
          • 2010-12-12
          • 1970-01-01
          相关资源
          最近更新 更多