@selfowl

Заполнение таблицы шахматки, как реализовать?

Здравствуйте!
Есть множество комнат
Допустим: A,B,C,D,E - это строки в таблице
Столбцы - это даты от начала текущего месяца до его конца
Мне нужно сопоставить ID комнаты и дату и закрасить поле в другой цвет, если есть совпадение.
Не имею представления, как описать более понятно
В итоге накидал код, в котором уже отчасти сам запутался, ибо переписывал его с десяток раз, но он отрабатывает некорректно, прошу помощи :(
Код вывода таблицы
<?php
          $days = intval(date('t', strtotime($desiredDate)));
          $month = date('m');

?>
<table class="table">
  <thead>
    <tr>
      <th scope="col">Номер комнаты и тип</th>
<?php

for ($i = 1; $i <= $days; $i++) {
    $data_call = $i.'.'.$month.'.'.'2022';
    echo "<th scope='col'>$data_call</th>";
}
$list_rooms = array(
    'AV1' => 'Комната №1 (верх)',
    'AV2' => 'Комната №1 (верх)',
    'AN1' => 'Комната №1 (низ)',
    'AN2' => 'Комната №1 (низ)',
    
    'BV1' => 'Комната №2 (верх)',
    'BV2' => 'Комната №2 (верх)',
    'BN1' => 'Комната №2 (низ)',
    'BN2' => 'Комната №2 (низ)',
    
    'CV1' => 'Комната №3 (верх)',
    'CV2' => 'Комната №3 (верх)',
    'CN1' => 'Комната №3 (низ)',
    'CN2' => 'Комната №3 (низ)',
    
    'D' => 'Комната №4 (студия)',
    
    'EV1' => 'Комната №5 (верх)',
    'EV2' => 'Комната №5 (верх)',
    'EN1' => 'Комната №5 (низ)',
    'EN2' => 'Комната №5 (низ)',
    
    'FV1' => 'Комната №6 (верх)',
    'FV2' => 'Комната №6 (верх)',
    'FV2' => 'Комната №6 (верх)',
    'FN1' => 'Комната №6 (низ)',
    'FN2' => 'Комната №6 (низ)',
    'FN3' => 'Комната №6 (низ)',
    
    'GV1' => 'Комната №7 (верх)',
    'GV2' => 'Комната №7 (верх)',
    'GV2' => 'Комната №7 (верх)',
    'GN1' => 'Комната №7 (низ)',
    'GN2' => 'Комната №7 (низ)',
    'GN3' => 'Комната №7 (низ)',
    
    'HV1' => 'Комната №8 (верх)',
    'HV2' => 'Комната №8 (верх)',
    'HV2' => 'Комната №8 (верх)',
    'HN1' => 'Комната №8 (низ)',
    'HN2' => 'Комната №8 (низ)',
    'HN3' => 'Комната №8 (низ)',
    
    'IV1' => 'Комната №9 (верх)',
    'IV2' => 'Комната №9 (верх)',
    'IV2' => 'Комната №9 (верх)',
    'IN1' => 'Комната №9 (низ)',
    'IN2' => 'Комната №9 (низ)',
    'IN3' => 'Комната №9 (низ)',
    );

?>
    </tr>
  </thead>
  <tbody>
  <?php
                                                
                                                $query = $pdo -> query('SELECT * FROM clients_update ORDER BY date_enter');
                                                
                             
                        $days = intval(date('t', strtotime($desiredDate)));
                                          $month = date('m');
                                          $j = 0;
                                          $row = $query->fetchAll(PDO::FETCH_ASSOC);
                                                foreach($list_rooms as $key => $value) {
                                                    $selectedroom = $row[$j]['room'].$row[$j]['place'].$row[$j]['number'];
                                                    if ($key==$selectedroom){
                                                        
                                                    }
                                                    echo '<tr>';
                                                    $phpdate = strtotime( $row[$j]['date_enter'] );
                                                    $mysqldate = date( 'd.m.Y', $phpdate );
                                                     
                                                    echo '<td scope="row">'.$list_rooms[array_keys($list_rooms)[$j]].'</td>';
                                                    for ($i = 1; $i <= $days; $i++) {
                                                        $data_call = $i.'.'.$month.'.'.'2022';
                                            //            echo $data_call.'<br>';
                                                 //       echo $mysqldate.'<br><br>';
                                                        if ($data_call == $mysqldate){
                                                
                                                                echo "<td scope='row'>$data_call</td>";    
                                                        }
                                                        else{
                                                            echo "<td scope='row'>НЕТ</td>";  
                                                        }
                                                        
                                                         
                                                    }
                                                    ?> 
             
                                                    <?php
                                                    echo "</tr>";
                                                $j++;
                                                }
                                                
                                                
                                                ?>
  </tbody>
</table>


База данных


SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- База данных: `hostel`
--

-- --------------------------------------------------------

--
-- Структура таблицы `clients_update`
--
-- Создание: Окт 25 2022 г., 07:25
-- Последнее обновление: Окт 25 2022 г., 08:01
--

DROP TABLE IF EXISTS `clients_update`;
CREATE TABLE `clients_update` (
`id` int(11) NOT NULL,
`fio` varchar(255) NOT NULL COMMENT 'Фио заселенца',
`room` varchar(3) NOT NULL COMMENT 'Комната',
`place` varchar(3) NOT NULL COMMENT 'Тип койки (верх/низ)',
`number` varchar(3) NOT NULL COMMENT 'Номер койки',
`date_enter` date NOT NULL COMMENT 'Дата заезда',
`time_enter` varchar(255) NOT NULL COMMENT 'Время заезда',
`date_exit` date NOT NULL COMMENT 'Дата выезда',
`income` int(11) NOT NULL COMMENT 'Сумма',
`comment` text NOT NULL COMMENT 'Коментарий',
`type_income` varchar(255) NOT NULL COMMENT 'Тип оплаты'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `clients_update`
--

INSERT INTO `clients_update` (`id`, `fio`, `room`, `place`, `number`, `date_enter`, `time_enter`, `date_exit`, `income`, `comment`, `type_income`) VALUES
(1, 'Иванов Сергей', 'B', 'V', '1', '2022-10-10', '10:00', '2022-10-03', 450, 'Nope', 'Наличка'),
(2, 'Иванов Сергей', 'C', 'N', '1', '2022-10-12', '10:00', '2022-10-04', 550, 'Nope', 'Наличка');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `clients_update`
--
ALTER TABLE `clients_update`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `clients_update`
--
ALTER TABLE `clients_update`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

b13d4b37649858efafdd6d42bd02ceea.png?trs=5070a6c584897837896f3cdc96a8d008b6e866b557df93dda615622d09d200b0
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы