【发布时间】:2014-03-26 18:00:09
【问题描述】:
我正在尝试将一列添加到现有表中并得到令人讨厌的结果。
我目前有:
print "<table border=1>";
print "<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Email?</td>
<td>League</td>
<td>Team</td>
<td>Captain</td>
<td></td>
<td>paid</td>
<td>wks played</td>
</tr>";
while ($row=mysql_fetch_assoc($results)){
if($row['email_address'] != NULL ){
$email='y';
}
else {
$email='n';
}
if($row[captain_id]==$row[player_num]){ $iscapt="Captain"; }
else{$iscapt="";}
$paid=$row[paid];
if($paid){$playpaid="<td bgcolor=#99ff33>paid</td>";}
else {$playpaid="<td bgcolor=#ff6633>not paid</td>";}
printf ("<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
</tr>",
$row['first_name'],
$row['last_name'],
$email,
$row['league_id'],
$row['name'],
$iscapt,
$playpaid,
$row['weeks']
);
}
print "</table>";
出于什么原因,当我在船长和付费之间没有<td></td> 时,实际上生成了另一列。
原代码为:
printf("
<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
</td>
<td>%s</td>
%s \n
</tr>",
$row['first_name'],
$row['last_name'],
$email,
$row['league_id'],
$row['name'],
$iscapt,
$playpaid);
尽我所能,我无法破译独立的</td> 和独立的%s \n 是如何努力摆脱“额外”列的。
是的,我知道这一切都应该使用 CSS 等来完成,但我只是在修改现有的代码。我还没有达到能够重写整个页面的水平。 (虽然几乎准备好了)
那么有人可以解释为什么我需要插入一个额外的列,以及不合适的 <\td> 和 %s \n 是如何使用旧代码的吗?
顺便说一句,如果我只是在语句的末尾添加一个<td>%s</td> and add$row['weeks']`,它仍然会插入一个额外的列。我没有尝试把它放在更靠近声明的前面。
【问题讨论】:
-
将
<td>…</td>放入另一个<td>…</td>显然会生成无效的HTML。整个剧本是以可以想象的最糟糕的方式之一编写的。您应该真正 做的只是使用另一个占位符将类名 动态插入“付费”td,而不是使用过时的HTML 属性来进行格式化。 -
好吧,你的输出有时包含
something 这显然是糟糕的 HTML。然而,许多浏览器试图“猜测”你的意思,并试图“修复”它。因此,他们经常将其更改为something 之类的东西,这并不令人惊讶地在您意想不到的地方增加了 1 列。添加 将抵消这种行为。 -
@CBroe,它不一定是过时的 HTML。当然,这是一个旧标准(有效的 HTML 4),但这并不会导致它本身就错了。只是不是很漂亮,而且不如 HTML5+CSS3 强大
-
我并没有说它技术上是错误的(使用 HTML 4.01 过渡文档类型是有效的) - 但它是 恕我直言,并且没有现在应该写这样的代码了(除非在非常特殊的情况下,使用 CSS 可能不是一种选择,fe 电子邮件模板用于过滤所有 CSS 的系统)。
-
@Tularis 好的,我想我明白你在说什么了。由于有一个
<td>%s</td>并且有一个适合其中的变量定义为<td bgcolor=#ff6633>not paid</td>我们得到notpaid ... 因此</td>。现在未标记的 ` %s \n` 是如何工作的?
标签: php html mysql html-table