2014-01-16 4 views
0

Я пытаюсь изменить bgcolor tr таблицы php, которая, как я думаю, получает данные из цикла. Я порядочный noob во всех файлах php html. Пробовали целый день и не могли заставить его изменить bgcolor на поиск данных.Php mysql query loop if statement

петля, чтобы получить все данные из базы данных 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'? Это не в любом месте вашего кода, поэтому он будет 'if (! $ Result77)' ВСЕГДА будет true. –

+0

здесь не $ result77: $ sql77 = "SELECT * FROM data WHERE dt_in Fishy

+2

Атрибут bgcolor не поддерживается в html5 и устарел в html 4.01. Вместо этого используйте css. – elitechief21

ответ

0

Во-первых есть некоторые проблемы с этим запросом SELECT * FROM data WHERE dt_in < date_sub(curdate(), INTERVAL 30 DAY) AND status != 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, и 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

Это отлично работает для даты, я записал < to >, и теперь он меняет все строки старше 30 дней со статусом до красного, но мне нужно, чтобы он краснел для всего, а не OUT – Fishy

+0

. Думаю, я наконец-то добрался до решение, используя в основном все ваши предлагаемые ответы. Была ли css вещь, изменила if (time() - strtotime ($ row thing ... и закончила с этим ... while ($ row = mysqli_fetch_array ($ result)) { if (time() - strtotime ($ row ['dt_in'])> 2592000 && $ row ['status']! = 'OUT') // 2592000 sec == 30 дней { echo ""; } еще { эхо " "; } эхо" " $ строки [ 'кто'] " ".. эхо" " $ строки [ 'ссылка'] " ".. эхо" "$ row ['asset']." "; – Fishy

0

Если я читаю это правильно result77

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

$ всегда будет приводить либо 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... 

} 

Вне время цикла, запустить эту линию (это делает предположение, что 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)) 
+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 для backgroun.color строки или ячейки. Лучше вызвать класс из инструкции, связанной с PHP.