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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1136閲覧

php クリックできるカレンダー クリック後について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/02/25 11:41

編集2022/02/25 12:06

ド初心者です。
phpの練習としてカレンダーを作っています。

カレンダーの日付をクリックしたら、クリックされた日付から7日間分それぞれの時間枠(下の画像)を表示する様にしたいのですが…

イメージ説明

1,クリック移動先のphp.ファイルを作る
2,for文内の変数$linkに aタグhref="作成したphpファイル" を記述
3,日付の値を送信できる状態にする
4,移動先phpファイルで値を受け取り、その日+6日間を表示する

みたいな感じかなと思い、もがいてみたのですが無理でした。

javascriptで取得すればいいかなと思いやってみましたが、ド初心者では最初の1しか取得できませんでした。

for文で出力し、クリックされた日付をどうやって取得するのか…できればもうちょっと先まで教えて欲しいです。
よろしくお願いします。

↓の★★★が日付(リンク)部分です。

コード // タイムゾーンを設定 date_default_timezone_set('Asia/Tokyo'); // 前月・次月リンクが押された場合は、GETパラメーターから年月を取得 if (isset($_GET['ym'])) { $ym = $_GET['ym']; } else { // 今月の年月を表示 $ym = date('Y-m'); } // タイムスタンプを作成し、フォーマットをチェックする $timestamp = strtotime($ym . '-01'); if ($timestamp === false) { $ym = date('Y-m'); $timestamp = strtotime($ym . '-01'); } // 今日の日付 フォーマット 例)2021-06-3 $today = date('Y-m-j'); // カレンダーのタイトルを作成 例)2021年6月 $html_title = date('Y年n月', $timestamp); // 前月・次月の年月を取得 // 方法1:mktimeを使う mktime(hour,minute,second,month,day,year) $prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp))); $next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp))); // 方法2:strtotimeを使う // $prev = date('Y-m', strtotime('-1 month', $timestamp)); // $next = date('Y-m', strtotime('+1 month', $timestamp)); // 該当月の日数を取得 $day_count = date('t', $timestamp); // 1日が何曜日か 0:日 1:月 2:火 ... 6:土 // 方法1:mktimeを使う $youbi = date('w', mktime(0, 0, 0, date('m', $timestamp), 1, date('Y', $timestamp))); // 方法2 // $youbi = date('w', $timestamp); // カレンダー作成の準備 $weeks = []; $week = ''; // 第1週目:空のセルを追加 // 例)1日が火曜日だった場合、日・月曜日の2つ分の空セルを追加する $week .= str_repeat('<td></td>', $youbi); // <= (以下) for ( $day = 1; $day <= $day_count; $day++, $youbi++) { // 2021-06-3 $date = $ym . '-' . $day; ★★★★★★★★ $link = '<a class="day" ' . $date . '>' . $day . '</a>'; if ($today == $date) { // 今日の日付の場合は、class="today"をつける // ★このif文で各日付マスを作成している。<a>タグを付け足し、日付をクリックできるようにした。 // $week .= '<td class="today"><a href="index.php">' . $day ; $week .= '<td class="today cell-link" >' . $link . '</td>'; } else { // $week .= '<td><a href="index.php">' . $day ; $week .= '<td class="cell-link" >' . $link . '</td>'; } $week .= '</a></td>'; // 週終わり、または、月終わりの場合 if ($youbi % 7 == 6 || $day == $day_count) { if ($day == $day_count) { // 月の最終日の場合、空セルを追加 // 例)最終日が水曜日の場合、木・金・土曜日の空セルを追加 $week .= str_repeat('<td></td>', 6 - $youbi % 7); } // weeks配列にtrと$weekを追加する $weeks[] = '<tr>' . $week . '</tr>'; // weekをリセット $week = ''; } } ?> <style> .container { font-family: 'Noto Sans JP', sans-serif; margin-top: 10px; } a { text-decoration: none; } th { height: 30px; text-align: center; } td { height: 30px; } td:hover { background-color: yellow; } .today { background: orange !important; } /* th:nth-of-type(n) n番目の要素を指定できる この場合1番目のth(見出し文字色)とtd(列の背景色)を指定 */ th:nth-of-type(1), td:nth-of-type(1) { background-color:#ffe4e1; color: red ; } th:nth-of-type(7), td:nth-of-type(7) { background-color:#e0ffff; color: blue; } .cell-link { padding: 0; height: 0; } .cell-link a{ height: 100%; padding: 0px 5px; display: flex; align-items: center; } <?php if ( $week < strtotime(date('Y-m-d'))) { ?> a .day { pointer-events: none; } <?php } ?> </style> <div class="container"> <h3 class="mb-5" ><a class="tuki" href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a class="tuki" href="?ym=<?php echo $next; ?>">&gt;</a></h3> <table class="table table-bordered"> <tr> <th>日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th>土</th> </tr> <?php foreach ($weeks as $week) { echo $week; } ?> </table> </div>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/02/25 12:08

修正しました!よろしくお願いしますm(__)m
guest

回答1

0

ベストアンサー

いずれにしても何かしらの形で「指定した日」を渡す必要があります。
現状の流れからすると、ymを送信しているときと同じく、ymdとしてリクエストに含めるのが良いです。

形式は結局date()などでフォーマットするので認識できるのであればどのような形でも良いのですが、Y-m-dのようなので、

PHP

1.php?ymd=<?php echo $date ?>

ですかね(dは可能なら2桁ゼロ埋めしたほうが良いですけど)
そうすると送信先で$_GET["ymd"]で指定した日付が受け取れます。

投稿2022/02/25 12:19

編集2022/02/25 12:21
m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2022/02/25 14:58

回答ありがとうございます!m(__)m .php?ymd=<?php echo $date ?> ↑をどこにどのように記述すればいいでしょうか? php内のfor文か、htmlの方のforeachの方でしょうか? ド素人で申し訳ありません(T_T)
退会済みユーザー

退会済みユーザー

2022/02/25 15:10

わかりました! aタグの中ですよね?↓↓ やってみます! a href="http~~.php?ymd=<?php echo $date ?>"
退会済みユーザー

退会済みユーザー

2022/02/25 15:31

$link = '<a class="day" href="~~~~.php?ymd= '. $date .'">' . $day . '</a>'; からの  echo $_GET["ymd"];  できました~!!!ありがとうございます!!!m(__)m
m.ts10806

2022/02/25 20:01

解決されたようで何よりです。 ひとまず「リクエストとレスポンス」についておさえたら良いかと思います。 「なぜこれで出来るのか」を理解しておくとあらゆる場面で対応できるようになります。 あと質問が受付中のままになっているので解決済みにしておいてください。
退会済みユーザー

退会済みユーザー

2022/03/01 14:09

ご丁寧にありがとうございました! 回答を見てから割と早く理解できてうれしかったです。 今回に関しては完全に理解できました! またお願い致しますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問