2012-04-01 61 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>