当我使用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>
标签应该是一个迷路,但所有标签实际上都已正确关闭。
你能帮忙解决这个问题吗?
答案 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)
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编辑的实际输出