Отображение дней месяца в PHP и сравнение их с датами в MySQL?

У меня проблема с правильной генерацией дней месяца, например. с 2018-10-01 по 2018-10-31 и проверяет, есть ли каждый день, сгенерированный в цикле for, в базе данных MySql.

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

мой код:

 $conn = dbManager::getConnection();


   $tr = 1;

for($tr; $tr < $day; $tr++){

  $dt = new DateTime($start);

  $msc = $dt->format('m');

      switch ($msc) {
        case '1':
         $m = '1';
          break;
        case '2':
         $m = '2';
          break;
        case '3':
         $m = '3';
          break;
        case '4':
          $m = '4';
          break;
        case '5':
          $m = '5';
          break;
        case '6':
         $m = '6';
          break;
        case '7':
         $m = '7';
          break;
        case '8':
          $m = '8';
          break;
        case '9':
          $m = '9';
          break;
        case '10':
          $m = '10';
          break;
        case '11':
          $m = '11';
          break;
        case '12':
          $m = '12';
          break;

      }

         if ($m < 10){
          $mc = '0'.$m;
         }else{
          $mc = $m;
         }

         if ($tr < 10){ 
          $tr = '0'.$tr;
         }else{
          $tr = $tr;
         }


   $data = date('Y-'.$mc.'-'.$tr);

   echo "<tr><td>".$data."</td><td  style='vertical-align:middle;'>";


   $result = $conn->query("SELECT * FROM open ")or die(mysqli_error());


      while($row = mysqli_fetch_array($result)){       

           $Start = $row['Start'];
           $End = $row['End'];

           $dtb = new DateTime($Start);
           $dtb_e = new DateTime($End);
           $dtb_e->add(new DateInterval('PT1H'));

           $w= $dtb->format('Y-m-d');
           $ts = $dtb->format('H'); 
           $te = $dtb_e->format('H');



          if ($w == $data){


             for($h=1;$h<24;$h++){

                 if ($h >= $ts && $h <= $te){
                   if ($w < date('Y-m-d')){ 
                    $color ='gray';
                   }else{
                    $color = 'green';
                   }

                   echo '<p style = "display:inline;padding:5px; border:1px solid ;background:'.$color.';color:#fff;border-radius: 5px;margin-right:5px;">'.$h.':00</p>';
                 }else{
                  $color = 'gray';

                  echo '<p style = "display:inline;padding:5px; border:1px solid ;background:'.$color.';color:#fff;border-radius: 5px;margin-right:5px;">'.$h.':00</p>';
                 }
              }


              if ($data >= date('Y-m-d')){ 

               echo '<div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success"  href = "edit_termin.php?Start='.$row['Start'].'&End='.$row['End'].'&ID='.$row['ID'].'" role = "button">Edytuj</a><a class = "btn btn-sm btn-danger"  href = "del_open.php?Start='.$row['Start'].'&End='.$row['End'].'&ID='.$row['ID'].'" role = "button">Usuń</a></div>';
              }else{ 
                echo '<div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success disabled"  href = "edit_termin.php?Start='.$row['Start'].'&End='.$row['End'].'&ID='.$row['ID'].'" role = "button">Edytuj</a><a class = "btn btn-sm btn-danger disabled"  href = "del_open.php?Start='.$row['Start'].'&End='.$row['End'].'&ID='.$row['ID'].'" role = "button">Usuń</a></div>';
              }

              if ($data != $data){
                        $dodaj = '<div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success"  href = "edit_termin.php?Start='.$data.'" role = "button">Dodaj</a></div>';
                         echo $dodaj;
              }else{
                echo 'x';
              }

          }else{
              if ($data != $data){
                        $dodaj = '<div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success"  href = "edit_termin.php?Start='.$data.'" role = "button">Dodaj</a></div>';
                         echo $dodaj;
              }else{
                echo 'x';
              }
            echo  '<div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success"  href = "edit_termin.php?Start='.$data.'" role = "button">Dodaj</a></div>';  


          }


      }  

}
 echo "</td></tr>"; 

ниже результат:

сгенерированные дни без кнопки добавить

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
140
2

Ответы 2

Надеюсь, это поможет вам. Идея состоит в том, чтобы получить все результаты сразу, чтобы вы могли проверить, есть ли дата уже в базе данных или нет:

$conn = dbManager::getConnection();
$tr = 1;

$dt = new DateTime();
$msc = $dt->format('m');
$mc = str_pad($msc, 2, '0', STR_PAD_LEFT);

// You should limit your results to the working month
$result = $conn->query("SELECT * FROM open ")or die(mysqli_error());

$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
$db_dates = array_column($rows, 'Start');
$db_dates = array_map(function($v) { 
  $d = new DateTime($v); 
  return $d->format('Y-m-d');
}, $db_dates);

for($tr; $tr < $day; $tr++){
  $tr = str_pad($tr, 2, '0', STR_PAD_LEFT);

  $data = date('Y-'.$mc.'-'.$tr);

  // Check if current date is not in the db result
  $target_date = array_search($data, $db_dates);

  if ($target_date === FALSE) {
      // Add your buttons
  } else {
    // Column and map operations keep the indexes, access your record
    $row = $rows[$target_date];
      // Rest of your logic in here
  }
}

