繁体   English   中英

PHP MySQL查询循环if语句

[英]Php mysql query loop if statement

我正在尝试更改php表的tr的bgcolor,它从循环中获取其数据。 我在所有php html方面都是不错的菜鸟。 整整一天都在尝试,无法在查找数据时更改bgcolor。

从mysql数据库获取所有数据的循环工作正常,现在,如果超过30天并且状态为OUT,我不知道如何进一步更改输出以更改bgcolor。

这是我目前正在尝试的代码。 任何帮助,将不胜感激。

    $con=mysqli_connect($host, $db_user, $db_pass, $db);
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM data");

$sql77 = "SELECT * FROM data WHERE dt_in < date_sub(curdate(), INTERVAL 30 DAY) AND status != OUT";
$result77 = mysql_query($con,$sql77);

echo "<table border='1'>
<tr bgcolor='lightgrey'>
<th>Signed in by</th>
<th>Reference Number</th>
<th>Asset Number</th>
<th>Make Model</th>
<th>Operating System</th>
<th>Office</th>
<th>Profile</th>
<th>Extra Apps</th>
<th>Time IN</th>
<th>Status</th>
<th>Time OUT</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
if (!$result77) {
echo "<tr>";
} else {
echo "<tr bgcolor='red'>";
}
  echo "<td>" . $row['who'] . "</td>";
  echo "<td>" . $row['ref'] . "</td>";
  echo "<td>" . $row['asset'] . "</td>";
  echo "<td>" . $row['make_model'] . "</td>";
  echo "<td>" . $row['os'] . "</td>";
  echo "<td>" . $row['office'] . "</td>";
  echo "<td>" . $row['swp'] . "</td>";
  echo "<td>" . $row['ea'] . "</td>";
  echo "<td>" . $row['dt_in'] . "</td>";
  echo "<td>" . $row['status'] . "</td>";
  echo "<td>" . $row['dt_out'] . "</td>";
  echo "</tr>";
  }
echo "</table>";
echo $result77;
mysqli_close($con);
?> 

这终于解决了我的问题。

    while($row = mysqli_fetch_array($result))
{
if(time() - strtotime($row['dt_in']) > 2592000 && $row['status'] != 'OUT') //2592000 sec == 30 days
{
echo "<tr class='MyOut'>";
} else {
echo "<tr>";
}
  echo "<td>" . $row['who'] . "</td>";
  echo "<td>" . $row['ref'] . "</td>";

如果我没看错

$result77 = mysql_query($con,$sql77);

$ result77将始终导致TRUE(查询有效)或FALSE(查询失败)。 在while循环中,每一行都不会改变。 检查$ row数组中的值应该可以解决问题。

如注释中所建议,您可能应该使用CSS(但是出于测试目的,应该将“ class ='MyOut'”替换为“ bgcolor ='red'”应该可以)。

while($row = mysqli_fetch_array($result))
{
  echo "<tr";

  if ($row['status'] == 'OUT')
  {
    echo " class='MyOut'";
  }

  echo ">";

  ...remainder of output...

}

要么

while($row = mysqli_fetch_array($result))
{
  echo "<tr" . ($row['status'] == 'OUT' ? " class='MyOut'" : "") . ">";

  ...remainder of output...

}

在while循环之外,运行以下行(这假定dt_in是YYYY-MM-DD字段。如果是其他内容,则需要在下面的调用中修改“ Ymd”):

$cDate = date("Y-m-d", mktime(0, 0, 0, date("n"), date("j") - 30, date("Y")));

如果同时满足两个条件:

if (($row['status'] == 'OUT') && ($row['dt_in'] <= $cDate))

如果满足任一条件

if (($row['status'] == 'OUT') || ($row['dt_in'] <= $cDate))

使用CSS选择器:nth-of-type( )

table tr:nth-child(odd) { background-color: #ccc; } <br />

使用PHP或Javascript有一种脚本方式可以这样做,但是CSS更好,因为CSS的主要功能是样式,而PHP不需要这样做就为服务器生成了额外的负载,而javascript很好也可以,但可以被用户禁用。
要发出已标记行的信号(例如30天以上),只需使用您拥有的表标志dt_out并使用PHP条件对行或单元格进行backgroun.color。 最好从PHP条件语句调用类。

首先,此查询存在一些问题SELECT * FROM data WHERE dt_in < date_sub(curdate(), INTERVAL 30 DAY) AND status != OUT

一个问题是OUT需要用单引号引起来(因为我假设状态是varchar?)。 另外,通过此查询,我相信您正在尝试获取少于30天或状态为!='OUT'的所有行,因为您的背景为红色的条件是dt_in > 30 days and status == 'OUT'并且此逻辑(德摩根定律)的逻辑取反是dt_in <= 30 days or status != 'OUT'

话虽这么说,如果$ result77查询返回的是您的php代码中的推理,如果背景超过30天,则背景变为红色,如果至少有1行小于或等于30,则将永远无法工作天或状态不等于OUT。 您应该做的是执行两次查询,1次查询less than or equal to 30 days old or status not equal to OUT的数据less than or equal to 30 days old or status not equal to OUT ,1次查询older than 30 days and has status equal to out 或者您可以摆脱$result77 =..查询,并将if(!$result77)替换为

if(time() - strtotime($row['dt_in']) <= 2592000 || $row['status'] != 'OUT') //2592000 sec == 30 days

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM