63132


恐らくtbodyの中のどこかがおかしいと思われるのですが、  
どこが原因が知りたいです。よろしくお願いします。  
windows10 pro64 1903 PHP7.3.8

[code]

    <!DOCTYPE html>
    <html>
    
    <head>
      <title>PHPカレンダー</title>
      <meta charset="utf-8">
      <?php
      $year = 0; //表示する年
      $month = 0; //表示する月
      $dow = ['日', '月', '火', '水', '木', '金', '土'];
      if (isset($_GET['y'])) {
        $year = intval($_GET['y']);
      }
      if (isset($_GET['m'])) {
        $month = intval($_GET['m']);
      }
      if (!$year || !$month || !checkdate($month, 1, $year)) {
        //現在の年月
        $now_date = new DateTime();
        $year = $now_date->format('Y');
        $month = $now_date->format('m');
      }
    
      try {
        $datetime = new DateTime("{$year}-{$month}-1"); //表示する月（例外処理）
      } catch (Exception $e) {
        echo $e->getMessage();
        exit(1);
      }
    
      $first_day = $datetime->format('w'); //1日の曜日
      ?>
    </head>
    
    <body>
      <?php echo $datetime->format('Y年m月'); ?>
    
      <table>
        <caption><?php $datetime->format('Y年m月'); ?></caption>
        <thead>
          <tr>
            <?php foreach ($dow as $day) : ?>
              <th><?php echo $day ?></th>
            <?php endforeach ?>
          </tr>
        </thead>
        <tbody>
          <tr>
            <?php for ($date = 1; $date <= $datetime->format('t'); $date++) { ?>
              <?php
              if ($date === 1) {
                $i = 0;
                while ($i < $first_day) {
              ?>
                  <td>&nbsp;</td>
              <?php
                  $i++;
                }
              }
              ?>
              <td><?php echo $date ?></td>
              <?php if ($date % 7 === 7 - $first_day) { ?>
          </tr>
          <tr>
          <?php } ?>
        <?php } ?>
          </tr>
        </tbody>
      </table>
      <p>
        <?php
        $datetime->modify('-1 month');
        ?>
        <a href="calen.php?y=<?php echo $datetime->format('Y') ?>&m=<?php echo $datetime->format('m') ?>">前月</a>
        <?php
        $datetime->modify('+2 months');
        ?>
        <a href="calen.php?y=<?php echo $datetime->format('Y') ?>&m=<?php echo $datetime->format('m') ?>">翌月</a>
      </p>
    </body>
    
    </html>
    
    
[/code]


CC BY-SA 4.0
2020-02-17T20:22:53.173
63129
2020-02-18T00:51:32.160
37442
question
php html
PHPのカレンダー1日から始まる月の表示が崩れる問題を解決したいです。


こんにちは、はじめまして。  
62行目、7-$first_dayの **剰余** で **trタグ**
を閉じて改行する位置を求めてるのですが、$first_dayが0の場合はこの条件が成立しなくなります。 **三項演算子**
で解決すると下記のようになります。  
(もしあなたがはじめたばかりの方ならどうか、強調した部分でわからない単語をしらべてください:->)

[code]

    <?php if ($first_day==0?$date%7===0:$date % 7 === 7 - $first_day) { ?>
        </tr>
        <tr>
    <?php } ?>
    
[/code]


CC BY-SA 4.0
2020-02-18T00:51:32.160
63132
2020-02-18T00:51:32.160
37777
63129
answer