

ドットインストールでカレンダーのアプリケーションを作成しています。

<http://dotinstall.com/lessons/calendar_php_v3/34311>

月の左右にある「<<」「>>」のリンク先が先月・翌月のカレンダーにリンクするはずですが、  
なぜかxamppのdashboadのページへ飛ばされます。。。

基本的にソースは記載されているものと照らし合わせているので  
エラーがあるわけではないですが、理由が分からず手が止まっています。

どなたか教えてください><

一応、自身のソースは下記に転記いたします。

****

[code]

    <?php
    
    function h($s) {
      return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
    }
    
    try {
      if (!isset($_GET['t']) || !preg_match('/\A\d{4}-\d{2}\z/', $_GET['t'])) {
        throw new Exception();
      }
      $thisMonth = new DateTime($_GET['t']);
    } catch (Exception $e) {
      $thisMonth = new DateTime('first day of this month');
    }
    
    //var_dump($thisMonth);
    //exit;
    
    $dt = clone $thisMonth;
    $prev = $dt->modify('-1 month')->format('Y-m');
    $dt = clone $thisMonth;
    $next = $dt->modify('+1 month')->format('Y-m');
    
    
    $yearMonth= $thisMonth->format('F Y'); //Fは月、Yは年
    
    //前月のカレンダーを表示
    $tail = '';
    $lastDayOfPrevMonth = new DateTime('last day of '.$yearMonth. ' -1 month');
    while ($lastDayOfPrevMonth->format('w') < 6) {
      $tail = sprintf('<td class="gray">%d</td>', $lastDayOfPrevMonth->format('d')) . $tail;
      $lastDayOfPrevMonth->sub(new DateInterval('P1D'));
    }
    
    $body = '';
    $period = new DatePeriod(
      new DateTime('first day of' .$yearMonth), //今月の最初の日を取得
      new DateInterval('P1D'), //1日ずつ取得
      new DateTime('first day of '.$yearMonth. ' +1 month') //今月の最後の日を取得
    );
    
    $today = new DateTime('today');
    
    //今月のカレンダーを表示
    foreach ($period as $day) {
      if ($day->format('w') % 7 === 0) { //$day->format('w') で日曜日が0、月曜日が1といった具合に表現できる。それを7で割る
        $body .= '</tr><tr>';
      }
      $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : '';
      $body .= sprintf('<td class="youbi_%d %s">%d</td>', $day->format('w'), $todayClass, $day->format('d')); //日を2桁の数字で表す
    }
    
    //来月1ヶ月のカレンダーを表示
    $head = '';
    $firstDayOfNextMonth = new DateTime('first day of '.$yearMonth. ' +1 month'); //来月初日を$firstDayOfNextMonthに格納
    while ($firstDayOfNextMonth->format('w') > 0) { //来月初日が0より大きければ
      $head .= sprintf('<td class="gray">%d</td>', $firstDayOfNextMonth->format('d')); //グレイ色にすし2桁の数字で表示する
      $firstDayOfNextMonth->add(new DateInterval('P1D'));
    }
    
    $html = '<tr>'. $tail . $body . $head . '</tr>';
    
    ?>
    <!DOCTYPE HTML>
    <html>
    <head>
      <meta charset="utf-8">
      <title>Calendar</title>
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
      <table>
        <thead>
          <tr>
            <th><a href="/?t=<?php echo h($prev); ?>">&laquo;</a></th>
            <th colspan="5"><?php echo $yearMonth; ?></th>
            <th><a href="/?=<?php echo h($next); ?>">&raquo;</a></th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Sun</td>
            <td>Mon</td>
            <td>Tue</td>
            <td>Wed</td>
            <td>Thu</td>
            <td>Fri</td>
            <td>Sat</td>
          </tr>
          <tr>
            <?php echo $html; ?>
        </tbody>
        <tfoot>
          <tr>
            <th colspan="7"><a href="/">Today</a></th>
          </tr>
        </tfoot>
      </table>
    </body>
    </html>
    
[/code]

[code]

    <?php
    function connectDb(){
      try {
        return new PDO(DSN, DB_USER, DB_PASSWORD);
      } catch (PDOException $e) {
        echo $e->getMessage();
        exit;
      }
    }
    
    function h($s){
      return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
    }
    
    ?>
    
[/code]

[code]

    body {
      font-family: Arial, sans-serif;
      font-size: 14px;
    }
    
    a {
      text-decoration: none;
    }
    
    table {
      margin: 15px auto;
      border: 1px solid #ddd;
      border-collapse: collapse;
    }
    
    th {
      background: #eee;
    }
    
    th, td{
      padding: 7px;
      text-align: center;
    }
    
    .youbi_0 {
      color: red;
    }
    
    .youbi_6 {
      color: blue;
    }
    
    .today {
      font-weight: bold;
    }
    
    .gray {
      color: #dedede;
    }
    
[/code]


CC BY-SA 3.0
2015-09-27T16:50:56.083
17003
2016-07-28T04:46:51.227
7176
question
php
前月・翌月へのリンクが上手く表示されません。

[code]

    <th><a href="/?t=<?php echo h($prev); ?>">&laquo;</a></th>
    
[/code]

このURLであれば、ファイル名がindex.php(一般的な環境の場合)である必要がありますが、別のファイル名になっていませんか。

たとえばこのファイルが`calendar.php`だとするとリンクをたどるとサーバのデフォルトのページが表示されるでしょう。

あとは余談ですが、

[code]

    <th><a href="/?=<?php echo h($next); ?>">&raquo;</a></th>
    
[/code]

パラメータの`t`が抜けているように見えます。

またこのコード細かくは追いかけていませんがどこかで無限ループしているような気がします。


CC BY-SA 3.0
2015-09-28T04:49:07.547
17018
2015-09-28T04:49:07.547
5793
17003
answer