[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Закрашивание
SeryiVolk
Всем привет.
Собственно вопрос:

есть вывод данных после определенного запроса -

PHP
echo "<table border=1><tr><td>Номер</td><td>Имя</td><td>Фам</td></tr>";

do
{
echo 
"<tr>";
echo 
"<td>";
echo  
$myrow['IDNUMBER'];
echo 
"</td>";
echo 
"<td>";
echo  
$myrow['FIRSTNAME'];
echo 
"</td>";
echo 
"<td>";
echo  
$myrow['LASTNAME'];
echo 
"</td>";
echo 
"</tr>";
}
while (
$myrow ibase_fetch_assoc($query));


необходимо закрасить строки ( <td> например) по критериям :
например все FIRSTNAME которые начинаются на А - красные, на Б -зеленые и т.д.

возможно ли это?



Спустя 15 минут, 58 секунд (1.09.2009 - 09:21) sergeiss написал(а):
Элементарно!

Выставляешь для каждой строки свой класс, а в классах прописываешь нужные параметры цвета.

И еще - забудь про "поповщину"!!!
Цикл
PHP
do
{
...
} while(...);

в данном случае надо (без вариантов!!!!!!!!) заменить на цикл
PHP
while(...)
{
...
}

Спустя 21 минута, 24 секунды (1.09.2009 - 09:42) Семён написал(а):
sergeiss - ну на счёт do - while я бы возразил.
Код
Кому что:

* while - loops through a block of code while a specified condition is true
   * do...while - loops through a block of code once, and then repeats the loop as long as a specified condition is true
   * for - loops through a block of code a specified number of times
   * foreach - loops through a block of code for each element in an array

Спустя 15 минут, 2 секунды (1.09.2009 - 09:57) sergeiss написал(а):
Цитата (Семён @ 1.09.2009 - 10:42)
sergeiss - ну на счёт do - while я бы возразил.


Семён - в данном случае цикл do-while однозначно вредит.
Во-первых, для прочтения первой строки надо читать ее вне цикл (до его начала).
Во-вторых, если данных нету (ни одной строки), то вообще будет хрень несустветная (точнее, ошибка на пустом месте).

В случае же цикла while прочтение данных и запись их в массив производятся только в одном месте. И в случае отсутствия данных цикл будет просто пропущен.

Этого достаточно для доказательства моего утверждения? smile.gif

Спустя 1 час, 13 минут, 30 секунд (1.09.2009 - 11:10) SeryiVolk написал(а):
ок
PHP
while(...)
{
...
}


это я сделаю .

Элементарно!

Выставляешь для каждой строки свой класс, а в классах прописываешь нужные параметры цвета.

нельзя ли пример хотя бы...?
а то для меня это не совсем элементарно huh.gif


PHP
while ($myrow ibase_fetch_assoc($query))
{
echo 
"<tr>";
echo 
"<td>";
echo  
$myrow['IDNUMBER'];
echo 
"</td>";
echo 
"<td>";
echo  
$myrow['FIRSTNAME'];
echo 
"</td>";
echo 
"<td>";
echo  
$myrow['LASTNAME'];
echo 
"</td>";
echo 
"</tr>";
}


как тут вставить свой класс для каждой строки ?


Спустя 19 минут, 2 секунды (1.09.2009 - 11:30) sergeiss написал(а):
HTML
<td class="class_red_color">info1</td>
<td class="class_green_color">info2</td>

и так далее.

А вообще, поищи инфо под названием CSS (Cascading Style Sheet). Это оттуда. Потому что иначе у тебя появится вопрос (должен был уже появиться smile.gif) "как сделать эти классы"

Спустя 27 минут, 9 секунд (1.09.2009 - 11:57) SeryiVolk написал(а):
придется заново наверное ))

как задавать тэдешкам стили я знаю,
а вопрос мой в том как закрасить именно те TD которые отвечают требованиям -

FIRSTNAME которые начинаются на А - красные, на Б -зеленые и т.д.

Спустя 20 минут, 4 секунды (1.09.2009 - 12:17) sergeiss написал(а):
Вариантов много smile.gif

Один из них - сделать функцию, которая будет возвращать название класса в зависимости от буквы.
Например,
PHP
function get_class$fname )
{
  
// тут пишем код, который вернет 'class_1', если передана буква 'а' или 'А', 'class_2', если первая буква 'б' или 'Б', и так далее.
  // как сделать код - подумай сам
}

// используем функцию
echo '<td class="'.get_class$myrow['FIRSTNAME']{0} ).'">';

Спустя 35 минут, 5 секунд (1.09.2009 - 12:52) SeryiVolk написал(а):
спасибо sergeiss, попробую разобраться smile.gif


