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

Объединение кода

17.05.2021, 16:05. Показов 1566. Ответов 10

Студворк — интернет-сервис помощи студентам
Товарищи, не могу понять как объединить 2 кода

Первый код:
PHP
1
2
3
4
5
$res = mysqli_query($mysqli, 'SELECT DATEDIFF(Date_St, CURRENT_DATE) AS days FROM lic');
    if ($res) while($row = mysqli_fetch_row( $res )) {
        if ($row[0] < 0){ echo "ВНИМАНИЕ! Срок лицензии истек, продлите её";}
        echo '<pre>', var_export($row,1), "</pre>\n";
    }
Второй код:
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
<?php
    $result = mysqli_query($mysqli,'SELECT * FROM `equip` LEFT JOIN `lic` ON equip.ID_Equip=ID_Lic');
    
    while($vibor =  mysqli_fetch_assoc($result))
    {
        $posts[] = $vibor;
    }
    
    $vibor =  mysqli_fetch_assoc($result);
    
    foreach($posts as $vibor)
    {
        ?>
 
<table class="proba">
    <tbody>
        <tr>
            <td><?php echo $vibor['ID_Equip']; ?></td>
            <td><?php echo $vibor['Name_Equip']; ?></td>
            <td><?php echo $vibor['Сheck_interval_Equip']; ?></td>
            <td><?php echo $vibor['Date_repair_Equip']; ?></td>
            <td><?php echo $vibor['Date_rel_Equip']; ?></td>
            <td><?php echo $vibor['ID_Lic']; ?></td>
            <td><?php echo $vibor['Date_Expiry']; ?></td>
            <td><?php echo $vibor['Date_St']; ?></td>
        </tr>
    </tbody>
</table>
 
<?php
    }
?>
То есть второй код выводит информацию из бд в виде таблицы, а я хочу что бы он сверху каждой таблицы выводил разность дат(первый код), как их объединить что бы он к каждой таблицы выводил свое значение? Просто по отдельности все работает)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2021, 16:05
Ответы с готовыми решениями:

Объединение py кода и c++ кода в один exe
Здравствуйте, можно ли слепить программу написанную на питоне и программу написанную на c++ в одну На питонн осуществлён парсинг и...

Объединение кода движка и собственного кода
Здравствуйте! Ситуация следующая: Решил я поосваивать движок hge и накидать простенькую игру. Суть создание окон с помощью него очень...

Объединение кода
Помогите объединить все эти часту в одну рабочую программу. В кратце о проге: она должна считывать информацию с файла, редактировать ее,...

10
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.05.2021, 17:42
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
<?php
 
$result = mysqli_query($mysqli, 'SELECT *, DATEDIFF(l.Date_St, CURRENT_DATE) period FROM `equip` LEFT JOIN `lic` l ON equip.ID_Equip=ID_Lic');
$posts  = mysqli_fetch_all($result, MYSQLI_ASSOC);
 
?>
 
<?php foreach($posts as $post):?>
    <table class="proba">
        <thead>
            <th colspan="8">
            <?php if($post['period'] < 0): ?>
                ВНИМАНИЕ! Срок лицензии истек, продлите её
            <?php else: ?>
                Лицензия закончится через <?=$post['period']?> д.</th>
            <?php endif ?>
        </thead>
        <tbody>
            <tr>
                <td><?=$post['ID_Equip']?></td>
                <td><?=$post['Name_Equip']?></td>
                <td><?=$post['Сheck_interval_Equip']?></td>
                <td><?=$post['Date_repair_Equip']?></td>
                <td><?=$post['Date_rel_Equip']?></td>
                <td><?=$post['ID_Lic']?></td>
                <td><?=$post['Date_Expiry']?></td>
                <td><?=$post['Date_St']?></td>
            </tr>
        </tbody>
    </table>
<?php endforeach ?>
Обязательно замените звездочку на явное перечисление полей. Примерно так: equip.ID_Equip, equip.Name_Equip и т.д.
Или укажите любую букву после `equip` (после `lic` я уже указал), например так: `equip` e и перечисляйте так: e.ID_Equip, e.Name_Equip и т.д.

