С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.06.2019
Сообщений: 5

Использование БД MySQL в PHP

09.12.2022, 01:00. Показов 543. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
№ п/п Дата Анализ крови Ед.измерения Норма min Норма max Результат
1 2022-01-04 СОЭ мм/час 0.00 20.00 68

Вверху вместо таблицы показываю одну строку из нее. Из БД вывел в таблицу PHP данные результата Общего анализа крови своего. Всего там 24 строки.
По таблице. Анализ крови в строке показывает СОЭ. Нормальное значение СОЭ от 0 до 20. У меня СОЭ 68.
Вопрос. Как сделать, чтобы при Результате > Норма max сам результат 68 высвечивался красным цветом. Ну и при Результат < Норма min результат сам высвечивался бы желтым цветом.
Помогите, пожалуйста, подскажите, как это сделать.
Мне уже за 70, по анализам видно, что болен, так что окажите помощь. Мне это для наглядности нужно, чтобы не копаться в куче анализов, выискивая превышение-понижение.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2022, 01:00
Ответы с готовыми решениями:

Некорректное использование переменной PHP в запросе к базе данных MySQL
Я ещё совсем зелёный в веб-программировании, на днях решил сделать сайт тестирования знаний по ПДД. Вроде бы всё неплохо получалось, создал...

Использование Mysql и php ООП
Здравствуйте всем. Сегодня я решил изучить ООП в php. Вроде ничего непонятного нет. Поэтому решил написать мини сайтик. Если не сложно...

Использование Mysql blob + php
Здравствуйте. Задача такая: в одном столбце хранить некоторый список чисел (id строк из другой таблицы). Хотел сначала реализовать запись в...

8
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,397
Записей в блоге: 2
09.12.2022, 07:53
Вариантов куча ...
от проверки на стороне PHP
до впихивания куска разметки в запрос... типа такого
MySQL
1
2
3
4
5
6
SELECT *, 
    IF(`Результат`<`Норма min`, ' class="cYellow"', IF(`Результат`>`Норма max`, ' class="cRed"',  ''))  AS inTd
 
 FROM (SELECT 1  id,  '2022-01-04 ' Дата, 'СОЭ' `Анализ крови`,  'мм/час' `Ед.измерения`, 
    0.00 `Норма min`,
    20.00 `Норма max`, 68 `Результат`) AS some_table;
0
0 / 0 / 0
Регистрация: 13.06.2019
Сообщений: 5
09.12.2022, 11:10  [ТС]
Ft4l, спасибо за оперативный ответ! Извините, с ответом задержусь. Экспериментирую пока над Вашим кодом.
0
0 / 0 / 0
Регистрация: 13.06.2019
Сообщений: 5
09.12.2022, 12:41  [ТС]
Все проверил. Не работает.
Вот код страницы на PHP:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!DOCTYPE html>
<html>
<head>
<title>Анализы крови в КДЛ</title>
<meta charset="utf-8" />
</head>
<body>
 
 
<table bgcolor=#00FFFF border=3 class="cRed">
<thead>
<tr>
<th width=5%>№ п/п</th>
<th width=10%>Дата</th>
<th width=50%>Анализ крови</th>
<th width=7%>Ед.измерения</th>
<th width=8%>Норма min</th>
<th width=10%>Норма max</th>
<th width=10%>Результат</th>
</tr>
</thead>
 
<tbody>
<?php
 
// все работает отлично! кроме выбора цвета
 
$con = new mysqli("localhost","root", "", "kdl");
 
//это ниже не работает
//$execItems = $con->query("SELECT * FROM `oak040122`  IF(`rezultat`< `normamin`, ' class="cYellow"', IF(`rezultat`> `normamax`, ' class="cRed"',  ''))  AS IF_Result ");
 
// это ниже работает всё, кроме установки цвета
 
