Я не могу понять эту ошибку в строгом XHTML - PullRequest
0 голосов
/ 09 марта 2011

Эта страница создается с помощью сценария 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>Donald Podhorsky</title> 
    <link href="CSS/Index.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<h3>Search Results</h3> 
<table> 
<tbody> 
</tbody></table> 
</body> 
</html>

Вот как выглядит мой код при просмотре исходного кода в Firefox:

<?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);
?>

Ответы [ 5 ]

4 голосов
/ 09 марта 2011

Это не проходит проверку, потому что у вас ничего нет в TBODY. Добавьте несколько строк со столбцами, и он будет проверен.

1 голос
/ 09 марта 2011

Я не знаю, будет ли работать цикл for.Кроме того, вы, похоже, не используете $counter ни для чего.Вместо этого попробуйте время:

while ( $row = mysql_fetch_row( $result ) )

Если это все еще ничего не отображает, вероятно, у вас нет строк для выборки для начала.Поэтому между вашими тегами <tbody> ничего не выводится, а пустой <tbody> считается недействительным XHTML.

0 голосов
/ 09 марта 2011

Используя 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
}
?>
0 голосов
/ 09 марта 2011

Ваш код выглядит правильно, а сгенерированный HTML выглядит правильно, но я предполагаю, что mysql_fetch_row возвращает что-тоВозможно ли, что это отправляет что-то похожее на тег HTML?

Вот где я бы начал искать.Убедитесь, что синтаксис правильный для PHP и возвращает то, что вы ожидаете.

0 голосов
/ 09 марта 2011

Включить таблицу только в том случае, если в ней есть строки. Если вы предоставили больше скрипта php, оператор if должен легко исключить их и разрешить его проверку.

РЕДАКТИРОВАТЬ: Я не полностью понял ваш вопрос, пока я не увидел комментарий о другом решении.

Здесь происходит то, что ваш запрос зависит от данных POST, куки или каких-то данных, которые не передаются валидатором. Решением может быть использование значения по умолчанию в вашем запросе, если оно не отправлено. Как я уже сказал, вы также можете нарезать всю таблицу вместе, если не отправлено никаких данных.

...