Проблема с отображением данных в таблице PHP/HTML
Я делаю электронный журнал и у меня возникла проблема. Если имеются уроки на которых более 1 типа работы, то почему-то типы работы дублируются. Из-за этого значения не влезают в таблицу.
Фрагмент кода отображения шапочки:
<thead>
<!-- Строка с месяцем -->
<tr>
<th rowspan=3 class="sticky-cell">Список учеников</th>
<?php
$currentMonth = '';
$monthDates = []; // Массив для хранения количества уроков в каждом месяце
// Массив для перевода месяцев на русский
$monthsRU = [
'January' => 'Январь',
'February' => 'Февраль',
'March' => 'Март',
'April' => 'Апрель',
'May' => 'Май',
'June' => 'Июнь',
'July' => 'Июль',
'August' => 'Август',
'September' => 'Сентябрь',
'October' => 'Октябрь',
'November' => 'Ноябрь',
'December' => 'Декабрь'
];
// Считаем количество уроков на каждый месяц
foreach ($dates as $row) {
$month = date('F', strtotime($row['date'])); // Получаем месяц на английском
if (!isset($monthDates[$month])) {
$monthDates[$month] = 1;
} else {
$monthDates[$month]++;
}
}
// Выводим ячейки с названиями месяцев
foreach ($monthDates as $month => $lessonsInMonth) {
echo "<th colspan='$lessonsInMonth'>" . $monthsRU[$month] . "</th>"; // Используем массив для перевода
}
?>
<th rowspan=3>Ср. балл</th>
<th rowspan=3>Итог<br><?php echo $period; ?> пер.</th>
</tr>
<!-- Строка с числами -->
<tr style="padding: 0;">
<?php
$previousDate = null;
foreach ($dates as $dateRow):
$formattedDate = date('d', strtotime($dateRow['date']));
$dayid = $dateRow['dayid'];
$originalDate = $dateRow['date'];
// Если это новая дата, отображаем ячейку
if ($previousDate !== $originalDate) {
// Получаем все типы для текущей даты и урока
$res = $conn->query("SELECT `homework` FROM `timetable` WHERE `groupname` = '$group' AND `lessonname` = '$lesson' AND `date` = '$originalDate' AND `dayid` = $dayid AND `period` = '$period'");
echo "<th colspan='{$res->num_rows}' style='text-align: center;'>";
// Отображение значка для ДЗ
if (empty($row['homework'])) {
echo "<img src='/img/nohw.png' width='16' height='16' title='Нет домашнего задания'><br>";
} else {
echo "<img src='/img/havehw.png' width='16' height='16' data-homework='" . htmlspecialchars($row['homework']) . "' class='homework-icon' title='Есть домашнее задание'><br>";
}
// Ссылка на страницу журнала
echo "<a href='journal.php?group=$group&lesson=$lesson&date=$originalDate&idless=$dayid&period=$period'>" . htmlspecialchars($formattedDate) . "</a><br>";
// Вывод всех типов в одной строке внутри одной ячейки
echo "</th>";
// Обновляем предыдущую дату
$previousDate = $originalDate;
}
endforeach;
?>
</tr>
<tr>
<?php
$previousDate = null;
$res = $conn->query("SELECT `type` FROM `timetable` WHERE `school` = '$currentschool' AND `period` = '$period' AND `teacher` = '$currentfullname' AND `groupname` = '$group'");
foreach ($dates as $dateRow) {
$dayid = $dateRow['dayid'];
$originalDate = $dateRow['date'];
$stmt = $conn->prepare("SELECT `type` FROM `timetable` WHERE `dayid` = ? AND `date` = ? AND `school` = ? AND `period` = ? AND `teacher` = ? AND `groupname` = ?");
$stmt->bind_param("ssssss", $dayid, $originalDate, $currentschool, $period, $currentfullname, $group);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "<th>" . htmlspecialchars($row['type']) . "</th>";
}
}
$stmt->close();
}
?>
</tr>
</thead>
Подскажите, как можно решить этот баг?