2014-02-24 92 views
0

我想添加一列到现有的表格,并得到扭曲的结果。为什么会出现和额外的列插入?

我目前有:

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']`添加到语句的末尾,它仍会插入一个额外的列。我没有试图将它放在声明的前面。

+3

好吧把'​​...'在另一个'​​......'里显然会产生无效的HTML。整个脚本都是以最可想象的最糟糕的方式编写的。你应该做的就是使用另一个占位符将_class name_动态插入到“paid”td中,而不是为了格式化而使用过时的HTML属性。 – CBroe

+1

好了,你在某些时候输出包含​​东西这显然是不好的HTML。然而,许多浏览器试图“猜测”你的意思,并试图“修复”它。所以他们经常把它改成类似于​​的东西这并不令人惊讶地增加了一个额外的列,你不会指望的。添加一个将抵消这种行为。 – Tularis

+0

@CBroe,它不是过时的HTML。当然,这是一个旧标准(有效的HTML 4),但这并不会使它错误。只是不是非常漂亮,而且功能比HTML5 + CSS3更强大 – Tularis

回答

1

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

的问题是,$ playpaid需要有与之相关联的特殊条件格式,所以笔者建成<td></td>标签专门用于该列。所以你不能只把结果的值与<td>%s</td>,因为那么你最终得到双重<td><td>,如上面的评论中所述。

原代码似乎有它的一个额外</td>。请尝试以下操作:

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中。

至于额外的列,那是因为你的表格标题行中一个额外的空白<td></td>

相关问题