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

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

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

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

Q&A

解決済

1回答

348閲覧

カレンダー作成中です。

banianizm

総合スコア92

PHP

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

0グッド

0クリップ

投稿2018/09/18 11:54

お世話になります。
phpにてカレンダー作成中です。
カレンダーの右上に矢印のリンクを貼ってGETで前月、次月を表示したいのですが上手くいきません。どのようにすれば表示できるのでしょうか?キャプチャ

php

1<center> 2<table border="1"> 3今月のカレンダー 4 5 6<a href="?ym=<?php echo $prev; ?>">&laquo;</a> 7<a href="?ym=<?php echo $next; ?>">&raquo;</a> 8<tr> 9<th></th> 10<th></th> 11<th></th> 12<th></th> 13<th></th> 14<th></th> 15<th></th> 16</tr> 17<tr> 18<?php 19// 年月を取得する 20$ym_now = date("Ym"); 21$y = substr($ym_now, 0, 4); 22$m = substr($ym_now, 4, 2); 23// 1日の曜日を取得 24$wd1 = date("w", mktime(0, 0, 0, $m, 1, $y)); 25 26// その数だけ空白を表示 27for ($i = 1; $i <= $wd1; $i++) { 28 echo "<td> </td>"; 29} 30 31 32 33$d = 1; 34while (checkdate($m, $d, $y)) { 35 echo "<td>$d</td>"; 36 // 今日が土曜日の場合は… 37 if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6) { 38 // 週を終了 39 echo "</tr>"; 40 41 // 次の週がある場合は新たな行を準備 42 if (checkdate($m, $d + 1, $y)) { 43 echo "<tr>"; 44 } 45 } 46 $d++; 47} 48 49// 最後の週の土曜日まで移動 50$wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y)); 51for ($i = 1; $i < 7 - $wdx; $i++) { 52 echo "<td> </td>"; 53} 54?> 55</tr> 56</table> 57</center>``` 58 59 60よろしくお願い致します。

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

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

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

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

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

m.ts10806

2018/09/18 12:27

タイトルには要件を記載してください。またコードは```で囲いますが前後に改行を入れないとコードとして認識されず、今のようにそのまま表示されてしまいます。正常にできているかどうかは質問編集画面でリアルタイムプレビューがでるので、そちらを確認しながら調整してださい
m.ts10806

2018/09/18 12:28

あと「うまくいかない」だけでは何が起きているか伝わりませんので、起きている現象、問題、エラーメッセージを具体的に記載してください
banianizm

2018/09/18 12:29

申し訳ございません。
m.ts10806

2018/09/18 12:32

いえ怒っているとかそういうのではありませんよ。質問内容が見やすくなっているのと充実しているのは回答もつきやすくなりますし問題の解決を早めます。質問は編集できますので適宜対応していただければと。
papinianus

2018/09/18 13:32

$prev、$nextが未定義だと思うのですが、もっと全体のコードをはってください。もしこれが全体なら参考にしたサイトなどがあれば追記してください
papinianus

2018/09/18 13:54

拝見しましたが、$prev/$nextはありませんね。オリジナルに追加したということでしょうか?とりあえず、先頭の行で$prev=8, $next=10としてはいかがでしょう?
guest

回答1

0

ベストアンサー

GETパラメータ受け取ってるような部分が見当たりません。
$_REQUESTなりfilter_inputで取得して使わないといけません

とりあえずサンプル(なるべくコードは流用したつもり)

php

1<html> 2<head> 3</head> 4<body> 5<center> 6 <table border="1"> 7<?php 8 // 年月を取得する 9 $y = $_REQUEST['y'] ?? date("Y"); 10 $m = $_REQUEST['m'] ?? date("m"); 11 12 // 1日の曜日を取得 13 $wd1 = date("w", mktime(0, 0, 0, $m, 1, $y)); 14 15 // 年とりあえず同じ年 16 $prevY = $nextY = $y; 17 18 // 一ヶ月前 19 $prevM = $m - 1; 20 if($prevM < 1) { 21 $prevM = 12; 22 $prevY--; 23 } 24 // 一ヶ月後 25 $nextM = $m + 1; 26 if($nextM > 12) { 27 $nextM = 1; 28 $nextY++; 29 } 30 31 print <<< EOM 32 {$y}{$m}月のカレンダー 33 <a href="?y={$prevY}&m={$prevM}" />&laquo;</a> 34 <a href="?y={$nextY}&m={$nextM}" />&raquo;</a> 35EOM; 36?> 37 <tr> 38 <th></th> 39 <th></th> 40 <th></th> 41 <th></th> 42 <th></th> 43 <th></th> 44 <th></th> 45 </tr> 46 <tr> 47<?php 48 49 // その数だけ空白を表示 50 for ($i = 1; $i <= $wd1; $i++) { 51 echo "<td> </td>"; 52 } 53 54 $d = 1; 55 while (checkdate($m, $d, $y)) { 56 echo "<td>$d</td>"; 57 58 // 今日が土曜日の場合は… 59 if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6) { 60 // 週を終了 61 echo "</tr>"; 62 63 // 次の週がある場合は新たな行を準備 64 if (checkdate($m, $d + 1, $y)) { 65 echo "<tr>"; 66 } 67 } 68 69 $d++; 70 } 71 72 // 最後の週の土曜日まで移動 73 $wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y)); 74 for ($i = 1; $i < 7 - $wdx; $i++) { 75 echo "<td> </td>"; 76 } 77?> 78 </tr> 79 </table> 80</center> 81</body> 82</html>

投稿2018/09/18 14:01

編集2018/09/18 14:28
rururu3

総合スコア5545

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

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

banianizm

2018/09/18 14:17

凄いです! ありがとうございます。 これからコード解読しますが、まさに目的はこちらでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問