使用PHP循环输出MySql数据时的额外<p> </p>标记

时间:2014-02-07 14:43:12

标签: php html mysql

当我使用php while循环输出MySql数据时,我似乎得到额外的<p></p>标记,或者<p>标记在它应该关闭之前关闭。

while( $row = $stmt->fetch() ) {
    echo '<p>';
    echo '<div>Some Data</div>';
    echo '<div>More Data</div>';
    echo '</p>';
}

当前输出:

<p></p>
<div>Some Data</div>
<div>More Data</div>

<p></p>

期望输出:

<p>
<div>Some Data</div>
<div>More Data</div>
</p>

你能看出为什么会这样吗?我检查使用FireBug,看看上面的内容。当我在Firefox中检查页面源时,我看到一个红色的</p>标签应该是一个迷路,但所有标签实际上都已正确关闭。

你能帮忙解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

这是正确的语法

while( $row = $stmt->fetch() ) {
    echo '<p>';
    echo '<div>Some Data</div>';
    echo '<div>More Data</div>';
    echo '</p>';
}

答案 1 :(得分:1)

您不能在<div>内使用<p>等块级元素。您的浏览器通过在打开<p>之前结束<div>来解决此错误,并且Firebug会显示固定的HTML。

<p>更改为<div class="something">

是明智之举

答案 2 :(得分:1)

以下摘自HTML 4.01 Specification

  

P元素代表一个段落。它不能包含块级   元素(包括P本身)。

<div>是一个块级元素。

大多数浏览器,如果在<div>代码中遇到开放式<p>标记,则会在处理<p>之前自动关闭</p><div> }。

这就是你所看到的现象。您的第一个<p>后跟第一个<div>,然后在处理<div>个内容的2行之前关闭。</p>。然后你的最终结束<p>,它将浏览器视为一个从未有过开始标记的结束标记(因为,记住,第一个<p></p>已被关闭)由浏览器处理<html> <body> <p> <div>hello</div> </p> </body> </html>

为了演示,您可以在浏览器中查看此HTML:

<html>
  <body>
    <p></p>
    <div>hello</div>
    <p></p>
  </body>
</html>

如果您打开浏览器的检查器,它显示了此HTML的实际DOM表示形式,您应该看到类似的内容:

{{1}}

答案 3 :(得分:0)

while ($row = $stmt->fetch() ){

  if( ! empty( $row ) ) {  //make sure u skip empty lines with an if condition

    echo "<p> \n <div>some data </div> \n <div> More DAta </div> \n </p> " ;

  }

}

请注意firebug和firefox,好像有缺失一样,他们倾向于试图弄清楚他们自己并添加它;所以你看到的可能不是真正的源代码。

您需要点击右键单击 - &gt;查看源以查看没有firefox编辑的实际输出