Спустя 4 минуты, 50 секунд (1.09.2009 - 12:57) FatCat написал(а):
sergeiss
Мне кажется, у него затык на более простом. Как определить первую букву? Очень просто:
PHP
$first = substr($myrow['FIRSTNAME'],0,1);

А лучше перестраховаться от начальных пробелов:
PHP
$first = substr(trim($myrow['FIRSTNAME']),0,1);

Спустя 9 минут, 9 секунд (1.09.2009 - 13:06) sergeiss написал(а):
FatCat - затык у него я так и не понял до конца, на чем smile.gif

А первую букву можно определить чисто языковой возможностью. Собственно говоря, я сразу же и написал: $myrow['FIRSTNAME']{0} - взять первый символ из строки. Единственное, чего тут нету - это защиты от пробелов. О них я просто не подумал smile.gif

Спустя 4 минуты, 19 секунд (1.09.2009 - 13:10) SeryiVolk написал(а):
если вариантов много - может есть какой попроще?

Спустя 57 минут, 2 секунды (1.09.2009 - 14:07) SeryiVolk написал(а):
Цитата (sergeiss @ 1.09.2009 - 09:17)

PHP
function get_class$fname )
{
  
// тут пишем код, который вернет 'class_1', если передана буква 'а' или 'А', 'class_2', если первая буква 'б' или 'Б', и так далее.
  // как сделать код - подумай сам
}

не получается чет . sad.gif

может накидаете если не трудно ?

или другой вариант ?

Спустя 3 минуты, 2 секунды (1.09.2009 - 14:10) sergeiss написал(а):
Цитата (SeryiVolk @ 1.09.2009 - 15:07)
не получается чет

А КАК именно пробовал? Покажи код, вместе подумаем.

PS. Я не пишу код по своим принципиальным соображениям smile.gif Вот когда человек сам подумал, у него есть свои наработки - вот тогда уже могу помочь ему. В том числе и кодом (в разумных пределах). Так что - код в студию!

Спустя 17 часов, 56 минут, 23 секунды (2.09.2009 - 08:07) Guest написал(а):
я не знаю как использовать данную функцию (

если пытаюсь всавить в код:
PHP
function get_class$fname )
{  }


то выдает ошибку - Cannot redeclare get_class()

Спустя 52 минуты, 37 секунд (2.09.2009 - 08:59) SeryiVolk написал(а):
это я выше как гость ответил smile.gif


Спустя 21 минута, 50 секунд (2.09.2009 - 09:21) Michael написал(а):
Название функции поменяй например на get_classmy, sergeiss для примера привел - такая есть стандартная.

Спустя 7 минут, 55 секунд (2.09.2009 - 09:29) sergeiss написал(а):
Цитата (Michael @ 2.09.2009 - 10:21)
Название функции поменяй например на get_classmy, sergeiss для примера привел - такая есть стандартная.

"На всяку старуху бывает проруха" smile.gif Погорячился я мальца, бывает... В следующий раз придется в хэлп лезть, проверять на наличие таких совпадений.

Спустя 1 час, 44 минуты, 36 секунд (2.09.2009 - 11:14) SeryiVolk написал(а):
делал так
PHP
function get_classmy$fname )
{
if (
$fname 'A') {$fname 'smtd_p';}
}


может все таки набросаете?

я хотя бы пойму в каком направлении двигаться

Спустя 46 минут, 50 секунд (2.09.2009 - 12:00) sergeiss написал(а):
Сравнение в ПХП делается двумя или тремя знаками равно!!!
У тебя должно быть где-то так (заодно и регистр учтем, и скобки фигурные для одного оператора не нужно):
PHP
if ( strtolower($fname) == 'а'$fname 'smtd_p';

Спустя 39 минут, 43 секунды (2.09.2009 - 12:40) SeryiVolk написал(а):
так -
PHP
function get_classmy$fname )
{
if ( 
strtolower($fname) == 'D'$fname 'smtd_p';
}
echo 
'<td class="'.get_classmy$myrow2['FIRSTNAME']{0} ).'">';


ничего не выдает.

пробовал так -
PHP
function get_classmy$fname )
{
if ( 
strtolower($fname) == 'D'$fname 'smtd_p';
}
echo 
"<td class='$fname'>";
echo 
$myrow2['FIRSTNAME']{0};
echo 
"</td>";

тоже не получается

Спустя 3 минуты, 34 секунды (2.09.2009 - 12:44) sergeiss написал(а):
Ну дык... Я сразу не написал, думал, ты догадаешься, что надо значение из функции вернуть smile.gif

В первом из 2-х последних вариантов напиши внутри функции, перед закрывающей скобкой
Код
return $fname;

Спустя 33 минуты, 36 секунд (2.09.2009 - 13:17) SeryiVolk написал(а):
PHP
function get_classmy$fname )
{
if ( 
strtolower($fname) == 'D'$fname 'smtd_p';
return 
$fname;
}
echo 
'<td class="'.get_classmy$myrow2['FIRSTNAME']{0} ).'">';
echo 
"</td>";

