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

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

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

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

HTML

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

Q&A

1回答

1117閲覧

予定表機能付きカレンダーに先月・次月ボタンを実装したい

Question_php

総合スコア0

PHP

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

HTML

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

0グッド

0クリップ

投稿2021/11/30 01:22

編集2021/11/30 01:46

前提・実現したいこと

予定表機能付きカレンダーに先月・次月ボタンを実装したいです
phpやhtml初心者でどこに問題が生じているかわからず、質問させて頂きました。

実装したい機能の部分に注釈(//追加したい箇所)をつけておきます

発生している問題・エラーメッセージ

先月、次月ボタンを押しても今月基準で前後一か月しか移動できない

該当のソースコード

Reminder.php

php

1<html> 2<head> 3<link rel="stylesheet" type="text/css" href="style.css" /> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5<title>予定表</title> 6</head> 7<body> 8<h1>予定表</h1> 9<p>予定を登録する日を選択してください。</p> 10<?php 11 12//追加したい箇所1か所目 ここから 13 14if (isset($_POST["y"])) { 15 // 選択された年月を取得する 16 $y = intval($_POST["y"]); 17 $m = intval($_POST["m"]); 18} else { 19 // 現在の年月を取得する 20 $ym_now = date("Ym"); 21 $y = substr($ym_now, 0, 4); 22 $m = substr($ym_now, 4, 2); 23}; 24 25if (isset($_POST['last'])){ 26 //"先月"ボタンを押した際mの数値を-1する 27 $m = $m-1; 28 if($m == 0){ 29 $y--; 30 $m = 12; 31 } 32}; 33 34//ここまで 35 36if (isset($_POST['next'])){ 37 //"次月"ボタンを押した際mの数値を+1する 38 $m = $m+1; 39 if($m == 13){ 40 $y++; 41 $m = 1; 42 } 43}; 44 45// 年月選択リストを表示する 46echo "<form method='POST' action=''>"; 47 48// 年 49echo "<select name='y'>"; 50for ($i = $y - 2; $i <= $y + 2; $i++) { 51 echo "<option"; 52 if ($i == $y) { 53 echo " selected "; 54 } 55 echo ">$i</option>"; 56} 57echo "</select>年"; 58 59// 月 60echo "<select name='m'>"; 61for ($i = 1; $i <= 12; $i++) { 62 echo "<option"; 63 if ($i == $m) { 64 echo " selected "; 65 } 66 echo ">$i</option>"; 67} 68echo "</select>月"; 69echo "<input id='month' type='submit' value='表示' name='sub1' onchange = 'MonthGet()'>"; 70echo "</form>"; 71?> 72 73<!-- カレンダーの表示 --> 74<table border="2" style="border-collapse: collapse" width="300" height="150"> 75<!-- 月の表示 --> 76 77//追加したい箇所2か所目 ここから 78 79 <caption align="top"> 80 <form action="Reminder.php" method="post"> 81 <button imput id='month' type='submit' name='last'>先月</button> 82 </form> 83 <font size="6"> 84 <?php 85 echo $m; echo"月"; 86 ?> 87 </font> 88 <form action="Reminder.php" method="post"> 89 <button imput id='month' type='submit' name='next'>次月</button> 90 </form> 91 </caption> 92 93//ここまで 94 95<tr> 96<th style="color:magenta"></th> 97<th></th> 98<th></th> 99<th></th> 100<th></th> 101<th></th> 102<th style="color:cyan"></th> 103</tr> 104<tr> 105<?php 106// 1日の曜日まで移動 107$wd1 = date("w", mktime(0, 0, 0, $m, 1, $y)); 108for ($i = 1; $i <= $wd1; $i++) { 109 echo "<td align=\"center\" valign=\"top\"> </td>"; 110} 111 112$d = 1; 113while (checkdate($m, $d, $y)) { 114 // 日付リンクの表示 115 $link = "schedule.php?ymd=%04d%02d%02d"; 116 echo "<td align=\"center\" valign=\"top\"><a href=\"" . sprintf($link, $y, $m, $d) . "\">{$d}</a></td>"; 117 118 // 今日が土曜日の場合の処理 119 if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6) { 120 // 週を終了 121 echo "</tr>"; 122 123 // 次の週がある場合は新たな行を準備 124 if (checkdate($m, $d + 1, $y)) { 125 echo "<tr>"; 126 } 127 } 128 129 // 日付を1つ進める 130 $d++; 131} 132 133// 最後の週の土曜日まで移動 134$wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y)); 135for ($i = 1; $i < 7 - $wdx; $i++) { 136 echo "<td> </td>"; 137} 138?> 139</tr> 140</table> 141</body> 142</html>

schedule.php (スケジュールを登録するためのphpです。問題の箇所とは無関係です)

<?php // 年月日を取得する if (isset($_GET["ymd"])) { // スケジュールの年月日を取得する $ymd = basename($_GET["ymd"]); $y = intval(substr($ymd, 0, 4)); $m = intval(substr($ymd, 4, 2)); $d = intval(substr($ymd, 6, 2)); $disp_ymd = "{$y}年{$m}月{$d}日のスケジュール"; // スケジュールデータを取得する $file_name = "data/{$ymd}.txt"; if (file_exists($file_name)) { $schedule = file_get_contents($file_name); } else { $schedule = ""; } } else { // カレンダー画面に強制移動する header("Location: Reminder.php"); } // スケジュールを更新する if (isset($_POST["action"]) and $_POST["action"] == "登録する") { $schedule = htmlspecialchars($_POST["schedule"], ENT_QUOTES, "UTF-8"); // スケジュールが入力されたか調べて処理を分岐 if (!empty($schedule)) { // 入力された内容でスケジュールを更新 file_put_contents($file_name, $schedule); } else { // スケジュールが空の場合はファイルを削除 if (file_exists($file_name)) { unlink($file_name); } } // カレンダー画面に移動する header("Location: Reminder.php"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>予定表</title> </head> <body> <h1>予定表 登録画面</h1> <form method="POST" action=""> <table> <tr> <td><?php echo $disp_ymd; ?></td> </tr> <tr> <td> <textarea rows="10" cols="50" name="schedule"><?php echo $schedule; ?></textarea> </td> </tr> <tr> <td> <input type="submit" name="action" value="登録する"> <!-- 「戻る」ボタン --> <input type="button" name="back" onClick="history.back()" value="戻る"> </td> </tr> </table> </form> </body> </html>

試したこと

先月ボタンを押したとき月の数値($m)をマイナス1するなどためしましたが、うまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

Visual studio code
バージョンは現時点の最新です

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

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

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

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

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

skys215

2021/11/30 03:28

if (isset($_POST['last'])){  の前に var_dump($m); を足して、毎回先月を押すたびにあってるかどうか試して見てください。
Question_php

2021/12/03 04:43

ご回答ありがとうございます。 試してみましたところ、動作自体は変わらず年月選択タブの上にstring(2) "12"と表示されるようになりました。
guest

回答1

0

先月をクリックした時

html

1 <form action="Reminder.php" method="post"> 2 <button imput id='month' type='submit' name='last'>先月</button> 3 </form>

yは渡してないので、$yと$mは毎回今年今月になります。
なので、$mは毎回同じ値になります。

php

1if (isset($_POST["y"])) { 2 // 選択された年月を取得する 3 $y = intval($_POST["y"]); 4 $m = intval($_POST["m"]); 5} else { 6 // 現在の年月を取得する 7 $ym_now = date("Ym"); 8 $y = substr($ym_now, 0, 4); 9 $m = substr($ym_now, 4, 2); 10}; 11 12if (isset($_POST['last'])){ 13 //"先月"ボタンを押した際mの数値を-1する 14 $m = $m-1; 15 if($m == 0){ 16 $y--; 17 $m = 12; 18 } 19};

yとmをformに追加すれば動けると思います。

投稿2021/12/03 05:27

skys215

総合スコア910

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問