【问题标题】:Why is there and extra able column being inserted?为什么要插入额外的列?
【发布时间】: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>";

出于什么原因,当我在船长和付费之间没有&lt;td&gt;&lt;/td&gt; 时,实际上生成了另一列。

原代码为:

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

尽我所能,我无法破译独立的&lt;/td&gt; 和独立的%s \n 是如何努力摆脱“额外”列的。

是的,我知道这一切都应该使用 CSS 等来完成,但我只是在修改现有的代码。我还没有达到能够重写整个页面的水平。 (虽然几乎准备好了)

那么有人可以解释为什么我需要插入一个额外的列,以及不合适的 &lt;\td&gt;%s \n 是如何使用旧代码的吗?

顺便说一句,如果我只是在语句的末尾添加一个&lt;td&gt;%s&lt;/td&gt; and add$row['weeks']`,它仍然会插入一个额外的列。我没有尝试把它放在更靠近声明的前面。

【问题讨论】:

  • &lt;td&gt;…&lt;/td&gt; 放入另一个&lt;td&gt;…&lt;/td&gt; 显然会生成无效的HTML。整个剧本是以可以想象的最糟糕的方式之一编写的。您应该真正 做的只是使用另一个占位符将类名 动态插入“付费”td,而不是使用过时的HTML 属性来进行格式化。
  • 好吧,你的输出有时包含 something 这显然是糟糕的 HTML。然而,许多浏览器试图“猜测”你的意思,并试图“修复”它。因此,他们经常将其更改为 something 之类的东西,这并不令人惊讶地在您意想不到的地方增加了 1 列。添加 将抵消这种行为。
  • @CBroe,它不一定是过时的 HTML。当然,这是一个旧标准(有效的 HTML 4),但这并不会导致它本身就错了。只是不是很漂亮,而且不如 HTML5+CSS3 强大
  • 我并没有说它技术上是错误的(使用 HTML 4.01 过渡文档类型是有效的) - 但它 恕我直言,并且没有现在应该写这样的代码了(除非在非常特殊的情况下,使用 CSS 可能不是一种选择,fe 电子邮件模板用于过滤所有 CSS 的系统)。
  • @Tularis 好的,我想我明白你在说什么了。由于有一个 &lt;td&gt;%s&lt;/td&gt; 并且有一个适合其中的变量定义为 &lt;td bgcolor=#ff6633&gt;not paid&lt;/td&gt; 我们得到 notpaid... 因此&lt;/td&gt;。现在未标记的 ` %s \n` 是如何工作的?

标签: php html mysql html-table


【解决方案1】:

printf() 命令用后续输入替换每个“%s”。所以第一个 %s 被替换为 $row['first_name'],第二个被替换为 $row['last_name'],依此类推。

问题在于 $playpaid 需要有与之关联的特殊条件格式,因此作者专门为该列构建了&lt;td&gt;&lt;/td&gt; 标签。所以你不能只把结果值加上&lt;td&gt;%s&lt;/td&gt;,因为那样你最终会得到双倍的&lt;td&gt;&lt;td&gt;,就像上面的cmets中提到的那样。

原始代码中似乎有一个额外的&lt;/td&gt;。请尝试以下操作:

printf("
<tr>
    <td>%s</td>
    <td>%s</td>
    <td>%s</td>
    <td>%s</td>
    <td>%s</td>
    <td>%s</td>
    %s
    <td>%s</td> \n
</tr>",
$row['first_name'],
$row['last_name'],
$email,
$row['league_id'],
$row['name'],
$iscapt,
$playpaid,
$row['weeks']);

末尾的 \n 只是在生成的 HTML 中添加一个回车符。

至于额外的列,那是因为您在表格标题行中有一个额外的空白&lt;td&gt;&lt;/td&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多