2014-02-24 91 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>

相關問題