сообщение спасибо за помощь. Я изменил его в соответствии с вашими подсказками и работает, показывая кнопку в нужном месте, но это занимает только часы из полей базы данных из последней записи. :( np.Start 2018-10-05 09:00 End 2018-10-05 20:00) скрипт показывает только эти часы для каждой записи, найденной в базе данных, а не те часы, которые назначены на данную дату .. Где можно Я ошибаюсь?

 $tr=1;

            for($tr; $tr < $day; $tr++){

              $dt = new DateTime($start);

                $msc = $dt->format('m');

                    switch ($msc) {
                      case '1':
                       $m = '1';
                        break;
                      case '2':
                       $m = '2';
                        break;
                      case '3':
                       $m = '3';
                        break;
                      case '4':
                        $m = '4';
                        break;
                      case '5':
                        $m = '5';
                        break;
                      case '6':
                       $m = '6';
                        break;
                      case '7':
                       $m = '7';
                        break;
                      case '8':
                        $m = '8';
                        break;
                      case '9':
                        $m = '9';
                        break;
                      case '10':
                        $m = '10';
                        break;
                      case '11':
                        $m = '11';
                        break;
                      case '12':
                        $m = '12';
                        break;

                    }

                       if ($m < 10){
                        $mc = '0'.$m;
                       }else{
                        $mc = $m;
                       }

                       if ($tr < 10){ 
                        $tr = '0'.$tr;
                       }else{
                        $tr = $tr;
                       }

              //$dt = new DateTime($start);
              //$msc = $dt->format('m');

              // $mc = $nsc; //strpad($msc, 2, '0');
              //strpad($tr, 2, '0');

              $data = date('Y-'.$mc.'-'.$tr);

              echo '<tr><td>'.$data.'</td><td>';

              // You should limit your results to the working month
              $result = $conn->query("SELECT * FROM open ".$month." ")or die(mysqli_error());

              $rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
              $db_dates = array_column($rows, 'Start');
              $db_dates = array_map(function($data) { 
                $d = new DateTime($data); 
                return $d->format('Y-m-d');
              }, $db_dates);



              // Check if current date is not in the db result
              $target_date = array_search($data, $db_dates);

              if ($target_date !== FALSE) {
                  // Add your buttons

                foreach ($rows as $key) {

                  $Start = $key['Start'];
                  $End = $key['End'];
                  $id = $key['ID'];
                }


                             $str = $key['Start'];
                             $ed = $key['End'];

                             $dtb = new DateTime($str);
                             $dtb_e = new DateTime($ed);
                             $dtb_e->add(new DateInterval('PT1H'));

                             $w= $dtb->format('Y-m-d');
                             $ts = $dtb->format('H'); 
                             $te = $dtb_e->format('H');



                               for($h=1;$h<24;$h++){

                                 if ($h >= $ts && $h <= $te){

                                   if ($w < date('Y-m-d')){ 
                                    $color ='gray';
                                   }else{
                                    $color = 'green';
                                   }

                                   echo '<p style = "display:inline;padding:5px; border:1px solid ;background:'.$color.';color:#fff;border-radius: 5px;margin-right:5px;">'.$h.':00</p>';

                                 }else{

                                  $color = 'gray';
                                  echo '<p style = "display:inline;padding:5px; border:1px solid ;background:'.$color.';color:#fff;border-radius: 5px;margin-right:5px;">'.$h.':00</p>';
                                 }
                              }

                              //--------------------------------------

                              if ($data >= date('Y-m-d')){ 

                                 //-------------------------
                                 $dst = $data.' '.$ts.':00';
                                 $den = $data.' '.$te.':00';

                                 //echo "SELECT * FROM open WHERE Start >= '".$dst."' AND End <= '".$den."' ";
                                 $res = $conn->query("SELECT * FROM open WHERE Start >= '".$dst."' AND End <= '".$den."' ");

                                 while($r = mysqli_fetch_array($res)){
                                  $idr = $r['ID']; //ID record


                               echo '<td><div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success"  href = "edit_termin.php?Start='.$dst.'&End='.$den.'&ID='.$idr.'" role = "button">Edutuj</a><a class = "btn btn-sm btn-danger"  href = "del_open.php?Start='.$dst.'&End='.$den.'&ID='.$idr.'" role = "button">Usuń</a></div></td>';
                                 }

                              }else{ 
                                echo '<td><div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success disabled"  href = "edit_termin.php?Start='.$row['Start'].'&End='.$row['End'].'&ID='.$idr.'" role = "button">Edytuj</a><a class = "btn btn-sm btn-danger disabled"  href = "del_open.php?Start='.$row['Start'].'&End='.$row['End'].'&ID='.$row['ID'].'" role = "button">Usuń</a></div></td>';
                              }

              } else {
                // Column and map operations keep the indexes, access your record
                $row = $rows[$target_date];
                  // Rest of your logic in here
                 if ($data >= date('Y-m-d')){
                     echo  '<td><div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success"  href = "form_terminarz.php?Start='.$data.'" role = "button">Dodaj termin</a></div></td>'; 
                  }else{
                     echo  '<td><div style = "display:inline;text-align:rigth;margin-left:35px;"><a class = "btn btn-sm btn-success disabled"  href = "form_terminarz.php?Start='.$data.'" role = "button">Dodaj termin</a></div></td>'; 
                  } 
              }

              echo '<td></tr>';
            }

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