PHP - “if”中的“while”问题交替html表格行颜色

Posted

技术标签:

【中文标题】PHP - “if”中的“while”问题交替html表格行颜色【英文标题】:PHP - "if" in "while" problems to alternate html table rows colour 【发布时间】:2012-04-18 09:40:45 【问题描述】:
$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>";
   

问题:

“香蕉”通过使用模数 (%) 检查香蕉是否为奇数,从而交替显示表格行 (class="alt") 的颜色。 不工作,我看到浏览器正在自动关闭打开的&lt;tr&gt; 标记。

例如:

&lt;tr&gt;&lt;td&gt;person&lt;/td&gt;&lt;td&gt;data&lt;/td&gt;&lt;td&gt;$10.00&lt;/td&gt;&lt;/tr&gt;

&lt;tr class="alt"&gt;&lt;/tr&gt;(以这种方式重复)

更新

我发现重复的 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"

它给了我这样的错误数据:

    person1 $10.00 person1 $0.00 person2 $10.00 person2 $0.00

【问题讨论】:

代码似乎是正确的。还有其他一些错误。 同意;绝对应该工作。但是,尝试这样做而不是 IF 语句: printf( ", ($banana %2 ? '' : 'alt') ); 是的,我很困惑。 css 表格颜色行也可以正常工作。 $total_price2 == 0 时,该特定行内不应有&lt;td&gt;s(因为您的if 语句)。也许这就是你所看到的? @Lee 如果第二行 $total_price2 等于 0,这似乎是预期的输出。 【参考方案1】:

如果一切都失败了,你可以只使用 CSS:

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

【讨论】:

【参考方案2】:

先尝试这样做以进行调试:

echo "&lt;tr class=\"alt\"&gt;&amp;nbsp;";

我的猜测是您的

中没有包含任何数据,并且您的浏览器正在将其压缩到 0 px 高。

编辑:我不完全确定为您的

提供一个类会根据某些浏览器 DOM 解析过滤到 中。每当我做斑马划船时,我都会将类分配给 。不过,从任何标准来看,我都不是设计师。 :)

请幽默并尝试一下:

$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 am 这里 x.x zzzzzzz 又没有运气了 :( 模数不断返回奇数,跳过偶数 (class="alt")。 @Lee 我们将需要更多您的代码。一定有其他东西在影响$banana,还有我的代码中的 html 打印是什么? 【参考方案3】:

那是行不通的。如果$total_price2!=0,您只会打开表格行。看来您应该只在该 IF 块内输出结束 &lt;/tr&gt; 标记。

试试这个:

<?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。请参阅上面的更新。 还有什么是“!”意思是if ( !$total_price2)。为什么这个 if 语句没有 括号? 我不知道您的查询是什么...请将其添加到您的问题中。 ! 表示“假”值,例如 0,单行语句不需要括号。两者都是个人喜好。你可以写if ($total_price2 == 0) continue;

以上是关于PHP - “if”中的“while”问题交替html表格行颜色的主要内容,如果未能解决你的问题,请参考以下文章

线程通信(交替执行)

两个线程交替打印

在 PHP 中的 while() 中合并数组

PHP - IF 语句在 While 循环中始终为真

从多个表中提取时 PHP while 循环和 if 语句问题

如何在 php 中使用 PHPExcel 交替无法/禁用 Excel 工作表字段