PHP - 在while循环中使用if语句来交替显示HTML表格行颜色的问题

3
$banana=0;
$view = mysql_query('SELECT ......') or die ('Encountered an error.') ;
while($rows3=mysql_fetch_array($view))
{
    $total_price2=$rows3['qty']*$rows3['number'];
    $banana = $banana + 1;

    if ($total_price2!=0)
    {   
        if ($banana %2 ==0)
        {   
            echo "<tr class=\"alt\">";
        }   
        else
        {
            echo "<tr>";
        }   
        echo "<td>".$rows3['member']."</td>";
        echo "<td>".$rows3['payment']."</td>";
        echo "<td>$".number_format($total_price2,2)."</td>";                
    }

    echo "</tr>";
}   

问题:

  • “banana” 通过使用模数(%)检查 banana 是否为奇数来交替更改表行的颜色(class="alt")。
  • 不起作用,我看到浏览器自动关闭了开放的<tr>标签。

例如:

<tr><td>person</td><td>data</td><td>$10.00</td></tr>

<tr class="alt"></tr> (以此方式重复)

更新

我发现重复的 banana 总是返回奇数: 1, 3, 5等

MySQL没有正确运行

SELECT table1.member, table1.paid, table1.payment,table2.qty,table3.number FROM table1,table2,table3 WHERE table1.member = table2.member AND table1.payment="fruit"

它给了我错误的数据,如下所示:

  1. person1 $10.00
  2. person1 $0.00
  3. person2 $10.00
  4. person2 $0.00

等等


同意,这应该绝对可行。但是,请尝试使用以下代码替换IF语句:printf("<tr class="%s"", ($banana %2 ? '' : 'alt')); - pp19dd
难道你不想将整行都包含在条件 if ($total_price2!=0) { 中吗?否则,如果该条件不成立,你就会输出空白行。 - mellamokb
还有一件事:强烈建议您使用有意义的变量名。$banana 似乎不是这种情况... - bfavaretto
1
@Lee 如果第二行的 $total_price2 等于 0,那么这似乎是预期的输出。 - jasonlfunk
@李请尝试我的更新并告诉我结果,谢谢。 - Blake
显示剩余11条评论
3个回答

3

首先进行下面的调试:

echo "<tr class=\"alt\">&nbsp;";

我猜测您的<tr>标签中没有包含任何数据,因此被您的浏览器压缩为0像素高度。

编辑:我不确定在某些浏览器DOM解析器中,给<tr>标签添加类将会传递到<td>标签。每当我进行斑马线行时,我会将类分配给<td>标签。不过我并不是设计师,呵呵。

请让我开个玩笑,请尝试这个:

$banana=0;
$view = mysql_query('SELECT ......') or die ('Encountered an error.') ;
while($rows3=mysql_fetch_array($view))
{
    $total_price2=$rows3['qty']*$rows3['number'];
    $banana++;
    if ($banana % 2 == 0) {   
        $td_class = "alt";
    } else {
        $td_class = "";
    }
    echo "<tr>";
    if ($total_price2!=0) {     
        echo "<td class='{$td_class}'>".$rows3['member']."</td>";
        echo "<td class='{$td_class}'>".$rows3['payment']."</td>";
        echo "<td class='{$td_class}'>$".number_format($total_price2,2)."</td>";                            
    }
    echo "</tr>";
}

谢谢你的帮助,我会在明天早上先试一下。现在是凌晨3点15分,我要睡觉了。 - leechyeah
又没有成功 :( 取模运算仍然返回奇数,跳过了偶数 (class="alt")。 - leechyeah
@Lee,我们需要更多你的代码。一定有其他因素影响了$banana,另外,我的代码输出的HTML是什么? - Blake

3

如果其他方法都无效,您可以使用CSS:

tr {background-color: blue;}
tr:nth-of-type(2n) {background-color: red;}

1

那样行不通。你只有在$total_price2!=0的情况下才会打开表格行。看起来你应该只在IF块内输出关闭的</tr>标签。

试试这个:

<?php
$banana=0;
$view = mysql_query('SELECT ......') or die ('Encountered an error.') ;
while($rows3=mysql_fetch_array($view))
{
    $total_price2=$rows3['qty']*$rows3['number'];

    if ( !$total_price2)
        continue;

    $banana = $banana + 1;

    if ($banana %2 ==0)
    {   
        echo "<tr class=\"alt\">";
    }   
    else
    {
        echo "<tr>";
    }

    echo "<td>".$rows3['member']."</td>";
    echo "<td>".$rows3['payment']."</td>";
    echo "<td>$".number_format($total_price2,2)."</td>";

    echo "</tr>";
} 

谢谢,这个方法可行。不过我该如何修复我的查询?它会将每个名称重复两次,并且价格为10或0。请参见上面的更新。 - leechyeah
还有,在 if ( !$total_price2) 中的 "!" 是什么意思?为什么这个 if 语句没有 {} 大括号? - leechyeah
我不知道你的查询是什么...请将其添加到你的问题中。 - landons
1
! 表示“falsey”值,例如0,对于单行语句,您不需要使用括号。这两种方法都是个人偏好。您可以将其编写为 if ($total_price2 == 0) { continue; } - landons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接