Любая идея о том, как сделать ежемесячный 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 на все дни месяца со словом "отсутствует". Это может быть пустая строка, если вы хотите. После этого я заполняю дни присутствия сотрудника и, наконец, отображаю весь массив.

Другие вопросы по тегам