$execItems = $con->query("SELECT *,
    IF(rezultat > normamax, '<font color=red>rezultat</font>', '<font color=gold>rezultat</font>') AS IF_Result
FROM `oak040122` WHERE id; ");
 
 
/* так не работает
$execItems = $con->query("SELECT *,
CASE
    WHEN rezultat > normamax 
        THEN '<font color=red>".$infoItems['rezultat']."</font>'
    WHEN rezultat < normamin 
        THEN '<font color=gold>".$infoItems['rezultat']."</font>'
        ELSE ".$infoItems['rezultat']."
END AS rezultat
FROM `oak040122` ");
*/
 
while($infoItems = $execItems->fetch_array()){
echo    "<tr>
<td>".$infoItems['id']."</td>
<td>".$infoItems['data']."</td>
<td>".$infoItems['analiz']."</td>
<td>".$infoItems['mera']."</td>
<td>".$infoItems['normamin']."</td>
<td>".$infoItems['normamax']."</td>
<td>".$infoItems['rezultat']."</td>
</tr>
";
 
}
 
 
 
?>
</tbody>
</table>
 
<br><br><br>
 
</body>
</html>
Во вложении фото с экрана самой таблицы в браузере на PHP
Миниатюры
Использование БД MySQL в PHP  
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,878
09.12.2022, 13:26
Неэкранированные двойные кавычки внутри двойных кавычек.

Все же лучше это внутри представления делать.

Добавлено через 8 минут
PHP
1
2
3
4
5
6
function result(array $row)
{
    if ($row['rezultat'] < $row['normamin']) return '<font color=gold>' . $row['rezultat'] . '</font>';
    if ($row['rezultat'] > $row['normamax']) return '<font color=red>' . $row['rezultat'] . '</font>';
    return $row['rezultat'];
}
PHP
1
<td><?= result($row) ?></td>
(В функции представления можно использовать и три параметра: $value, $min, $max.)
0
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,397
Записей в блоге: 2
09.12.2022, 15:36
Лучший ответ Сообщение было отмечено randewy как решение

Решение

Цитата Сообщение от randewy Посмотреть сообщение
Не работает.
Одна из возможных причин это храниение чисел как строк,
из-за чего в БД значения сравниваются как строки...
например если примерно такая структура таблицы:
MySQL
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `oak040122` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` date DEFAULT NULL,
  `analiz` varchar(256),
  `mera` varchar(64),
  `normamin` double,
  `normamax` double,
  `rezultat` double,
  PRIMARY KEY (`id`)
) CHARSET=utf8mb4
то например BETWEEN нормально работает
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?= $title='Анализы крови в КДЛ'  ?></title>
    <style>
html { background:#333; height:100%; padditg 2pt 1ex; }
body { background:#999; border-radius:1ex;
    display:flex; flex-direction: column; min-height:96%;
}
#page{ background:#EEE; flex:1 0 auto; }
header { text-align:right;}
.tab { background:#9EE; border-collapse:collapse; border:double 3pt; width:100%;}
.tab td, .tab th { border:solid 1pt #333; }
.cRed   { background:#E77;}
.cYel   { background:#FE9;}
    </style>
</head>
<body>
<header>
<h2><?= $title ?></h2>
</header>
<div id="page">
<article>
 
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
 
$execItems = NULL;
try {
    $con = new mysqli("localhost","root", "", "kdl");
    $con->set_charset('utf8mb4');
    
    $execItems = $con->query("SELECT *,
    `rezultat` BETWEEN `normamin` AND `normamax` norm
    FROM `oak040122`
    ORDER BY `data` DESC");
    ($execItems->num_rows) || $execItems = NULL;
}
catch( Exception $e ){
    echo '<div class="cRed">', $e->getMessage() ,"<div>\n";
}
 
if ($execItems) {
?>
 
<table class="tab">
<col></col><col></col><col width="50%"></col>
<thead>
<tr>
<th>№ п/п</th>
<th>Дата</th>
<th>Анализ крови</th>
<th>Ед.измерения</th>
<th>Норма min</th>
<th>Норма max</th>
<th>Результат</th>
</tr>
</thead>
 
<tbody>
<?php
    while ($row = $execItems->fetch_row()){
        list($res,$norm) = array_splice($row,-2);
        //echo '<xmp>',var_export([$row,$res,$norm],1), "\n</xmp>\n";
        echo '<tr><td>', implode('</td><td>', $row), 
            '</td><td',
            ($norm ? '': ' class="'. (end($row)< $res ? 'cRed"':'cYel"')).'>',
            $res, "</td></tr>\n";
    }
 
?>
 
</tbody>
</table>
<?php
}
?>
</article>
</div>
<footer>
<?= $title ?>
</footer>
</body></html>


Со строками не работает
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select '5' between '0' and '10';
+--------------------------+
| '5' between '0' and '10' |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)
 
mysql> select 5 between 0 and 10;
+--------------------+
| 5 between 0 and 10 |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)
0
0 / 0 / 0
Регистрация: 13.06.2019
Сообщений: 5
09.12.2022, 16:46  [ТС]
estik, спасибо за ответ! Хотелось Ваш короткий ответ использовать, но не получилось. Я, кажется, догадываюсь, почему, но не стал экспериментировать.
Ft4l, глубоко благодарю Вас! Все отлично сработало! Правда, теперь во всех таблицах, а их много, придется данные менять. Ну да ничего страшного! Поменяю!
Единственный вопрос к Вам: значения id поменялись, идут не по порядку. Хотелось бы, чтобы они шли по порядку, по мере возрастания (для того, чтобы соответствовали значения, результат анализа лабораторным значениям, то есть за СОЭ шли бы эритроциты и etc). Может, я что-то с id намудрил, не так какие-то значения выставил?

Добавлено через 10 минут
Всё! Спасибо! Сам сделал, изменил сортировку!
Все большой спасибо! Вы мне очень помогли!
Желаю всем здоровья, друзья!
0
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,397
Записей в блоге: 2
09.12.2022, 17:05
Цитата Сообщение от randewy Посмотреть сообщение
значения id поменялись, идут не по порядку.
если в моём запросе, то там
Цитата Сообщение от ft4l Посмотреть сообщение
ORDER BY `data` DESC
Сортировка обычно как-бы желательно должна присутствовать.
например если химичить что-то с этими id, то без ORDER BY `id` можно получить не в том порядке.
Но можно наверно и убрать совсем,
... как мне кажется, должно быть по порядку добавления, если ничего в таблице не перетасовывалось.

Добавлено через 10 минут
Цитата Сообщение от randewy Посмотреть сообщение
сделал,
без изменения типа полей на стороне PHP например так
PHP
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
 
$execItems = NULL;
try {
    $con = new mysqli("localhost","root", "", "kdl");
    $con->set_charset('utf8mb4');
    
    $execItems = $con->query("SELECT * FROM `oak040122` ORDER BY `id`");
    ($execItems->num_rows) || $execItems = NULL;
}
catch( Exception $e ){
    echo '<div class="cRed">', $e->getMessage() ,"<div>\n";
}
 
if ($execItems) {
?>
 
<table class="tab">
<col></col><col></col><col width="50%"></col>
<thead>
<tr>
<th>№ п/п</th>
<th>Дата</th>
<th>Анализ крови</th>
<th>Ед.измерения</th>
<th>Норма min</th>
<th>Норма max</th>
<th>Результат</th>
</tr>
</thead>
 
<tbody>
<?php
    while ($row = $execItems->fetch_row()){
        $res = array_pop($row);
        //echo '<xmp>',var_export([$row,$res,$norm],1), "\n</xmp>\n";
        echo '<tr><td>', implode('</td><td>', $row), '</td><td';
        if ($res > end($row))       echo ' class="cRed"';
        elseif ($res < prev($row))  echo ' class="cYel"';
        echo ">$res</td></tr>\n";
    }
Но тоже с моими привычками использовать простые массивы
,) и со всякими pos() next(), prev(), end()
0
0 / 0 / 0
Регистрация: 13.06.2019
Сообщений: 5
09.12.2022, 17:25  [ТС]
Странно! Проверил уже 4 таблицы, не меняя ничего в их структуре, они все всё показывают правильно. Как будто все свои значения сами изменили. Ft4l, ещё раз Вам огромное спасибо!

Добавлено через 18 минут
Нет. Последний код попробовал, превышения цветом не выделяются. Буду использовать первый код!
Спасибо модератору или администратору, что поправили мои ошибки в подаче материала!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2022, 17:25
Помогаю со студенческими работами здесь

Использование php на одном и mysql на другом серверах
Кто нибудь пробовал данную связку, на сколько эффективна?

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\php\mysql.php on line 16
Не могу подключиться к базе...устал все перепроверять переписывать и пересоздавать... Я недавно тока занялся php начал изучать курс...

Что лучше - PHP и MySQL или PHP и MySQL с использованием ООП и паттерна MVC?
знание в веб программирование можна сказать равно нулю... приходилось делать программы на языке вба. хачут делать праграми для...

Как изучать mysql и php? Сначала php, а потом mysql или наоборот, или сразу?
Хочу изучить mysql и php. Как их изучать? Сначала php, а потом mysql или наоборот, или сразу и то и то? Посоветуйте хорошую литературу.

Подключение к БД MySQL. Xamarin Studio: C#-PHP-MySQL
Здравствуйте! Необходимо реализовать подключение к удаленной БД MySQL. Пишу Android-приложение в Xamarin Studio на C#. Хочу сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru