前提・実現したいこと
ドットインストールにてphpカレンダーシステムを作成し終えたので、次のステップで
カレンダーの日付をクリックすると予約入力フォームに遷移し、予約内容をカレンダー上に反映できるような
予約管理システムを作成しようとしています。
発生している問題・エラーメッセージ
<a href="reservation.php">にて予約画面に遷移したいのですがうまく機能していません。 遷移させる方法を教えていただけないでしょうか。 <追記> 特にエラーが出るわけもなく、画面が遷移しない状態で何も変わりません。 また、<td>要素内に<a href="reservation.php">を入れても新たにセルが作成されるだけで 想定どうり動きません。
該当のソースコード
index.php
1<?php 2 3require 'Calendar.php'; 4 5function h($s) { 6 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 7} 8 9$cal = new \MyApp\Calendar(); 10 11 ?> 12 13<!DOCTYPE html> 14<html lang="ja"> 15<head> 16 <meta charset="utf-8"> 17 <title>schedule calendar</title> 18 <link rel="stylesheet" href="styles.css"> 19</head> 20<body> 21<!-- <h1>schedule</h1> --> 22<!-- <input type="week"></input> --> 23<table border=1> 24 <thead> 25 <tr> 26 <th><a href="/?t=<?php echo h($cal->prev); ?>">«</a></th> 27 <th colspan="5"><?php echo h($cal->yearMonth); ?></th> 28 <th><a href="/?t=<?php echo h($cal->next); ?>">»</a></th> 29 </tr> 30 </thead> 31 <tbody> 32 <tr> 33 <td id="red">Sun</td> 34 <td>Mon</td> 35 <td>Tue</td> 36 <td>Wed</td> 37 <td>Thu</td> 38 <td>Fri</td> 39 <td id="blue">Sat</td> 40 </tr> 41 42 <a href="reservation.php"><?php echo $cal->show(); ?></a> ⇦ここがうまく機能していないようです 43 44</tbody> 45 <tfoot> 46 <tr> 47 <th colspan="7"><a href="/">Today</a></th> 48 </tr> 49 </tfoot> 50</table> 51</body> 52</html> 53
reservation.php
1<?php 2 3namespace MyApp; 4 5class Calendar { 6 public $prev; 7 public $next; 8 public $yearMonth; 9 private $_thisMonth; 10 11 public function __construct() { 12 try { 13 if (!isset($_GET['t']) || !preg_match('/\A\d{4}-\d{2}\z/', $_GET['t'])) { 14 throw new \Exception(); 15 } 16 $this->_thisMonth = new \DateTime($_GET['t']); 17 } catch (\Exception $e) { 18 $this->_thisMonth = new \DateTime('first day of this month'); 19 } 20 $this->prev = $this->_createPrevLink(); 21 $this->next = $this->_createNextLink(); 22 $this->yearMonth = $this->_thisMonth->format('F Y'); 23 } 24 25 private function _createPrevLink() { 26 $dt = clone $this->_thisMonth; 27 return $dt->modify('-1 month')->format('Y-m'); 28 } 29 30 private function _createNextLink() { 31 $dt = clone $this->_thisMonth; 32 return $dt->modify('+1 month')->format('Y-m'); 33 } 34 35 public function show() { 36 $tail = $this->_getTail(); 37 $body = $this->_getBody(); 38 $head = $this->_getHead(); 39 $html = '<tr>' . $tail . $body . $head . '</tr>'; 40 echo $html; 41 } 42 43 private function _getTail() { 44 $tail = ''; 45 $lastDayOfPrevMonth = new \DateTime('last day of ' . $this->yearMonth . ' -1 month'); 46 while ($lastDayOfPrevMonth->format('w') < 6) { 47 $tail = sprintf('<td class="gray">%d</td>', $lastDayOfPrevMonth->format('d')) . $tail; 48 $lastDayOfPrevMonth->sub(new \DateInterval('P1D')); 49 } 50 return $tail; 51 } 52 53 private function _getBody() { 54 $body = ''; 55 $period = new \DatePeriod( 56 new \DateTime('first day of ' . $this->yearMonth), 57 new \DateInterval('P1D'), 58 new \DateTime('first day of ' . $this->yearMonth . ' +1 month') 59 ); 60 $today = new \DateTime('today'); 61 foreach ($period as $day) { 62 if ($day->format('w') === '0') { $body .= '</tr><tr>'; } 63 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 64 $body .= sprintf('<td class="youbi_%d %s">%d</td>', $day->format('w'), 65 $todayClass, $day->format('d')); 66 } 67 return $body; 68 } 69 70 private function _getHead() { 71 $head = ''; 72 $firstDayOfNextMonth = new \DateTime('first day of ' . $this->yearMonth . ' +1 month'); 73 while ($firstDayOfNextMonth->format('w') > 0) { 74 $head .= sprintf('<td class="gray">%d</td>', $firstDayOfNextMonth->format('d')); 75 $firstDayOfNextMonth->add(new \DateInterval('P1D')); 76 } 77 return $head; 78 } 79 80} 81
試したこと
hrefを使うがうまく遷移せず
補足情報(FW/ツールのバージョンなど)
PHP 7.1.33
回答1件
あなたの回答
tips
プレビュー