Зачем явно перечислять:
1) чтобы не выбирать не используемые в данном HTML-шаблоне поля
2) чтобы сделать код легко читаемым
1
Заблокирован
17.05.2021, 18:53
Цитата Сообщение от Para bellum Посмотреть сообщение
Обязательно замените звездочку на явное перечисление полей.
Проверял. Влияет на скорость только если, например, проверяем только одно поле таблицы. Если перечисляем два из трех или три из пяти - смысла нет. Можете доказать обратное?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
17.05.2021, 19:12
Gentr, вы где-то между строк про скорость прочитали?
Цитата Сообщение от Gentr Посмотреть сообщение
Если перечисляем два из трех или три из пяти - смысла нет
Смысл есть, даже если пять из пяти вытягиваем:
Цитата Сообщение от Para bellum Посмотреть сообщение
сделать код легко читаемым
Добавлено через 8 минут
NikolaHELP, кстати, при LEFT JOIN, если в присоединяемой таблице не будет данных, соответствующих строкам из первой таблицы, будут присоединены NULL.
А DATEDIFF возвращает NULL, если одна из дат -- NULL. Следовательно, в $post['period'] у вас тоже будет NULL и условие
PHP
1
if($post['period'] < 0)
не сработает.

Мораль: в таблице lic гарантированно должна быть дата, соответствующая каждой вытягиваемой строке из equip. Иначе нужно немного переделывать условие или SQL-запрос.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 62
20.05.2021, 16:10  [ТС]
PHP
1
2
3
4
<?php
$result = mysqli_query($mysqli, 'SELECT equip.ID_Equip, equip.Name_Equip,equip.Chech_interval_Equip,equip.Date_repair_Equip,equip.Date_rel_Equip,equip.ID_Lic,equip.Date_Expiry,equip.Date_St DATEDIFF(l.Date_St, CURRENT_DATE) period FROM `equip` e e.ID_Equip, e.Name_Equip LEFT JOIN `lic` ON equip.ID_Equip=ID_Lic');
$posts  = mysqli_fetch_all($result, MYSQLI_ASSOC);
?>
Как быть если он ругается на строчку
PHP
1
$posts  = mysqli_fetch_all($result, MYSQLI_ASSOC);
Warning: mysqli_fetch_all() expects parameter 1 to be mysqli_result, boolean given in

Добавлено через 27 секунд
А как правильно будет переделать?

Добавлено через 2 минуты
Я наверное сделаю проще, буду выводить немного по другому

Добавлено через 28 минут
Может проще сделать что бы он прям в таблице считал разность дат?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
20.05.2021, 18:20
Или `lic` замените на `lic` l или l.Date_St замените на lic.Date_St.
Это очевидная ошибка. Если после замены появится снова, вставьте до
PHP
1
$posts  = mysqli_fetch_all($result, MYSQLI_ASSOC);
это
PHP
1
var_dump(mysqli_error($mysqli));
И увидите текст ошибки.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 62
04.06.2021, 11:10  [ТС]
Прошу помочь очень сильно, сдавать диплом уже скоро, а я все до сих пор не могу создать запрос

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
<?php
    $result = mysqli_query($mysqli,'SELECT * FROM `equip` LEFT JOIN `lic` ON equip.ID_Equip=ID_Lic');
    
    while($vibor =  mysqli_fetch_assoc($result))
    {
        $posts[] = $vibor;
    }
    
    $vibor =  mysqli_fetch_assoc($result);
 
    foreach($posts as $vibor)
    {
?>
<style>
td {text-align: center;}
border-spacing: 7px 11px;
</style>
<table class="proba">
    <tbody>
        <tr>
            <td>Id оборудования</td>
            <td>Наименование оборудования</td>
            <td>Id лицензии</td>
            <td>Дата начала лицензии</td>
            <td>Дата окончания лицензии</td>
            <td>Срок лицензии</td>
        </tr>
        <tr>
            <td><?php echo $vibor['ID_Equip']; ?></td>
            <td><?php echo $vibor['Name_Equip']; ?></td>
            <td><?php echo $vibor['ID_Lic']; ?></td>
            <td><?php echo $vibor['Date_Expiry']; ?></td>
            <td><?php echo $vibor['Date_St']; ?></td>
            <td>ТУТ ДОЛЖНО БЫТЬ РАЗНИЦА ДАТ МЕЖДУ ['Date_Expiry'] и ['Date_St']</td>
        </tr>
    </tbody>
</table>
<br><br>
 
<?php
    }
