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

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

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

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

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

Q&A

解決済

1回答

726閲覧

PHPで作ったカレンダーの日付に個々の数字を$_GETで表示、クリックで遷移ページへ渡したい

pokkun

総合スコア11

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

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

0グッド

0クリップ

投稿2020/06/13 06:08

ドットインストールを参考に、PHPでカレンダーを作ったのですが、マウスを載せた時(&クリックしたとき)にその日付を表す数字のURL(例えばcalendar.php?cal=200613みたいに表す)を取得したいのですが、While文で出力した数字を個別に$_GETで値を取得できないのです。。。( ;∀;)

試したこと

$tailが先月末日までの日付、$headが来月1日からの日付、$bodyが当月の日付なので$bodyをWhile文で出力したものが当月の日付になると思うのですが、オンマウスしたときと、クリックしたときにそれぞれの値を$GETに代入してみたのですが、うまく代入できませんでした。sprintfにaタグを張って、遷移先のURL以下、何か値を書くべきだと思うのですが・・

PHP

1<?php 2 3function h($s) { 4 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 5} 6 7 8try { 9 if (!isset($_GET['t']) || !preg_match('/\A\d{4}-\d{2}\z/', $_GET['t'])) { 10 throw new Exception(); 11 } 12 $thisMonth = new DateTime($_GET['t']); 13} catch (Exception $e) { 14 $thisMonth = new DateTime('first day of this month'); 15} 16 17$dt = clone $thisMonth; 18$prev = $dt->modify('-1 month')->format('Y-m'); 19$dt = clone $thisMonth; 20$next = $dt->modify('+1 month')->format('Y-m'); 21 22 23$yearMonth = $thisMonth->format('F Y'); 24 25$tail = ''; 26$lastDayOfPrevMonth = new DateTime('last day of ' . $yearMonth . ' -1 month'); 27while ($lastDayOfPrevMonth->format('w') < 6) { 28 $tail = sprintf('<td class="gray">%d</td>', $lastDayOfPrevMonth->format('d')) . $tail; 29 $lastDayOfPrevMonth->sub(new DateInterval('P1D')); 30} 31 32$body = ''; 33$period = new DatePeriod( 34 new DateTime('first day of ' . $yearMonth), 35 new DateInterval('P1D'), 36 new DateTime('first day of ' . $yearMonth . ' +1 month') 37); 38$today = new DateTime('today'); 39foreach ($period as $day) { 40 if ($day->format('w') % 7 === 0) { $body .= '</tr><tr>'; } 41 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 42 $body .= sprintf('<td class="youbi_%d %s"><a href="calendar_edit.php?">%d</a></td>', $day->format('w'), $todayClass, $day->format('d')); 43} 44 45$head = ''; 46$firstDayOfNextMonth = new DateTime('first day of ' . $yearMonth . ' +1 month'); 47while ($firstDayOfNextMonth->format('w') > 0) { 48 $head .= sprintf('<td class="gray">%d</td>', $firstDayOfNextMonth->format('d')); 49 $firstDayOfNextMonth->add(new DateInterval('P1D')); 50} 51 52$html = '<tr>' . $tail . $body . $head . '</tr>'; 53 54?> 55 56<!DOCTYPE html> 57<html lang="ja"> 58<head> 59 <meta charset="UTF-8"> 60 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 61 <title>カレンダー</title> 62</head> 63<body> 64<table border="1"> 65<thead> 66<tr> 67 <th><a href="?t=<?php echo h($prev); ?>">&laquo;</a></th> 68 <th colspan="5"><?php echo $yearMonth; ?></th> 69 <th><a href="?t=<?php echo h($next); ?>">&raquo;</a></th> 70 71</tr> 72</thead> 73 74<tbody> 75<tr> 76 <td>Sun</td> 77 <td>Mon</td> 78 <td>Tue</td> 79 <td>Wed</td> 80 <td>Thu</td> 81 <td>Fri</td> 82 <td>Sat</td> 83</tr> 84<?php echo $html; ?> 85 <!-- <td class="youbi_0">1</td> 86 <td class="youbi_1">2</td> 87 <td class="youbi_2">3</td> 88 <td class="youbi_3">4</td> 89 <td class="youbi_4 today">5</td> 90 <td class="youbi_5">6</td> 91 <td class="youbi_6"></td> 92</tr> 93 94<tr> 95 <td class="youbi_0">30</td> 96 <td class="youbi_1">31</td> 97 <td class="gray">1</td> 98 <td class="gray">2</td> 99 <td class="gray">3</td> 100 <td class="gray">4</td> 101 <td class="gray">5</td> --> 102</tr> 103</tbody> 104<tfoot> 105<tr> 106<th colspan="7"><a href="/">Today</a></th> 107</tr> 108</tfoot> 109</table> 110<style> 111 112 body { 113 font-size:25px; 114 background-image: url("member_picture/top_background2.png"); 115 } 116 117 a { 118 text-decoration:none; 119 } 120 121 table { 122 margin:14px auto; 123 border-collapse:collapse; 124 border:1px solid #ddd; 125 } 126 127 th { 128 background:#FFFACD; 129 } 130 131 td { 132 background:#FAF0E6; 133 } 134 135 th, td { 136 padding:7px; 137 text-align:center; 138 } 139 140 .youbi_0 { 141 color:red; 142 } 143 144 .youbi_6 { 145 color:blue; 146 } 147 148 .today { 149 font-weight:bold; 150 background-color:#AEFFBD; 151 } 152 153 .gray { 154 color:#dedede; 155 } 156 157</style> 158</body> 159</html>

お手数ですが、もしわかる方いらっしゃいましたらアドバイスをいただけると大変ありがたいです(^-^)

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

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

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

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

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

guest

回答1

0

ベストアンサー

ブラウザに出力されたHTMLを確認してみると分かりますが。
><a href="calendar_edit.php?">1</a>
になってます。

コードも

$body .= sprintf('<td class="youbi_%d %s"><a href="**calendar_edit.php?**">%d</a></td>', $day->format('w'), $todayClass, $day->format('d'));

となってますね。

「取得していない」のではなく「何も設定していない」です。

とりあずこうでしょうか。

php

1 $body .= sprintf('<td class="youbi_%d %s"><a href="calendar_edit.php?cal=%s">%d</a></td>', $day->format('w'), $todayClass, $day->format('Ymd'),$day->format('d')); 2

投稿2020/06/13 23:52

m.ts10806

総合スコア80765

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

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

pokkun

2020/06/14 01:32

アドバイス大変助かりました!単純なことで失礼いたしました。また、sprintfの理解も間違えておりましたので大変参考になりました。ありがとうございます!
m.ts10806

2020/06/14 01:44

>sprintfの理解も間違えておりましたので どこでしょうか? 私はあくまで「なにも設定してないことが問題」としているのでsprintf以前の問題と思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問