PHP / MySQL查询到html表的问题

时间:2012-04-01 01:35:46

标签: php mysql html

我有一个奇怪的问题,将查询放入一个html表中,以便在php / mysql设置中显示。查询将始终产生比显示的结果多一个的结果。例如,如果返回了1组结果,则表中不会显示任何内容。如果有5,则仅显示4。我尝试使用预定义函数进行相同的查询,以根据查询生成表,并生成具有正确结果数的正确表。这是一个例子(对于缩进或缺乏的道歉):

$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>";

由于

8 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您是否在页面上声明了DOCTYPE?这是我唯一能想到的。您的代码看起来正确。

  

注意:如果未指定!DOCTYPE,则border-collapse属性可以   产生意想不到的结果。

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

此外,您是否已启用警告/错误?最后一行可能有一些错误,这就是它没有显示的原因。

答案 2 :(得分:0)

尝试使用mysql_fetch_assoc代替mysql_fetch_array

答案 3 :(得分:0)

检查你的$ i和$ num in while循环。 我认为你的时间应该是:

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

答案 4 :(得分: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>

答案 5 :(得分:0)

你是否尝试过没有桌子的输出?即

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

如果是,结果相同,您是否已在phpMyAdmin中应用该查询以检查结果?可能是您的最后一条记录在数据库中为空,因此代码不显示任何内容。

答案 6 :(得分:0)

尝试使用for循环而不是while。

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

答案 7 :(得分:0)

也许是在计算

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

当行尝试时,将它们取出。