2010-07-20 59 views
0

我有從MySQL數據庫中檢索有關玩家信息的代碼。如果他們的排名發生變化,我想將特殊情況應用於HTML輸出。我希望它看起來是這樣的:http://i27.tinypic.com/f406tz.png將數據庫列與變量進行比較時出現意外輸出

,但我不能得到它像我想要的,而是打印在每一行的排名:

$old_rank = ''; 
while ($g = mysql_fetch_object($q)) { 

if ($g->rankname != $old_rank) { 
    echo "<tr><td>$g->rankname</td>\n"; 
    $old_rank = "<tr><td>&nbsp;</td>\n"; 
} 

echo " <td>$g->name</td></tr>\n"; 

} 

我想要什麼:

<tr> 
<td>One</td> 
<td>Kraven the Hunter</td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>Kull the Conqueror</td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>Zazi The Beast</td> 
</tr> 

<tr> 
<td>Vice-leader</td> 
<td>Igos du Ikana</td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>Saint Sinner</td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>Midvalley the Hornfreak</td> 
</tr>....................... 

我得到什麼:

<tr><td>One</td> 
<td>Tester</td></tr> 
<tr><td>One</td> 
<td>Kraven the Hunter</td></tr> 
<tr><td>One</td> 

<td>Kull the Conqueror</td></tr> 
<tr><td>One</td> 
<td>Zazi The Beast</td></tr> 
<tr><td>Vice-Leader</td> 
<td>Midvalley the Hornfreak</td></tr> 
<tr><td>Vice-Leader</td> 
<td>Saint Sinner 

</td></tr> 
<tr><td>Vice-Leader</td> 
<td>Igos du Ikana</td></tr> 

回答

6

$old_rank是永遠等於$g->rankname因爲您設置的方式爲$old_rank,它將包含HTML標記,而您從數據庫獲取的$g->rankname將永遠不會有HTML標記。

試着改變你的if語句是這樣的:

if ($g->rankname != $old_rank) { 
    echo "<tr><td>$g->rankname</td>\n"; 
    $old_rank = $g->rankname; 
} else { 
    echo "<tr><td>&nbsp;</td>\n"; 
} 

它打印軍銜名稱如果這是一個新的等級名稱,否則它打印空白。

0

我更喜歡把事情分得多一點。保持事物分離使修改更容易。這應該工作。

$old_rank = ''; 
while ($g = mysql_fetch_object($q)) { 
    echo '<tr>' . "\n"; 
    echo '<td>'; 
    if ($g->rankname != $old_rank) { 
     $old_rank = $g->rankname; 
     echo $old_rank; 
    } else { 
     echo '&nbsp;'; 
    } 
    echo '</td>'; 
    echo '<td>' . $g->name . '</td>' . "\n"; 
    echo '</tr>' . "\n"; 
} 
0

以下(儘管有拼寫錯誤)將顯示邏輯從數據庫循環中分離出來。這具有以下優點: - 您不需要依賴返回結果的順序 - 您不需要維護惡意邏輯(如'old_rank') - 您可以更好地顯示它們(使用rowspan重複行列

我相信總碼更緊湊了。

// fill ranks array 
$ranks = array(); 
while ($g = mysql_fetch_object($q)) { 
    if (!in_array($g->rankname, $ranks)) { 
     $ranks[htmlentities($g->rankname)] = array(); 
    } 
    $ranks[$g->rankname][] = htmlentities($g->name); 
} 

// do other program logic here 

// end of program 
?> 

<!-- display the page --> 
<table> 
    <tr> 
     <th>Rank</th><th>Users</th> 
    </tr> 

    <?php foreach($ranks as $rankName => $userList): ?> 
     <tr> 
      <td rowspan="<?php echo (string)sizeof($userList); ?>"> 
       <?php echo $rankName; ?> 
      </td> 
      <td> <?php echo implode('</td></tr><tr><td>', $userList); ?> </td> 
     </tr> 
    <?php endforeach; ?> 
</table> 
相關問題