Ячейки не расширяются без причины, они расширяются, чтобы соответствовать содержимому ячейки. Взгляните на автоматическая раскладка стола . Кроме того, спецификация HTML4 говорит о ширине ячейки таблицы :
Если ширина столбцов оказывается слишком узкой для содержимого конкретной ячейки таблицы, пользовательские агенты могут выбрать переформатирование таблицы.
Плохо и ссылаться на огромную страницу в качестве примера, и ссылаться на огромную страницу без предупреждения. Некоторые браузеры могут плохо себя вести, и люди не оценят, что вы сломаете их браузер. Образцы (и страницы, и код) должны быть краткими и полными. Удалите все посторонние, как из примера кода, так и уменьшив отображаемые результаты.
Off-Topic
Для ячеек заголовка используйте <th>
, а не <td>
с классом. Держи это семантическое .
Если вы обнаружите, что повторяете код, вы должны использовать функцию или цикл.
Расширение mysql находится на пути к устареванию. Используйте PDO или mysqli, которые поддерживают подготовленные операторы.
Надеюсь, вы не помещаете учетные данные базы данных в основной скрипт, как в примере. Конфиденциальная информация должна храниться в одном месте, где ее легче защитить. Кроме того, чем больше вы повторяете что-то, тем больше шансов на опечатку. Не повторяйся .
Имена должны быть описательными; имена из одной буквы столбца (или переменной или ...) не являются. Они даже были частью ежедневного WTF . Надеемся, что это только в примере кода и производственный код (и база данных) имеет более описательные имена.
Таблицы стилей предпочтительнее атрибута width
для установки ширины ячейки таблицы, что является следствием отделения структуры от представления. Вы можете дать клеткам класс для выбора в селекторах; когда они имеют более широкую поддержку браузера, вы можете использовать :nth-child()
или :nth-of-type()
псевдоклассы в селекторах (например, tr > nth-child(2)
, th:nth-of-type(2), td:nth-of-type(2)
) вместо классов. Из того же раздела спецификации HTML4, который ранее был связан с:
Примечание. Хотя атрибут width в элементе TABLE не считается устаревшим, авторам рекомендуется использовать таблицы стилей для указания ширины таблицы.
Вот пример, который включает изменения для некоторых из этих проблем. Во-первых, 'localdb.php', класс, который обрабатывает создание соединения с БД и позволяет вам где-то изолировать учетные данные (хотя там, где это не показано). Обратите внимание, что у него все еще есть проблемы (такие как доступ к данным и представление слишком тесно связаны).
<?php
class LocalDB {
static function connect($dbName=null) {
if ($dbName) {
$dbName = ";dbname=$dbName";
}
try {
$db = PDO("mysql:hostname=localhost$dbName",
self::user(), self::password(),
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# can cause problems in some versions of PHP 5.2
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, False);
return $db;
} catch (PDOException $exc) {
# remove call to PDO's constructor from trace, which will include
# database credentials
throw new PDOException($exc->getMessage(), $exc->getCode());
}
}
static private user() {...}
static private password() {...}
}
Далее основной сценарий (без встроенной таблицы стилей , поскольку в примере это не имеет значения и в любом случае должен быть помещен во внешнюю таблицу стилей):
<?php
include_once('path/to/localdb.php');
$db = LocalDB::connect(...);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="rtl" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta content="ar-sa" http-equiv="Content-Language" />
<title>آخر العروض</title>
</head>
<body>
<div class="website">
<?php
try {
$result = $db->query(...);
$result->setFetchMode(PDO::FETCH_ASSOC);
?>
<table>
<?php $header = $result->fetch(); ?>
<tr>
<?php foreach ($header as $field => $value) { ?>
<th class="<?php echo $field ?>"><?php echo $value; ?></th>
<?php } ?>
</tr>
<?php foreach ($result as $row) { ?>
<tr>
<?php foreach ($row as $field => $value ?>
<td class="<?php echo $field ?>"><?php echo $value ?></td>
<?php } ?>
</tr>
<?php } ?>
</table>
<?php } catch (PDOException $exc) { ?>
<p>There was an internal error when fetching the data. It's been logged, and we'll look into it.</p>
<?php
// log exception
...
} ?>
</div>
</body>
</html>