тоже ничего (

sergeiss у меня мозг закипит скоро huh.gif

Спустя 27 минут, 53 секунды (2.09.2009 - 13:45) sergeiss написал(а):
Цитата (SeryiVolk @ 2.09.2009 - 14:17)
function get_classmy( $fname )
{
if ( strtolower($fname) == 'D') $fname = 'smtd_p';
return $fname;
}
echo '<td class="'.get_classmy( $myrow2['FIRSTNAME']{0} ).'">';
echo "</td>";



Ну а если задуматься, хотя бы на секунду, зачем я ввел функцию strtolower? Что она должна возвратить, и с чем ты сравниваешь?????????????

Спустя 46 минут, 43 секунды (2.09.2009 - 14:32) SeryiVolk написал(а):
Цитата (sergeiss @ 2.09.2009 - 10:45)
Цитата (SeryiVolk @ 2.09.2009 - 14:17)
function get_classmy( $fname )
{
if ( strtolower($fname) == 'D') $fname = 'smtd_p';
return $fname;
}
echo '<td class="'.get_classmy( $myrow2['FIRSTNAME']{0} ).'">';
echo "</td>";



Ну а если задуматься, хотя бы на секунду, зачем я ввел функцию strtolower? Что она должна возвратить, и с чем ты сравниваешь?????????????

функция переводит символы строки в нижний регистр.

теперь так -
PHP
function get_classmy$fname )
{
if ( 
strtolower($fname) == 'd'$fname 'smtd_r';
return 
$fname;
}
while(
$myrow2 ibase_fetch_assoc($query2))
{
echo 
'<td class="'.get_classmy$myrow2['FIRSTNAME']{0} ).'">';
echo 
"</td>";
}


ячейка закрашивается ))) ура!

но вот данные не выводятся, вижу теперь пустые ячейки
и некоторые красные (согласно стилю)

Спустя 12 минут, 32 секунды (2.09.2009 - 14:44) sergeiss написал(а):
Цитата (SeryiVolk @ 2.09.2009 - 15:32)
но вот данные не выводятся, вижу теперь пустые ячейки

И это правильно! smile.gif Потому что ты пока ничего и не выводишь в ячейки, а только стили устанавливаешь.
Сделай еще вывод данных, можно (чисто для наглядности кода) сделать еще одно echo между существующими двумя. И там уже вывести нужные данные.

PS. Но вообще поздравляю! wink.gif Сам видишь - только начал думать, и у тебя стало получаться лучше smile.gif tongue.gif

Спустя 21 минута, 48 секунд (2.09.2009 - 15:06) SeryiVolk написал(а):
sergeiss - спасибо просто огромное smile.gif

все работает, вот что получилось (может кому понадобится) :
PHP
//тут идет запрос с БД и потом уже вывод
echo "<table border=1>
<tr><td>Контракт</td><td>Имя</td><td>Фамилия</td></tr>"
;

function 
get_classmy$fname )
{
// 'smtd_r' - класс из CSS
if ( strtolower($fname) == 'a'$fname 'smtd_r';
return 
$fname;
}
//в моем случае БД Interbase
while($myrow2 ibase_fetch_assoc($query2))
{
$i2++;
echo 
"<tr>";
// все ячейки с IDNUMBER которые начинаются на "а" принимают стиль
echo '<td class="'.get_classmy$myrow2['IDNUMBER']{0} ).'">'.$myrow2['IDNUMBER'].'</td>';
echo 
'<td>';
echo 
$myrow2['FIRSTNAME'];
echo 
"</td>";
echo 
'<td>';
echo 
$myrow2['LASTNAME'];
echo 
"</td>";
echo 
"</tr>";
}
echo 
"Всего записей - ".$i2.

Спустя 8 минут, 28 секунд (2.09.2009 - 15:15) sergeiss написал(а):
Хм... А как это ты - закрываешь таблицу в самом верху, а потом ее выводишь???

Ну, и каждую ячейку лучше формировать в одной строке (в данном случае). Т.е. вместо
PHP
echo '<td class="'.get_classmy$myrow2['IDNUMBER']{0} ).'">';
echo 
$myrow2['IDNUMBER'];
echo 
"</td>";

лучше (красивее) будет написать
PHP
echo '<td class="'.get_classmy$myrow2['IDNUMBER']{0} ).'">'.$myrow2['IDNUMBER'].'</td>';

Спустя 1 час, 14 минут, 26 секунд (2.09.2009 - 16:29) SeryiVolk написал(а):
исправил smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.