2012-07-12 67 views
1

我填充日期列表从MySQL数据库是这样的:新增CSS类的MySQL结果基于指标分析

<?php 
    while ($row = mysql_fetch_array($list_customers)) { 
     echo "<tr>\n"; 
      echo "<td>".$row['customer_date']."</td>\n"; 
     echo "</tr>\n"; 
    } 
?> 

现在我想补充一个<span>根据某些条件改变class=''内的结果:

  • 如果日期的结果是不到30天,从今天的日期到达,加 class='yellow'
  • 如果日期的结果是从今天起,广告超过30天d class='green'
  • 如果结果日期已过,基于今天的日期,添加class='red'

这将是可能的吗?提前致谢。

+0

'customer_date'字段的类型是什么? – Adi 2012-07-12 20:20:00

+0

请不要在新代码中使用'mysql_ *'函数。他们不再被维护,社区已经开始[弃用流程](http://goo.gl/KJveJ)。请参阅[**红框**](http://goo.gl/GPmFd)?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定,[本文](http://goo.gl/3gqF9)将有助于选择。如果你关心学习,[这里是很好的PDO教程](http://goo.gl/vFWnC)。 – 2012-07-12 20:26:40

+0

@大卫:我知道你已经接受了一个答案,但也请阅读我的答案。我已经提出了几点你可能需要知道的。 – Spudley 2012-07-12 20:47:49

回答

3

是的。只是当前时间使用一系列的if报表您指定的日期和变量定义的类名,如:

while ($row = mysql_fetch_query($list_customers)) { 
    echo "<tr>\n"; 
    $class = "class='green'"; 
    if (strtotime($row['customer_date']) < time()) { 
     $class = "class='red'"; 
    }elseif (strtotime($row['customer_date']) < time() + 30*24*3600) { 
     $class = "class='yellow'"; 
    } 
    echo "<td><span $class>" . $row['customer_date'] . "</span></td>\n"; 
    echo "</tr>\n"; 
}   
+0

太棒了,谢谢! – David 2012-07-12 20:37:10

2

这真是你写指定的if()条件,只是一个简单的例子。没有魔法。首先,我们需要知道customer_date字段的格式。由于您直接将其打印到HTML代码中,我猜它是以文本格式,所以我们需要做的第一件事是将其转换为日期对象。

$custDate = new DateTime($row['customer_date']); 

该日期是否是一个合适的格式只会工作,但说实话,如果它不是在标准的MySQL日期格式,那么你应该现在就停止和修复,我们再往前走了。

您还需要当前日期作为日期对象:

$currDate = new DateTime(); 

现在你可以很轻松地使用上DateTime类的方法对它们进行比较:

$dateDiff = $currDate->diff($custDate)->days; 

现在你明白了,你可以做你的if()条件。

  1. 您使用mysql_fetch_array()

    不过,我想指出的几件事情。请注意,mysql_功能已过时;如有可能,您应该用mysqli_xxx或PDO库进行更换。

  2. 你建议在<td>里面放入<span>这个类 - 可以直接把类放入<td>。这将是一个更清洁的选择,所以我会在答案中使用它,尽管这取决于你。

  3. 您建议使用类名称red,​​,yellow。请注意,这不是特别好用的类名。类名应该反映元素的实际用途,而不是它的外观。这是因为使用类和将样式从HTML中分离出来的重点在于可以在不更改HTML的情况下更改样式。但是,如果类名称只是颜色名称,它会将其与逻辑上的颜色联系起来;您也可以将颜色直接放入HTML中。更好的类名选择可能类似custExpired,custNearlyExpired等。这会给你以后更多的灵活性,并使得阅读它的代码更容易理解(例如google bot!)。

因此,所有考虑到这一点,这里的一些代码对你:

$currDate = new DateTime(); 
while ($row = $mysqli->fetch_array($list_customers)) { 
    $custDate = new DateTime($row['customer_date']); 
    $dateDiff = $currDate->diff($custDate)->days; 

    $class = ''; 
    if($dateDiff < 30) { $class = 'custNearlyExpired'; } 
    if($dateDiff < 0) { $class = 'custExpired'; } 

    echo "<td class='custDate {$class}>{$row['customer_date']}</td>\n"; 
} 

和CSS:

td.custDate { 
    background: green; 
} 
td.custDate.custNearlyExpired { 
    background: yellow; 
} 

td.custDate.custExpired { 
    background: red; 
} 

希望有所帮助。

+0

这是一个很棒的评论。非常感谢您花时间做到这一点!我学到了很多。 – David 2012-07-12 20:52:33

+0

不用担心。值得花些时间。 (虽然StackOverflow是一个很棒的网站,但其中一个问题是,问题的转变 - >回答太快,以至于写一个简短的答案往往会让人感到压力,但在很多情况下,简短的回答可能有效,但可能不一定是最好的答案。总是有很多东西需要学习,这个答案中甚至有些东西可以改进,但是我希望它对你有帮助,甚至对其他人也有帮助。 – Spudley 2012-07-12 21:05:30