?>
</div>
PHP
1
2
3
4
5
6
7
<?php
    $res = mysqli_query($mysqli, 'SELECT DATEDIFF(Date_St, CURRENT_DATE) AS days FROM lic');
    if ($res) while($row = mysqli_fetch_row( $res )) {
        if ($row[0] < 0){ echo "ВНИМАНИЕ! Срок лицензии истек, продлите её";}
        echo '<pre>', var_export($row,1), "</pre>\n";
    }
?>
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
04.06.2021, 12:45
Дошло дело до ошибки, забросили тему, вместо того, чтобы вывести ее на экран, как я показал и исправить.

Добавлено через 13 минут
Чтобы не париться, напишите такую функцию:
PHP
1
2
3
4
5
6
7
function get_period(string $begin, string $end): int
{
    $begin = new DateTime($begin);
    $end   = new DateTime($end);
 
    return $begin->diff($end)->format('%R%a');
}
Подключите ее к проекту и в шаблоне вместо "ТУТ ДОЛЖНО БЫТЬ РАЗНИЦА ДАТ МЕЖДУ ['Date_Expiry'] и ['Date_St']" впишите:
PHP
1
<?=get_period($vibor['Date_St'], $vibor['Date_Expiry'])?>
Всё.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 62
04.06.2021, 13:58  [ТС]
Посмотрите, пожалуйста, я ее хочу модифицировать примерно так...


PHP/HTML
1
2
3
4
5
6
7
8
function get_period(string $begin, string $end): int
{
    $begin = new DateTime($begin);
    $end   = new DateTime($end);
 
if($end < 0) { echo "ВНИМАНИЕ! Срок лицензии истек, продлите её";}
    return $begin->diff($end)->format('%R%a');
}
Добавлено через 4 минуты
А эта функция получается не работает как счетчик? она просто разницу показывает
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
04.06.2021, 14:21
Лучший ответ Сообщение было отмечено gogolik как решение

Решение

Не нужно эту функцию изменять. Эту проверку в шаблоне нужно делать.
Это:
HTML5
1
<td>ТУТ ДОЛЖНО БЫТЬ РАЗНИЦА ДАТ МЕЖДУ ['Date_Expiry'] и ['Date_St']</td>
замените на
PHP/HTML
1
2
3
4
5
<td>
    <?php $period = get_period('now', $vibor['Date_Expiry']); ?>
 
    <?=$period < 0 ? 'ВНИМАНИЕ! Срок лицензии истек, продлите её' : $period;?>
</td>
1
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 62
04.06.2021, 14:30  [ТС]
ВЫ гений!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2021, 14:30
Помогаю со студенческими работами здесь

Объединение кода
Приветствую товарищи, столкнулся с интересной штукой, есть предположим команды if response in : ...

Объединение кода
Доброго времени суток. Вообщем есть две кнопки, одна выполняет код: while (true) { Компьютер компьютер =...

Объединение кода DHT11, кнопки
День добрый, форумчане, мне нужна помощь в объединении следующих кодов в один код. Участие принимают: датчик влажности и температуры DHT11,...

Объединение методов в блок кода
Здравствуйте, помогите пожалуйста, не могу найти, но точно такое раньше использовал. Классы с большим количеством методов -это не удобно,...

Объединение своего и чужого кода в github
Всех приветствую. Я форкнул один репозиторий в свой аккаунт, чтобы сделать изменения и отправить pull request. Для pull request я создал...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru