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

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

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

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

Q&A

解決済

2回答

246閲覧

カレンダーの最終日以降を非表示にする

takeke

総合スコア60

PHP

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

0グッド

0クリップ

投稿2018/10/09 05:39

PHPでカレンダーを作りたいのですが、中々うまくいかないので質問させていただきます。

やりたいことは、日曜~土曜の一ヶ月表示のよくある一般的なカレンダーで、特に月末後に翌月の日まで今月の表示に組み込まいものなんですが、最終日がある週に最終日以降を何も表示しないようにしたいのですが、30や31日以降の何もない日でエラーがでてきてしまうので、これをでないようにしたいです。(現在それと同時に祝日の配列部分138行目でもエラーがでてるので一緒にのせています)

参考にしたのはこちらのサイトです
この参考サイトにコードがのっています。現在の自分のコードとパス以外は同じです。

このサイトにコードは書いてあるので、大体はできてるのですが、エラーがどうしたらいいかわかりません。

自分の環境でのエラー表示です。ローカルでxampp使っています。

Notice: Undefined offset: 31 in C:\xampp\htdocs\~~\~~\index.php on line 138 . .(←Undefined offset後の数値だけ違うものが31~51まで続きます) . Notice: Undefined offset: 51 in C:\xampp\htdocs\~~\~~\index.php on line 138 この下にカレンダーが表示され、2018年10月のカレンダーの場合ですと、31日の後の木、金、土曜の中に Notice: Undefined offset: 31 in C:\xampp\htdocs\~~\~~\index.php on line 217 Notice: Undefined offset: 31 in C:\xampp\htdocs\~~\~~\index.php on line 218 (Undefined offset後の数値は31~33まで続きます)

phpのコードは字数制限かかったので上のリンクにコードあるのでそこを見ていただきたいです。

エラー自体はどちらも配列に何もはいっていないというエラーなのはわかったのですが、この場合にどうしたらいいか全くわからず数日悩んでいるので、もし何かお気づきの方などいましたらアドバイスや直し方など教えていただけると助かります。よろしくお願いいたしますm(_ _)m

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーは再現しました。
参考元のひとがやりたいことが良く分からないので、エラー行(は特定できていますよね?)で↓のようにissetするくらいしか思いつかない。

php

1//138行あたり 2 if(isset($display_day_array[$i]) && array_key_exists(date("Y-m-d",strtotime($display_year."-".$display_month."-".$display_day_array[$i])),$Holidays_array)){ 3//216行あたり 4 if(isset($display_day_array[$ii]) && $display_calendar_flag == 1){//flagが1だったら、下記の処理を実行

投稿2018/10/09 06:14

編集2018/10/09 06:19
papinianus

総合スコア12705

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

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

takeke

2018/10/12 12:50

遅くなりましたが回答ありがとうございました! ご指摘通りissetで解決できました!すぐisset位は思いつかないとだめですね>< あの後改めてブラウザからこのアプリケーションいじっていたらまたエラーがでていました。そちらもissetで対応できました! ありがとうございました!また機会がありましたらよろしくお願いいたしますm(_ _)m
guest

0

作りを見るかぎり、$display_day_array に 1~月末 までの添え字でデータが入るので、翌月になるとデータ自体がありません。なのでそこにアクセスすると、undefiend offset になってしまいます。
ですから papinianus さんの書かれたように、isset か array_key_exists で、配列にデータがあるかどうかをチェックすることになります。

余談:一月分の表示をするカレンダーであれば、最大6行あれば足ります(最大必要になるケースは月初が金曜日か土曜日の大の月、および月初が土曜日の小の月になります)

投稿2018/10/09 06:33

tacsheaven

総合スコア13703

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

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

takeke

2018/10/12 12:57

遅くなりましたがかいとうありがとうございます! どうしてundefiend offset起きてるかまではご指摘を受け理解はできていたのですが、それをどう対応したものかと、、、isset肝に命じておきます。 それと、余談の話ですが、今回参考にした記事が、どうやら曜日も行数にカウントしたやり方のようなので、7行で書いてましたが、ご指摘の6行と同じことのようですね! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問