отчет — есть идеи, как сделать ежемесячный DTR (ежедневное время записи) с помощью PHP?

Моя проблема заключается в том, как я могу получить запись из базы данных в определенный день формы DTR. Например, когда сотрудник отсутствует в день 3, он пропускает день 3 и сразу переходит к другому дню, когда сотрудник присутствует. Как этот https://www.youtube.com/watch?v=g9JUN6TBRak

          <CAPTION><EM>
<p class="civil_service_title">Civil Service Form No. 48</p>
<p class="dtr">DAILY TIME RECORD </p>
<p class="circles">-----o0o-----</p>
<p class="line1">_____________________________________</p>
<p class="name"> (Name)</p>
<p class="civil_service_title2"> For the month of______________________________________<br>
Official hours for arrival <br>and departure
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;
Regular days________________<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Saturdays___________________    </p>
</EM></CAPTION>
<form method="POST">
<table border="1">
<tr><th rowspan="2">Day<th colspan="2">A.M.
<th colspan="2">P.M.<th colspan="2">Undertime
<TR><th>Arrival<th>Departure
<th>Arrival<th>Departure
<th>Hours<th>Minutes
<?php
$days = 31;
for($i = 1;$i <= $days;$i++){
$fetch = mysqli_fetch_array($sql);
?>
<tr>
<th><input type="hidden" name="hidden" value="<?php echo $i;?>"><?php echo $i;?></th>
<td>
<?php
echo $fetch['time_in_am'];
?>
</td>
<td>00:00</td>
<td>00:00</td>
<td>00:00</td>
<td>00:00</td>
<td>00:00</td>
</tr>
<?php
}
?>
<tr><th colspan="5">
<div> Total </div> <td><td>
</table>
</form>

-1

Решение

Ваш основной цикл для получения данных из данных выглядит следующим образом:

<?php
$days = 31;
for($i = 1;$i <= $days;$i++){
$fetch = mysqli_fetch_array($sql);
?>
<tr>
<th><input type="hidden" name="hidden" value="<?php echo $i;?>"><?php echo $i;?></th>
<td>
<?php
echo $fetch['time_in_am'];
?>
</td>
<td>00:00</td>
<td>00:00</td>
<td>00:00</td>
<td>00:00</td>
<td>00:00</td>
</tr>
<?php
}
?>

Это объясняет, почему ваш вывод пропускает дни, и у вас заканчиваются данные в конце списка. Когда сотрудник отсутствует, данных за этот день нет.

Так как вы не ответили на мой вопрос, я должен сделать предположения. Я не знаю, что находится в вашей базе данных, запрос к ней или что возвращается. Так что я придумываю это. Я предполагаю, что вы возвращаете день месяца и время для каждого дня месяца, который вы выбрали. Код выше стал бы:

<tr>
<?php
$days = 31;
$timesArray = array_fill(1,$days,['timeIn' => 'absent']);
while($fetch = mysqli_fetch_array($sql)) {
$timesArray[$fetch['day_of_month']]['timeIn'] = $fetch['time_in_am'];
}
foreach ($timesArray as $times)
{
echo '<td>'.$times['timeIn'].'</td>';
echo '<td>00:00</td>';  // for other times
echo '<td>00:00</td>';  // for other times
echo '<td>00:00</td>';  // for other times
echo '<td>00:00</td>';  // for other times
echo '<td>00:00</td>';  // for other times
}
?>
</tr>

Это может быть легко расширено, чтобы содержать другие времена, такие как время ожидания. Я опустил заголовок таблицы, потому что не мог понять этого.

Хитрость в том, что я готовлю $timesArray на все дни месяца со словом «отсутствует». Это может быть пустая строка, если вы хотите. После этого я заполняю дни присутствия сотрудника и, наконец, отображаю весь массив.

1

Другие решения

Других решений пока нет …