Нужна помощь для изменения цвета таблицы в PHP коде с использованием SQL значений запроса с диапазоном номеров - PullRequest
1 голос
/ 06 января 2020

Это часть кода, который у меня есть в моем скрипте. Я пытался заставить фон менять цвет в зависимости от значений и не могу заставить его правильно читать массивы. Размещение условий вне while или внутри while возвращает те же результаты при печати. ​​

Если значение равно 100, цвет должен быть КРАСНЫМ, если значение выше 49, цвет будет желтым, если значение равно 0 до 49, цвет будет зеленым

Буду признателен, если кто-то обнаружит, как BILLED_TO_DATE_PERCENTAGE будет меняться в зависимости от диапазона номеров, когда SQL чтение извлекает данные.

$counter = 1;

while($row = mysqli_fetch_array($result))
  {
    if($BILLED_TO_DATE_PERCENTAGE = 100)
        {
        $tdStyle='background-color:red;';
        } 
    else 
        {
        if($BILLED_TO_DATE_PERCENTAGE > 79)
            {
            $tdStyle='background-color:yellow;';
            }
        else
            {
            $tdStyle='background-color:green;';
            }
        }

    echo "<tr>"; 
    echo "<td bgcolor=#001F25>" . "<b>" . "<font color=WHITE>" . $counter . "</font>" . "</b>" . "</td>";
    echo "<td bgcolor=#00353F>" . "<b>" . "<font color=WHITE>" . $row['NUMBER'] . "</font>" . "</td>";
    echo "<td bgcolor=#00353F>" . "<b>" . "<font color=WHITE>" . $row['PROJECT'] . "</font>" . "</td>"; 
    echo "<td style=\"$tdStyle\">" . "<b>" . "<i>" . $row['BILLED_TO_DATE_PERCENTAGE'] . "</i>" . "</b>" . "</td>";
    echo "</tr>"; 
    $counter++; //increment counter by 1 on every pass
  }
echo "</table>";

Ответы [ 3 ]

0 голосов
/ 06 января 2020

Может быть лучше создать функцию, которая сделает это просто, чтобы код был более организованным. И будьте осторожны с "=", в вашем коде первое условие, которое вы использовали только один "=", для сравнения вам нужно использовать "==":

function Changecolor($percentage){
    if ($percentage == 100) {
            return 'background-color:red;';
    } else {
       if ($percentage > 49) {
               return 'background-color:yellow;';
        } else {
           return 'background-color:green;';
       } 
     }
 }    

 echo "<table>";
 while($row = mysqli_fetch_array($result))
      {
        echo "<tr>"; 
        echo "<td bgcolor=#001F25>" . "<b>" . "<font color=WHITE>" . $counter . "</font>" . "</b>" . "</td>";
        echo "<td bgcolor=#00353F>" . "<b>" . "<font color=WHITE>" . $row['NUMBER'] . "</font>" . "</td>";
        echo "<td bgcolor=#00353F>" . "<b>" . "<font color=WHITE>" . $row['PROJECT'] . "</font>" . "</td>"; 
        echo "<td style=".Changecolor($row['BILLED_TO_DATE_PERCENTAGE']).">" . "<b>" . "<i>" . $row['BILLED_TO_DATE_PERCENTAGE'] . "</i>" . "</b>" . "</td>";
        echo "</tr>"; 
        $counter++; //increment counter by 1 on every pass
      }
 echo "</table>";
0 голосов
/ 06 января 2020

Там, вероятно, есть опечатка:

 if($BILLED_TO_DATE_PERCENTAGE = 100)

должно быть

 if ($row['BILLED_TO_DATE_PERCENTAGE'] == 100)

Используйте эту форму, чтобы избежать той же ошибки снова:

 if (100 == $row['BILLED_TO_DATE_PERCENTAGE'])

Для цветового картирования, я думаю, вы могли бы легче использовать массив. Это позволит легче поддерживать изменения в требованиях к цвету.

$colors = array(
    100 => '#ff0000',
    60  => '#ff77aa',
    0   => '#0000ff',
);

foreach ($colors as $limit => $color) {
    if ($row['FIELD'] >= $limit) {
        break;
    }
}
// Now $color will contain the desired color
// NOTICE: even if the last value is BELOW the last limit, $color
// will still contain the last color value. If this is undesired,
// add something like -99999 => 'last color' as the last line.
// The $color array MUST be kept sorted in descending key order.

Далеко вниз по этому пути вам может быть полезно записать эти цвета в файл .INI, используя функции PHP для прочитайте ini-файлы:

[colors]
; You can use CSS codes if this goes into HTML.
0  = black
20 = green
60 = yellow
80 = red
100 = #c00000

Таким образом, у вас будет что-то вроде

$CONFIG = parse_ini_file('config.ini', true);
krsort($CONFIG['colors']);

, которое (возможно!) может даже «поддерживаться» конечным пользователем (пользователями).

0 голосов
/ 06 января 2020

Скорее всего, столбец в вашей базе данных не весь в верхнем регистре. Вы также не извлекаете это значение из строки после ее извлечения из базы данных.

$counter = 1;

while($row = mysqli_fetch_array($result)) {

    $percentage = $row['BILLED_TO_DATE_PERCENTAGE'];
    if($percentage == 100) {
        $tdStyle='background-color:red;';
    } elseif ($percentage > 49) {
        $tdStyle='background-color:yellow;';
   } else {
        $tdStyle='background-color:green;';
   }
   echo "<tr>"; 
   echo "<td bgcolor=#001F25>" . "<b>" . "<font color=WHITE>" . $counter . "</font>" . "</b>" . "</td>";
   echo "<td bgcolor=#00353F>" . "<b>" . "<font color=WHITE>" . $row['NUMBER'] . "</font>" . "</td>";
   echo "<td bgcolor=#00353F>" . "<b>" . "<font color=WHITE>" . $row['PROJECT'] . "</font>" . "</td>"; 
   echo "<td style=\"$tdStyle\">" . "<b>" . "<i>" . $row['BILLED_TO_DATE_PERCENTAGE'] . "</i>" . "</b>" . "</td>";
   echo "</tr>"; 
   $counter++; //increment counter by 1 on every pass
}
echo "</table>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...