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

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

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

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

Q&A

解決済

3回答

1901閲覧

phpで作ったカレンダーを来月の分も表示されるようにしたい

ararara

総合スコア13

PHP

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

0グッド

0クリップ

投稿2019/08/09 12:04

編集2019/08/09 12:29

phpを使ってカレンダーを作ったのですが右のリンクをクリックしても来月のものが表示されず、他の月から右のリンクをクリックすると一気に来月まで飛んでしまいます。

コード<?php date_default_timezone_set('Asia/Tokyo'); 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'); } $today = date('Y-m-j', time()); $html_title=date('Y年n月', $timestamp); $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))); $day_count=date('t',$timestamp); $youbi=date('w', mktime(0, 0, 0, date('m',$timestamp),1,date('Y',$timestamp))); $weeks = []; $week = ''; $week .= str_repeat('<td></td>',$youbi); for( $day=1; $day <= $day_count; $day++, $youbi++){ $date = $ym .'-'. $day; if($today == $date){ $week .= '<td class="today">' . $day; } else{ $week .= '<td>'. $day;} $week .= '</td>'; if($youbi % 7 == 6 || $day == $day_count){ if($day == $day_count){ $week .= str_repeat('<td></td>', 6- ($youbi % 7)); } $weeks[] = '<tr>' . $week . '</tr>'; $week = ''; } } ?> <!DOCTYPE html> <html lang='ja'> <head> <meta charset='utf-8'> <title>PHPカレンダー</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP&display=swap" rel="stylesheet"> <style> .container{ font-family: 'Noto Sans JP', sans-serif; margin-top: 80px;} h3{margin-bottom:30px;} th{height: 30px; text-align: center;} td{height:30px; } .today{ background: green; } th:nth-of-type(1),td:nth-of-type(1){color :red; } th:nth-of-type(7),td:nth-of-type(7){color:blue;} </style> </head> <body> <div class='container'> <h3><a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a 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> </body> </html>

ご教授お願いいたします。

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

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

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

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

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

m.ts10806

2019/08/09 12:26

えーっと、 文章は消えてますし、マークダウンもできてませんが・・・ 投稿前に画面右側に出ているプレビュー確認してください。 このマークダウンの対応は技術系のQAサイトは大事ですので覚えてくださいね。
退会済みユーザー

退会済みユーザー

2019/08/09 12:31 編集

指定の年月を出力する処理を関数化して、当月と+1月したものを出力する、って考え方じゃダメでしょうか?→あ、ごめん、意図を履き違えた。
guest

回答3

0

ベストアンサー

前月のリンクをクリックすると開かれるURLは、
http://********/test.php?ym=2019-07

翌月のリンクをクリックすると開かれるURLは、
http://********/test.php?ym2019-09

GETでパラメータを渡す場合、[name=value]の形式である必要があります。
なので、翌月のリンクは本来[ym=2019-09]であるべきです。

PHP

1<h3><a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a href="?ym<?php echo $next; ?>">&gt;</a></h3>

よく見て下さい。

PHP

1<a href="?ym=<?php echo $prev; ?>">&lt;</a> 2<a href="?ym<?php echo $next; ?>">&gt;</a>

どこが違いますか?

投稿2019/08/09 12:34

Take_it

総合スコア357

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

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

0

php

1<a href="?ym<?php echo $next; ?>">&gt;</a></h3> 2<table class="table table-bordered"> 3 45 6<a href="?ym=<?php echo $next; ?>">&gt;</a></h3> 7<table class="table table-bordered">

>で遷移した時のURL見てみると原因わかりますよ。

追記:
コードインデントはつけられたほうが読みやすいです。
コードフォーマット機能のついたエディタ、できればIDE導入を強くすすめます。

以下はEclipseのコードフォーマットの結果

php

1<?php 2date_default_timezone_set('Asia/Tokyo'); 3 4if (isset($_GET['ym'])) { 5 $ym = $_GET['ym']; 6} else { 7 8 $ym = date('Y-m'); 9} 10 11$timestamp = strtotime($ym . '-01'); 12if ($timestamp === false) { 13 $ym = date('Y-m'); 14 $timestamp = strtotime($ym . '-01'); 15} 16 17$today = date('Y-m-j', time()); 18 19$html_title = date('Y年n月', $timestamp); 20 21$prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp) - 1, 1, date('Y', $timestamp))); 22$next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp) + 1, 1, date('Y', $timestamp))); 23 24$day_count = date('t', $timestamp); 25$youbi = date('w', mktime(0, 0, 0, date('m', $timestamp), 1, date('Y', $timestamp))); 26$weeks = []; 27$week = ''; 28$week .= str_repeat('<td></td>', $youbi); 29 30for ($day = 1; $day <= $day_count; $day ++, $youbi ++) { 31 $date = $ym . '-' . $day; 32 if ($today == $date) { 33 $week .= '<td class="today">' . $day; 34 } else { 35 $week .= '<td>' . $day; 36 } 37 $week .= '</td>'; 38 if ($youbi % 7 == 6 || $day == $day_count) { 39 if ($day == $day_count) { 40 $week .= str_repeat('<td></td>', 6 - ($youbi % 7)); 41 } 42 $weeks[] = '<tr>' . $week . '</tr>'; 43 $week = ''; 44 } 45} 46?> 47<!DOCTYPE html> 48<html lang='ja'> 49<head> 50<meta charset='utf-8'> 51<title>PHPカレンダー</title> 52<link rel="stylesheet" 53 href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 54 integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" 55 crossorigin="anonymous"> 56 57<link 58 href="https://fonts.googleapis.com/css?family=Noto+Sans+JP&display=swap" 59 rel="stylesheet"> 60<style> 61.container { 62 font-family: 'Noto Sans JP', sans-serif; 63 margin-top: 80px; 64} 65 66h3 { 67 margin-bottom: 30px; 68} 69 70th { 71 height: 30px; 72 text-align: center; 73} 74 75td { 76 height: 30px; 77} 78 79.today { 80 background: green; 81} 82 83th:nth-of-type(1), td:nth-of-type(1) { 84 color: red; 85} 86 87th:nth-of-type(7), td:nth-of-type(7) { 88 color: blue; 89} 90</style> 91</head> 92<body> 93 <div class='container'> 94 <h3> 95 <a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a 96 href="?ym=<?php echo $next; ?>">&gt;</a> 97 </h3> 98 <table class="table table-bordered"> 99 <tr> 100 <th></th> 101 <th></th> 102 <th></th> 103 <th></th> 104 <th></th> 105 <th></th> 106 <th></th> 107 108 </tr> 109<?php 110foreach($weeks as $week){ 111echo $week; 112} 113?> 114</table> 115 </div> 116</body> 117</html>

投稿2019/08/09 12:36

編集2019/08/09 12:38
m.ts10806

総合スコア80850

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

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

0

<a href="?ym<?php echo $next; ?>">&gt;</a>

じゃなくて

<a href="?ym=<?php echo $next; ?>">&gt;</a>

投稿2019/08/09 12:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問