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

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

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

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

Q&A

解決済

2回答

476閲覧

phpで作ったカレンダーを出てるように

KaenTei

総合スコア8

PHP

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

0グッド

0クリップ

投稿2019/07/30 01:58

編集2019/07/30 02:18

###カレンダーを作りましたけど...

なぜページが真っ白ですか。エラーはどこですか、知りません

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

カレンダーは出てこない。

該当のソースコード

php

1<?php 2ini_set('display_errors', 1 ); 3ini_set('error_reporting', E_ALL); 4 5// タイムゾーンを設定 6date_default_timezone_set('Asia/Tokyo'); 7 8// 前月・次月リンクが押された場合は、GETパラメーターから年月を取得 9if (isset($_GET['ym'])) { 10 echo 1; 11 $ym = $_GET['ym']; 12} else { 13 echo 2; 14 // 今月の年月を表示 15 $ym = new DateTime(); 16 $ym -> format('Y-m'); 17} 18 19// 今日の日付 20echo 3; 21$today = $ym -> format('Y-m-d'); 22 23// カレンダーのタイトルを作成 例)2017年7月 24echo 4; 25$html_title = $ym -> format('Y年n月'); 26var_dump($html_title); 27 28// 前月・次月の年月を取得 29echo 5; 30$prev =$ym -> modify('last months'); 31$next =$ym -> modify('next months'); 32var_dump($prev); 33var_dump($next); 34 35// 該当月の日数を取得 36echo 6; 37$day_count = $ym -> format('t'); 38 39// 1日が何曜日か 0:日 1:月 2:火 ... 6:土 40// 方法1:mktimeを使う 41echo 7; 42$youbi = $ym -> format('w'); 43 44// カレンダー作成の準備 45echo 8; 46$weeks = []; 47$week = ''; 48 49// 第1週目:空のセルを追加 50// 例)1日が水曜日だった場合、日曜日から火曜日の3つ分の空セルを追加する 51echo 9; 52$week .= str_repeat('<td></td>', $youbi); 53 54echo 10; 55for ( $day = 1; $day <= $day_count; $day++, $youbi++) { 56 57 // 2017-07-3 58 echo 11; 59 $yearmonth=$ym -> format('Y-m'); 60 $date = $yearmonth . '-' . $day; 61 62 echo 12; 63 if ($today == $date) { 64 echo 13; 65 // 今日の日付の場合は、class="today"をつける 66 $week .= '<td class="today">' . $day; 67 } else { 68 echo 14; 69 $week .= '<td>' . $day; 70 } 71 echo 15; 72 $week .= '</td>'; 73 74 // 週終わり、または、月終わりの場合 75 echo 16; 76 if ($youbi % 7 == 6 || $day == $day_count) { 77 echo 17; 78 79 if ($day == $day_count) { 80 echo 18; 81 // 月の最終日の場合、空セルを追加 82 // 例)最終日が木曜日の場合、金・土曜日の空セルを追加 83 $week .= str_repeat('<td></td>', 6 - ($youbi % 7)); 84 } 85 86 // week配列にtrを追加する 87 echo 19; 88 $weeks[] = '<tr>' . $week . '</tr>'; 89 90 // weekをリセット 91 echo 20; 92 $week = ''; 93 } 94} 95echo 21; 96var_dump($weeks); 97?> 98 99<!DOCTYPE HTML> 100<html> 101<head> 102<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 103 104<title>PHPカレンダー</title> 105 106<link rel="stylesheet" type="text/css" href="style.css"> 107</head> 108 109<body> 110 <div class="container"> 111 <h3><a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a href="?ym=<?php echo $next; ?>">&gt;</a></h3> 112 <table class="table table-bordered"> 113 <tr> 114 <th></th> 115 <th></th> 116 <th></th> 117 <th></th> 118 <th></th> 119 <th></th> 120 <th></th> 121 </tr> 122 <?php 123 foreach ($weeks as $week) { 124 echo $week; 125 } 126 ?> 127 </table> 128 </div> 129</body> 130</html> 131

試したこと

念のため、<var_dump>を使ってチェックしましたが、問題はどこか知りません。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

azuapricot

2019/07/30 02:03

なぜページが真っ白ですか。エラーはどこですか、知りません >>知りません<<
guest

回答2

0

とりあえず$prevや$nextがDateTimeオブジェクトなので
出力にはformatが必要

PHP

1<h3><a href="?ym=<?=$prev->format('Y-m');?>">&lt;</a> <?=$html_title;?> <a href="?ym=<?=$next->format('Y-m');?>">&gt;</a></h3>

そもそもprevやnextの処理がちゃんとできてない

投稿2019/07/30 02:31

yambejp

総合スコア114827

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

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

0

ベストアンサー

エラー出てますよ。
PHP Recoverable fatal error: Object of class DateTime could not be converted to string

fatal errorは処理を継続できない致命的なエラーです。
とはいえ、display_errors設定していたら表示されるはずですけどね。
いずれにしても「出力処理を書いているにも関わらず何も出ない」のであれば
エラーログを確認してください。

で、場所は下記ですね。

php

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

DateTime::modifyが返すのはPHPマニュアルの通り、「DateTime オブジェクト」です。
画面に表示できるのは文字列です。DateTimeはオブジェクトなのでそのまま画面表示しようとしても表示できません。

Object of class DateTime could not be converted to string

Google翻訳:クラスのDateTimeのオブジェクトは、文字列に変換することができませんでした

他の、例えば$html_titleで受け取っているようにDateTime::formatで取り出す必要があります。

参考記事:エラーメッセージの読み方と対処, 検索や質問の原則

投稿2019/07/30 02:19

編集2019/07/30 02:24
m.ts10806

総合スコア80850

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

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

KaenTei

2019/07/31 06:27 編集

ご回答ありがとうございました!助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問