質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2620閲覧

hrefを使ってもページ遷移しない

fk0617

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/04/25 04:05

編集2020/04/25 08:13

前提・実現したいこと

ドットインストールにて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); ?>">&laquo;</a></th> 27 <th colspan="5"><?php echo h($cal->yearMonth); ?></th> 28 <th><a href="/?t=<?php echo h($cal->next); ?>">&raquo;</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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/25 04:18

それに提示されたコードが全てならHTMLにおける明らかな文法違反があります。正しく動かなくても仕方がないです。
guest

回答1

0

ベストアンサー

HTMLの構文がおかしいからクリックできないだけだと思います。a要素に入れられる内容から、table全体(その場合theadの中のa要素が邪魔)か各td要素内にa要素を置くか、JavaScriptでクリックを拾うかどれかだとは思いますが、予約カレンダーなのであれば「各td要素内にa要素を置く」ことになると思います。

<tbody>: テーブル本体要素 - HTML: HyperText Markup Language | MDN】
https://developer.mozilla.org/ja/docs/Web/HTML/Element/tbody

許可されている内容 0 個以上の <tr> 要素
許可されている親要素 <table> 要素。

<a>: アンカー要素 - HTML: HyperText Markup Language | MDN】
https://developer.mozilla.org/ja/docs/Web/HTML/Element/a#Properties

許可されている内容 透過的コンテンツで、フローコンテンツ (対話型コンテンツを除く) または記述コンテンツを含むもの

【#フローコンテンツ | コンテンツカテゴリー - 開発者ガイド | MDN】
https://developer.mozilla.org/ja/docs/Web/Guide/HTML/Content_categories#Flow_content

このカテゴリーに属する要素: <a>, <abbr>, <address>, <article>, <aside>, <audio>, <b>,<bdo>, <bdi>, <blockquote>, <br>, <button>, <canvas>, <cite>, <code>, <command>, <data>, <datalist>, <del>, <details>, <dfn>, <div>, <dl>, <em>, <embed>, <fieldset>, <figure>, <footer>, <form>, <h1>, <h2>, <h3>, <h4>, <h5>, <h6>, <header>, <hgroup>, <hr>, <i>, <iframe>, <img>, <input>, <ins>, <kbd>, <keygen>, <label>, <main>, <map>, <mark>, <math>, <menu>, <meter>, <nav>, <noscript>, <object>, <ol>, <output>, <p>, <pre>, <progress>, <q>, <ruby>, <s>, <samp>, <script>, <section>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <svg>, <table>, <template>, <textarea>, <time>, <ul>, <var>, <video>, <wbr> および文字列。

投稿2020/04/25 04:57

kei344

総合スコア69606

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/04/25 08:19

追記されてますが、「新たにセルが作成されるだけで想定どうり動きません。」は入れ方がおかしい可能性が高いです。セルを追加するのではなく今あるセルの中身をa要素でくるめばよいです。
fk0617

2020/04/25 08:22

回答ありがとうございます。 「各td要素内にa要素を置く」ということですが実装の仕方がわからない為教えていただけないでしょうか。 単純に<td><a href="reservation.php"><?php echo $cal->show(); ?></a></td>としても新たにセルが追加されるだけで想定どうりいかないです。 また、private function _getBody() { 内の $tail = sprintf('<td class="gray">%d</td>',の%dの前に a hrefを追加してもうまくいかないです。 何度も恐縮ですがご回答宜しくお願いします。
kei344

2020/04/25 08:30

<a href="reservation.php"><?php echo $cal->show(); ?></a> ↓ <?php echo $cal->show(); ?> sprintf('<td class="gray">%d</td>',/*省略*/) ↓ sprintf('<td class="gray"><a href="reservation.php">%d</a></td>',/*省略*/) sprintf('<td class="youbi_%d %s">%d</td>',/*省略*/) ↓ sprintf('<td class="youbi_%d %s"><a href="reservation.php">%d</a></td>',/*省略*/) sprintf('<td class="gray">%d</td>',/*省略*/) ↓ sprintf('<td class="gray"><a href="reservation.php">%d</a></td>',/*省略*/)
fk0617

2020/04/25 14:33

うまく動きました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問