За последние 24 часа нас посетили 17633 программиста и 1628 роботов. Сейчас ищут 1539 программистов ...

Помогите раскрасить пустые клетки таблицы!

Тема в разделе "HTML и CSS", создана пользователем init01, 31 мар 2010.

  1. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Может я конечно не в ту ветку зашла, тогда прогоните меня по правильному пути.

    В общем формирую таблицу я следующим образом:
    Код (Text):
    1. if ($_POST['selectab'])
    2.  {
    3. echo '<table border="1"><tr><td><b>PROJECT</b></td><td><b>DATA1</b></td><td><b>DATA2</b></td><td><b>DATA3</b></td><td><b>DATA4</b></td><td><b>TOTAL</b></td></tr>';
    4. foreach ($result as $row)
    5.    {
    6. echo '<tr><td>' . $row['PROJECT'] . '</td><td align="right">' . $row['DATA1'] . '</td><td align="right">' . $row['DATA2'] . '</td><td align="right">' . $row['DATA3'] . '</td><td align="right">' . $row['DATA4'] . '</td><td align="right">' . $row['TOTAL'] .'</td></tr>' ;
    7.    }
    8. echo '</table>';
    9.  }
    10. else
    Все данные берутся из базы sqlite. Туда данные я загоняю в RedHat обычным скриптом.

    Я в php-то ещё новичок, а уж в стилях вообще туга на оба уха.
    Есть 2 проблемы:

    Основная: Если в столбце DATA1 (данные по каждому проекту хранятся в 4 директориях) попадаются пустые клетки, то эти клетки надо помечать другим цветом. Если такая проверка или триггер или стиль уж слишком сложен, то задачу можно упростить - просто раскрашивать ВСЕ пустые клетки одним цветом, чтобы наглядно было видно, что в этих директориях данных нет.

    Дополнительная: Я в базу данных загоняю размеры директорий в килобайтах. Как их выводить в мегабайтах? (точность не важна - можно хоть округлять, можно хоть обрезать последние три цифры, но бывают директории менее мегабайта) И как разбивать число на разряды по тысячам? Ибо есть директории размером в терабайты, чтобы в таблице было число не 2345678, а 2 345 678.
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    ну? и в чем сложность?

    PHP:
    1. <?php
    2. if (!$row['DATA1']) {
    3.     $class = 'red';
    4. } else {
    5.     $class = 'blue;
    6. }
    7. echo '<td class="' . $class . '">' . $row['DATA1'] . '</td>';
    В подключаемом css надо прописать
    [css].red {
    background-color:red;
    }
    .blue {
    background-color:blue;
    }[/css]
     
  3. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Ну и ничего не раскрашивается.

    Я стиль прямо в файл внедрила:
    [css]<style type="text/css">
    .red {
    background-color:#FF0000;
    }
    .blue {
    background-color:#0000FF;
    }
    </style>[/css]

    А вот какое php вышло:
    PHP:
    1. if ($_POST['selectab'])
    2.  {
    3. echo '<table border="1"><tr><td><b>PROJECT</b></td><td><b>DATA1</b></td><td><b>DATA2</b></td><td><b>DATA3</b></td><td><b>DATA4</b></td><td><b>TOTAL</b></td></tr>';
    4. foreach ($result as $row)
    5.    {
    6. if (!$row['DATA1']) {
    7. $class = 'red';
    8. } else {
    9. $class = 'blue';
    10. }
    11. echo '<tr><td>' . $row['PROJECT'] . '</td><td align="right">' . $row['DATA1'] . '</td><td align="right">' . $row['DATA2'] . '</td><td align="right">' . $row['DATA3'] . '</td><td align="right">' . $row['DATA4'] . '</td><td align="right">' . $row['TOTAL'] .'</td></tr>' ;
    12.    }
    13. echo '</table>';
    14.  }
    15. else
    Чего-то я не в то место своими кривыми ручонками вставила что ли?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Где и у какой ячейки таблицы устанавливается атрибут class?
    Пересмотрите еще раз мой пример.
     
  5. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Пересматриваю.

    Вы пишете if (!$row['DATA1'])
    я так понимаю это означает, что если в ячейке DATA1 есть значение,
    то
    устанавливаем $class = 'red' в красный цвет,
    иначе
    $class = 'blue' в синий цвет.

    Ставлю я естественно это после того как начался цикл,
    но
    до вывода данных.

    Может вся эта конструкция не понимает, что я делаю таблицу?
    Может для неё echo '<tr><td>' . $row['PROJECT'] . '</td><td align="right">' . $row['DATA1'] . - просто вывод символов и откуда ей знать где там бэкграунд?
     
  6. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Тупая я тупая! Или невнимательная.
    Спасибо! Окрасила.

    А с форматами чисел не подскажите, чтоб не создавать ещё одну тему?
    Или создавать?
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  8. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    И так ... что же у меня не выходит?

    number_format($row['DATA1'], $thousands_sep=" ") работает, разделяет тысячи
    НО
    только запятыми.
    Хоть я ставлю $thousands_sep=" ", хоть$thousands_sep=",", хоть могу $thousands_sep="ля-ля-ля" поставить - всё равно тысячи разделяются только запятыми.

    Деление я так понимаю надо делать через gmp.
    Пишу следующее:
    PHP:
    1. foreach ($result as $row)
    2.    {
    3. $data1=gmp_div_q($row['DATA1'], "1024" [, int round]);
    4. echo '<tr><td>' . $row['PROJECT'] . '</td><td class="' . $class . '" align="right">' . gmp[strval($data1)] . '</td><td align="right">' . $row['DATA2'] . '</td><td align="right">' . $row['DATA3'] . '</td><td align="right">' . $row['DATA4'] . '</td><td align="right">' . $row['TOTAL'] .'</td></tr>' ;
    5.    }
    6. echo '</table>';
    7.  }
    8. else
    Выдаётся ошибка:
    [Thu Apr 01 12:24:44 2010] [error] [client 193.200.56.73] PHP Parse error: syntax error, unexpected '[' in C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\oneday.php on line 225, referer: http://init0/oneday.php
    И ничего не рисует.
    Где у меня что со скобками? Не вижу.

    Хорошо! Убираем [, int round] - раз проблема в этой строке. Теперь жалуется на следующую строку:
    [Thu Apr 01 12:28:18 2010] [error] [client 193.200.56.73] PHP Parse error: syntax error, unexpected '[', expecting ',' or ';' in C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\oneday.php on line 226, referer: http://init0/oneday.php
    И ничего не рисует.

    Заменяем gmp[strval($data1)] на просто $data1 и получаем:
    [Thu Apr 01 12:30:13 2010] [error] [client 193.200.56.73] PHP Notice: Undefined variable: row in C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\oneday.php on line 217, referer: http://init0/oneday.php
    [Thu Apr 01 12:30:13 2010] [error] [client 193.200.56.73] PHP Fatal error: Call to undefined function gmp_div_q() in C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\oneday.php on line 225, referer: http://init0/oneday.php

    но в этот раз рисуется заголовок, хотя на его прорисовку (217 строка) как раз идёт жалоба:
    echo '<b>'. $row['DATA'] .'</b><br><table border="1"><tr><td><b>PROJECT</b></td><td><b>DATA1</b></td><td><b>DATA2</b></td><td><b>DATA3</b></td><td><b>DATA4</b></td><td><b>TOTAL</b></td></tr>';

    С функцией gmp_div тоже самое.

    В общем чего-то не делится у меня. Может вовсе не gmp надо применять?
     
  9. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Так, поставила number_format($row['DATA1'], 0, ",", $thousands_sep=" ") и всё получилось, но считаю, что это извращение - мне не нужны те два параметра, а вот тут:
    http://www.spravkaweb.ru/php/datafun/math/system
    написано:
    "Эта функция форматирует число с плавающей точкой с разделением его на триады с указанной точностью. Она может быть вызвана с двумя или четырьмя аргументами, но не с тремя!"
    Что-то про вариант с двумя аргументами они преврали.
     
  10. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Я тупаяяяяяяяя!
    НО
    $big1=gmp_div_q($row['BIGSAN1'], "1024" , GMP_ROUND_PLUSINF)
    и
    $big1=gmp_div_q($row['BIGSAN1'], "1024" , int GMP_ROUND_PLUSINF)
    всё равно:
    [Thu Apr 01 12:57:48 2010] [error] [client 193.200.56.73] PHP Parse error: syntax error, unexpected T_ECHO in C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\oneday.php on line 226, referer: http://init0/oneday.php
     
  11. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    В общем с форматом команд разобралась.
    И даже запускаю стандартные примеры:
    Call to undefined function gmp_div_q()
    Call to undefined function gmp_divexact()
    Видимо gmp надо где-то включать.
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    видимо надо.
    А зачем оно?

    Почему не пользоваться стандартным делением?
    c = a/b
     
  13. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Да это просто сказка какая-то!
    Огромное спасибо!
    И деление сделала и сумму в конце таблицы.
    Но жадность фраера сгубит - теперь захотелось округление. Хотя ... оно мне надо?
    Но думаю для порядку надо бы научиться округлению и пользованию gmp.
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  15. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Есть то оно есть, но пока разберёшься как нужная функция должна называться.
    Сначала на round насела, но пока поняла, что PHP_ROUND_HALF_UP только для цифры 5 катит - полдня прошло.
    Применила ceil.
    Спасибо!
     
  16. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Тут без вариантов :) или делаешь сам, или поручаешь другому :D
     
  17. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Так вот мне и поручают. А я ж не программистка, а сисадмин, откуда ж мне все тонкости знать?
     
  18. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Хороший вопрос :) Но я тоже не программист :D

    Так что было бы желание :)