実現したいこと
PHPで出力したカレンダーの日にちをリンクにして、その日にちをタッチしたらmenupost.phpに行けるようにしたいです。
現状
現在webサービスを開発しています。カレンダーの日にちを押したら別ファイルの予定入力ページに飛ぶようなプログラムを作りたいと思ったのですが、上手く変数の出力をリンクにすることができなっかったので質問させていただきました。
該当のソースコード
php
1// ccalendar.php 2<?php 3require_once '../libs/init.php'; 4// タイムゾーンを設定 5date_default_timezone_set('Asia/Tokyo'); 6 7// 前月・次月リンクが押された場合は、GETパラメーターから年月を取得 8if (isset($_GET['ym'])) { 9 $ym = $_GET['ym']; 10} else { 11 // 今月の年月を表示 12 $ym = date('Y-m'); 13} 14 15if (isset($_GET['ymd'])) { 16 $ymd = $_GET['ymd']; 17} 18 19// タイムスタンプを作成し、フォーマットをチェックする 20$timestamp = strtotime($ym . '-01'); 21if ($timestamp === false) { 22 $ym = date('Y-m'); 23 $timestamp = strtotime($ym . '-01'); 24} 25 26// 今日の日付 フォーマット 例)2018-07-3 27$today = date('Y-m-j'); 28 29// カレンダーのタイトルを作成 例)2017年7月 30$html_title = date('Y年n月', $timestamp); 31 32// 前月・次月の年月を取得 33// 方法1:mktimeを使う mktime(hour,minute,second,month,day,year) 34$prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp))); 35$next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp))); 36 37// 方法2:strtotimeを使う 38// $prev = date('Y-m', strtotime('-1 month', $timestamp)); 39// $next = date('Y-m', strtotime('+1 month', $timestamp)); 40 41// 該当月の日数を取得 42$day_count = date('t', $timestamp); 43 44// 1日が何曜日か 0:日 1:月 2:火 ... 6:土 45// 方法1:mktimeを使う 46$youbi = date('w', mktime(0, 0, 0, date('m', $timestamp), 1, date('Y', $timestamp))); 47// 方法2 48// $youbi = date('w', $timestamp); 49 50 51// カレンダー作成の準備 52$weeks = []; 53$week = ''; 54 55// 第1週目:空のセルを追加 56// 例)1日が水曜日だった場合、日曜日から火曜日の3つ分の空セルを追加する 57$week .= str_repeat('<td></td>', $youbi); 58 59for ( $day = 1; $day <= $day_count; $day++, $youbi++) { 60 $date = $ym . '-' . $day; 61 62 if ($today == $date) { 63 // 今日の日付の場合は、class="today"をつける 64 $week .= '<td class="today">' . $day; 65 } else { 66 $week .= '<td>' . $day; 67 } 68 $week .= '</td>'; 69 70 // 週終わり、または、月終わりの場合 71 if ($youbi % 7 == 6 || $day == $day_count) { 72 73 if ($day == $day_count) { 74 // 月の最終日の場合、空セルを追加 75 // 例)最終日が木曜日の場合、金・土曜日の空セルを追加 76 $week .= str_repeat('<td></td>', 6 - ($youbi % 7)); 77 } 78 79 // weeks配列にtrと$weekを追加する 80 $weeks[] = '<tr>' . $week . '</tr>'; 81 82 // weekをリセット 83 $week = ''; 84 } 85} 86?> 87<!DOCTYPE html> 88<html lang="ja"> 89<head> 90 <meta charset="utf-8"> 91 <title>PHPカレンダー</title> 92 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 93 <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP" rel="stylesheet"> 94 <style> 95 .container { 96 font-family: 'Noto Sans JP', sans-serif; 97 margin-top: 80px; 98 } 99 h3 { 100 margin-bottom: 30px; 101 } 102 th { 103 height: 30px; 104 text-align: center; 105 } 106 td { 107 height: 100px; 108 } 109 .today { 110 background: orange; 111 } 112 th:nth-of-type(1), td:nth-of-type(1) { 113 color: red; 114 } 115 th:nth-of-type(7), td:nth-of-type(7) { 116 color: blue; 117 } 118 </style> 119</head> 120<body> 121 <div class="container"> 122 <h3><a href="?ym=<?php echo $prev; ?>"><</a> <?php echo $html_title; ?> <a href="?ym=<?php echo $next; ?>">></a></h3> 123 <table class="table table-bordered"> 124 <tr> 125 <th>日</th> 126 <th>月</th> 127 <th>火</th> 128 <th>水</th> 129 <th>木</th> 130 <th>金</th> 131 <th>土</th> 132 </tr> 133 <?php 134 foreach ($weeks as $week) { 135 // ここで$weekのデータをリンクにして表示しようとしています。 136 echo "<a href='menupost.php?ymd={$date}'>".$week."</a>"; 137 } 138 ?> 139 </table> 140 </div> 141</body> 142</html>
試したこと
echo ‘<a href=“?ymd=<?php echo $week ?>“>‘.$week.‘</a>’
こうしましたが “> と表示されてそれがリンクになってしまいます。
- echo "<a href='menupost.php?ymd={$date}'>".$week."</a>";
こちらの方法だとリンクではなく普通に日にちが表示されてしまいます。
補足情報
日にちが表示されなくなり、曜日の上に31というリンクが5個出てきます。
以上です。
ご回答よろしくお願いします。
また、ご不明な点があれば教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/01 21:30
退会済みユーザー
2020/09/02 00:57 編集
2020/09/02 08:00