2014-01-16 38 views
0

我想改變一個PHP表的tr的bgcolor,它從循環中獲取其數據,我認爲。我是一個體面的noob在所有的PHP HTML的東西。一直在嘗試這一整天,無法通過查找數據來改變bgcolor。PHP的MySQL查詢循環,如果語句

從mysql數據庫獲取所有數據的循環工作正常,現在我不知道如何進一步輸出更改bgcolor如果超過30天,並具有OUT的狀態。

這裏是我目前有和嘗試的代碼。任何幫助,將不勝感激。

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

所以...到底是'$ result77'定義在哪裏?它不在代碼中的任何地方,所以它會'如果(!$ result77)'永遠是真的。 –

+0

不是$ result77這裏定義的:$ sql77 =「選擇*從數據WHERE dt_in Fishy

+2

html5中不支持bgcolor屬性,並且已在html 4.01中棄用。改用css。 – elitechief21

回答

0

首先出現的一些問題與此查詢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',並且這個邏輯否定(De Morgan's law )是dt_in <= 30 days or status != 'OUT'

這就是說,如果$ result77查詢返回了它應該在您的PHP代碼中推理的背景爲紅色,如果它超過30天將不會工作,如果至少有一行小於或者等於30天或者狀態不等於OUT。你應該做的是做兩個查詢,1查詢數據是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 
+0

這個做工精良的日期的事,我chnaged的< to >,現在它的變化是超過30天,狀態出紅都行,但我需要它變成紅色一切不OUT – Fishy

+0

我想,我終於得到了一個解決方案,主要使用您的所有建議答案。做了CSS的東西,修改瞭如果(時間() - 的strtotime($行的事...,結束了這個......而($行= mysqli_fetch_array($結果)){ 如果 (時間() - 的strtotime ($ row ['dt_in'])> 2592000 && $ row ['status']!='OUT')// 2592000 sec == 30 days { echo「」; }其他{ 回聲 「 」; } 回聲「​​」 $行[ '誰'] 「 」 回聲「​​」 $行[ '參考']「 」 回聲「​​「。$ row ['asset']。」「; – Fishy

0

如果我讀它的權利result77

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

$總是會導致主要是TRUE(查詢工作)或FALSE(查詢失敗)。它在while循環期間不會每行更改。檢查$ row數組中的值應該可以解決問題。

正如評論所說,你應該使用CSS(用於測試目的然而,代替「類=‘myout中’」與「的bgcolor =‘紅’」應該工作)。

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場的假設。如果是別的東西,你需要修改在 「年月日」,在下面的調用):

$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)) 
+0

這裏是一個非常簡單的JSFiddle,讓你瞭解輸出結果的樣子。 http://jsfiddle.net/ksvJ9/ – DragonYen

+0

優秀的,我認爲我正在取得進展...有一個紅色背景的線,你可能也是我誰我會如何添加相同的地方dt_in列有一個日期超過30天?我目前在另一個位置使用這個代碼SELECT * FROM data WHERE dt_in Fishy

+0

Bah,不能在這裏放置代碼。將修改帖子。 – DragonYen

0

使用CSS選擇器:nth-of-type()

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

沒有這樣做,用PHP或JavaScript腳本的方式,但CSS是更好的由於CSS的主要功能是樣式,而PHP不需要這樣做就可以爲服務器產生額外的負載,並且JavaScript也很好,但可以禁用用戶。
要發信號通知被標記的行(如超過30天),只需使用您擁有的表標誌,即dt_out並使用PHP條件進行背景顏色行或單元格。最好從PHP條件語句中調用一個類。