这个页面是通过一个PHP脚本生成的。以下是错误信息。
第14行,第8列:"tbody "的结束标签没有完成。
</tbody></table>
最有可能的是,你嵌套了标签,并以错误的顺序关闭了它们。例如
<p><em>...</p>
不能接受,因为<em>
必须先关闭<p>
. 可接受的嵌套是。<p><em>...</em></p>
另一种可能是,你使用了一个元素,而这个元素需要一个你没有包含的子元素,因此,父元素是 "未完成",不完整。 因此,父元素是 "未完成",不完整。例如,在HTML中
<head>
元素必须包含一个<title>
子元素,列表需要适当的列表项(<ul>
和<ol>
需要<li>
;需要<dt>
和<dd>
),等等。
当你在Google Chrome浏览器中查看源码时,我的代码是这样的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="CSS/Index.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h3>Search Results</h3>
<table>
<tbody>
</tbody></table>
</body>
</html>
这里是我的代码在火狐浏览器中查看源码时的样子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PcDescribeTable</title>
<link href="CSS/Index.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h3>Search Results</h3>
<table>
<tr><td>Intel i7-950 3.06GHz</td></tr>
<tr><td>WD 500GB 7200RPM SATA 6GBs</td></tr>
<tr><td>XFX Radeon HD 6870</td></tr>
<tr><td>CORSAIR 4GB DDR3 1600</td></tr>
<tr><td>ASUS P6X58D-E LGA 1366</td></tr>
<tr><td>CORSAIR Enthusiast Series 650W</td></tr>
<tr><td>VisonTek Bigfoot Killer</td></tr>
<tr><td>Creative Sound Blaster X-Fi HD</td></tr>
<tr><td>Razer Lycrosa</td></tr>
<tr><td>24x DVD Burner</td></tr>
<tr><td>Asus 23" Full HD LED</td></tr>
<tr><td>Razer Death Adder</td></tr>
</table>
</body>
</html>
这是Php脚本的样子。
<table>
<tbody>
<?php
for ( $counter = 0; $row = mysql_fetch_row( $result ); $counter++ )
{
print("<tr>");
foreach ( $row as $key => $value )
print( "<td>".$value."</td>");
print("</tr>");
}
print("</tbody>");
print("</table>");
mysql_close($database);
?>
它没有通过验证,因为你的tbody里什么都没有。增加一些列的行,就可以验证了。
我不知道那个for循环能不能用。另外,你似乎没有使用 $counter
的任何东西。试试用while代替。
while ( $row = mysql_fetch_row( $result ) )
如果还是没有任何回音的话, 你可能一开始就没有任何行要取. 所以在你的 <tbody>
标签,以及一个空的 <tbody>
被认为是无效的XHTML。
你的代码看起来是对的,生成的HTML看起来也是对的,但我假设mysql_fetch_row会返回一些东西。 是否有可能这是在发送一些看起来像HTML标签的东西?
这是我要开始寻找的地方。 确认PHP的语法是正确的,并且返回的是你所期望的东西。
只有当表中有行时,才会包含所有的表。如果你提供了更多的php脚本,一个if语句应该很容易排除它们,并允许它验证。
EDIT.我没有完全理解你的问题,直到你提供了更多的php脚本,一个if语句应该很容易排除它们,并允许它验证。 我没有完全理解你的问题,直到我看到另一个解决方案的评论。
这里发生的情况是你的查询依赖于POST数据,或cookies,或某种数据没有被验证器传递。解决方法可以是在你的查询中设置一个默认值,以防没有发送。如果没有发送post数据,你也可以像我原来说的那样,把表全部砍掉。
用PHP,用if语句来测试是否有查询发送。如果没有,连表都不要打印出来到屏幕上。
<?php
if (mysql_fetch_row( $result )) {
?>
<table>
<tbody>
<?php
for ( $counter = 0; $row = mysql_fetch_row( $result ); $counter++ ) {
print("<tr>");
foreach ( $row as $key => $value )
print( "<td>".$value."</td>");
print("</tr>");
}
mysql_close($database);
?>
</tbody>
</table>
<?php
}
?>