2012-04-01 65 views
5

我有一個奇怪的問題,把一個查詢放入一個html表中顯示在php/mysql設置。該查詢總是會產生比所示更多的結果。例如,如果返回了一組結果,則表中不會顯示任何結果。如果有5個,只顯示4個。我已經使用預定義的函數嘗試了相同的查詢來生成基於查詢的表格,並生成了具有正確結果數量的正確表格。下面是一個例子(用於縮進,或缺乏道歉):PHP/MySQL查詢到html表問題

$user_id = implode($_SESSION['user_id']); 
$query = "SELECT name, address 
    FROM user 
    WHERE user_id = '$user_id' 
    ORDER BY date_added DESC"; 
$result = mysql_query($query) or die ("query failed: " . mysql_error());   

echo "<table border='1' style=\"border-collapse: collapse;\"> 
<tr style=\"background-color: #000066; color: #FFFFFF;\"> 
<th>Name</th> 
<th>Address</th> 
</tr>"; 

$rowCt = 0; // Row counter 
while($row = mysql_fetch_array($result)) 
    { 
    if($rowCt++ % 2 == 0) $Style = "background-color: #00CCCC;"; 
    else $Style = "background-color: #0099CC;"; 
    echo "<tr style=\"$Style\">"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['address'] . "</td>"; 
    echo "</tr>"; 
    } 
    echo "</table>"; 

任何想法,爲什麼發生這種情況?任何幫助將不勝感激,這讓我瘋狂,需要弄清楚,然後才能繼續前進!謝謝。

編輯

我稍微改變它遍歷行的量,這個數字是正確的,現在的表是正確的尺寸,但是最後的結果總是空的。有任何想法嗎?

$rowCt = 0; // Row counter 
    $i = 0; 
    echo mysql_num_rows($result). ' number of rows'; 
    $num = mysql_num_rows($result); 
    //while($row = mysql_fetch_array($result)) 
    while ($i < $num) 
    { 

    $row = mysql_fetch_array($result); 

    if($rowCt++ % 2 == 0) $Style = "background-color: #00CCCC;"; 
    else $Style = "background-color: #0099CC;"; 
    echo "<tr style=\"$Style\">"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['address'] . "</td>"; 
    echo "</tr>"; 
    $i++; 

    } 
    echo "</table>"; 

感謝

+1

echo mysql_num_rows($ result);並確保它返回你期望的行數 – Tom 2012-04-01 01:40:27

+1

你想用'implode($ _ SESSION ['user_id'])'做什麼? – mshsayem 2012-04-01 01:50:37

+0

我看到你的代碼沒有錯。只有在你身邊,你有一個if和else,試着評論他們,看看會發生什麼,它可以做一些意想不到的事情。另外我建議直接在phpmyadmin中執行$ query(如果已安裝)並查看返回的數據集以確認返回的數據。 – ArendE 2012-04-01 02:02:11

回答

0

你有沒有宣佈在頁面上DOCTYPE?這是我能想到的唯一的事情。你的代碼看起來正確。

注意:如果沒有指定!DOCTYPE,border-collapse屬性可能會產生意外的結果 。

http://www.w3schools.com/cssref/pr_tab_border-collapse.asp

而且,你已經警告/錯誤打開吧?最後一行可能存在一些錯誤,這就是爲什麼它沒有顯示。

+0

嗨,感謝您的回覆。 doctype已聲明,並且沒有與該區域相關的錯誤顯示。即使當我計算返回的事物數量時,它仍然顯示比實際存在的少一個!任何其他想法? – 2012-04-01 11:01:55

0

嘗試使用mysql_fetch_assoc代替mysql_fetch_array

0

檢查你的$ i和$ NUM在while循環。 我想你的,而應該是:

while($i <= $num){ 
// Your code 
} 
0

試試這個:

<?php 
$user_id = $_SESSION['user_id']; 
$query = mysql_query("SELECT * FROM `user` WHERE `user_id`='$user_id' ORDER BY `date_added` DESC")or die(mysql_error()); 
?> 
<table border="1" style="border-collapse: collapse;"> 
<tr style="background-color: #000066; color: #FFFFFF;"> 
<th>Name</th> 
<th>Address</th> 
</tr> 
<? 
$colour2 = "transparent"; 
$colour1 = "#0099CC"; 
$row_count = 0; 
while($row = mysql_fetch_array($query)){ 
$rowcolor = ($row_count % 2) ? $colour1 : $colour2; 
?> 
<tr style="background: <? echo $rowcolor; ?>;"> 
<td><? echo $row['name']; ?></td> 
<td><? echo $row['address']; ?></td> 
</tr> 
<? 
$row_count++; 
} 
?> 
</table> 
0

您是否嘗試過不表中的輸出?即

echo $row['name']." - ".$row['address']."<br />"; 

如果是與相同的結果,您是否應用該查詢在phpMyAdmin檢查結果?可能是你的最後一條記錄在數據庫中是空的,所以代碼什麼都不顯示。

0

嘗試使用for循環而不是while。

for($i=0;$i<=mysql_num_rows;$i++) 
{ 
    $row = mysql_fetch_array($query); 
    ... 
    ... 
} 
0

也許是它計數

<th>Name</th> 
<th>Address</th> 

爲行嘗試,採取出來。

1

試試這個.........

<style> 
#s { 
background-color: #000066; 
color: #FFFFFF; 
} 
#s1 { 
background-color: #0CC; 
} 
#s2 { 
background-color: #09C; 
} 
</style>  
<?php 
$user_id = implode($_SESSION['user_id']); 
$result = mysql_query("SELECT name, address FROM user WHERE user_id = '$user_id' ORDER BY date_added DESC", $your_connection) or die ("query failed: " . mysql_error());   
?> 
<table border="1" style="border-collapse:collapse;"> 
<tr id="s"> 
<th>Name</th> 
<th>Address</th> 
</tr> 
<?php 
$rowCt = 0; // Row counter 
while($row = mysql_fetch_assoc($result)) 
    { 
    if($rowCt++ % 2 == 0): 
    $Style = "s1"; 
    else: 
    $Style = "s2"; 
    endif; 
    ?> 
    <tr id="<?php echo $Style; ?>"> 
    <td><?php $row['name']; ?></td> 
    <td><?php $row['address']; ?></td> 
    </tr> 
    <?php } ?> 
    </table>