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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

4108閲覧

PHPでカレンダー予約を作成中:条件分岐の方法でつまずきました。今日の日付よりも未来にのみ入力フォームのリンクを貼りたい

coboo

総合スコア4

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/05/26 06:17

編集2021/05/26 06:27

画像のようによくあるカレンダーを作成してPHPを使用し予約システムを作成中です。
参考サイトを見ながらコーディングしていってます。
イメージ説明

現在はどの日付の<td>に対しても<a>が挿入されている状態です。今日の日付を含む未来の<td>にのみ入力フォームのリンクを貼り、今日より前の日付は<a>を生成しないようにしたいです。

少しかじった程度の初心者で申し訳ございませんが、どなたか教えていただけると嬉しく思います。よろしくお願いいたします。

以下、コードになります。

Calender.php↓

PHP

1<!-----------カレンダープログラム---------------> 2<?php 3 4//functions.phpを読み込む 5include_once('./functions.php'); 6 7//タイムゾーンを設定 8date_default_timezone_set('Asia/Tokyo'); 9 10 11//前月・次月リンクが選択された場合は、GETパラメーターから年月を取得 12if(isset($_GET['ym'])){ 13 $ym = $_GET['ym']; 14}else{ 15 //今月の年月を表示 16 $ym = date('Y-m'); 17} 18 19//タイムスタンプ(どの時刻を基準にするか)を作成し、フォーマットをチェックする 20//strtotime('Y-m-01') 21$timestamp = strtotime($ym . '-01'); 22if($timestamp === false){//エラー対策として形式チェックを追加 23 //falseが返ってきた時は、現在の年月・タイムスタンプを取得 24 $ym = date('Y-m'); 25 $timestamp = strtotime($ym . '-01'); 26} 27 28//今月の日付 フォーマット 例)2020-10-2 29$today = date('Y-m-j'); 30 31//カレンダーのタイトルを作成 例)2020年10月 32$html_title = date('Y年n月', $timestamp);//date(表示する内容,基準) 33 34//前月・次月の年月を取得 35//strtotime(,基準) 36$prev = date('Y-m', strtotime('-1 month', $timestamp)); 37$next = date('Y-m', strtotime('+1 month', $timestamp)); 38 39 40//該当月の日数を取得 41$day_count = date('t', $timestamp); 42 43//1日が何曜日か 44$youbi = date('w', $timestamp); 45 46//カレンダー作成の準備 47$weeks = []; 48$week = ''; 49 50//第1週目:空のセルを追加 51//str_repeat(文字列, 反復回数) 52$week .= str_repeat('<td></td>', $youbi); 53 54for($day = 1; $day <= $day_count; $day++, $youbi++){ 55 56 57 $date = $ym . '-' . $day; 58 //それぞれの日付をY-m-d形式で表示例:2020-01-23 59 //$dayはfor関数のおかげで1日づつ増えていく 60 61 $Holidays_day = display_to_Holidays(date("Y-m-d",strtotime($date)),$Holidays_array); 62 //display_to_Holidays($date,$Holidays_array)の$dateに1/1~12/31の日付を入れる 63 //比較してあったらdisplay_to_Holidaysメソッドによって$Holidays_array[$date]つまり$holidaysがreturnされる 64 65 66 $reservation = reservation(date("Y-m-d",strtotime($date)),$reservation_array); 67 68 69 if($today == $date){ 70 //もしその日が今日なら 71 $week .= '<td class="today"><a href="./reservation_form.php">' . $day;//今日の場合はclassにtodayをつける 72 }elseif(display_to_Holidays(date("Y-m-d",strtotime($date)),$Holidays_array)){ 73 //もしその日に祝日が存在していたら 74 //その日が祝日の場合は祝日名を追加しclassにholidayを追加する 75 $week .= '<td class="holiday"><a href="./reservation_form.php">' . $day . $Holidays_day; 76 }elseif(reservation(date("Y-m-d",strtotime($date)),$reservation_array)){ 77 $week .= '<td><a href="./reservation_form.php">' . $day ; 78 }else{ 79 //上2つ以外なら 80 $week .= '<td><a href="./reservation_form.php">' . $day ; 81 } 82 83 $week .= $reservation.'</a></td>'; 84 85 86 87 if($youbi % 7 == 6 || $day == $day_count){//週終わり、月終わりの場合 88 //%は余りを求める、||はまたは 89 //土曜日を取得 90 91 if($day == $day_count){//月の最終日、空セルを追加 92 $week .= str_repeat('<td></td>', 6 - ($youbi % 7)); 93 } 94 95 $weeks[] = '<tr>' . $week . '</tr>'; //weeks配列にtrと$weekを追加 96 97 $week = '';//weekをリセット 98 } 99} 100 101 102?> 103<!-----------カレンダープログラム---------------> 104

functions.php↓

php

1/*予約された日の予約人数を取得する関数-------------------------------------------------------*/ 2function getreservation(){ 3 4$dsn="mysql:host=localhost;dbname=reservation;charset=utf8"; 5$user="root"; 6$pass=""; 7$db = new PDO($dsn,$user,$pass); 8$ps = $db->query("SELECT * FROM reserve"); 9$reservation_member = array(); 10 11 12foreach($ps as $out){ 13 14 $day_out = strtotime((string) $out['day']); 15 16 $member_out = (string) $out['member']; 17 18 $reservation_member[date('Y-m-d', $day_out)] = $member_out; 19 20} 21 ksort($reservation_member); 22 return $reservation_member; 23} 24 25 $reservation_array = getreservation(); 26//getreservation関数を$reservation_arrayに代入しておく 27 28 29 30/*予約人数を表示させる関数------------------------------------------------------------------*/ 31function reservation($date,$reservation_array){ 32 //カレンダーの日付と予約された日付を照合する関数 33 34 $today = date('Y-m-j'); 35 36 if(array_key_exists($date,$reservation_array)&&($date>=$today)){ 37 //もし"カレンダーの日付"と"予約された日"が一致すれば以下を実行する 38 39 if($reservation_array[$date] >= 10){ 40 //予約人数が3人以上の場合は以下を実行する 41 42 $reservation_member = "<br/>"."<span class='green'>"."×"."</span>"; 43 return $reservation_member; 44 45 } 46 47 if($reservation_array[$date] >= 5){ 48 //予約人数が2人以上の場合は以下を実行する 49 50 $reservation_member = "<br/>"."<span class='green'>"."△"."</span>"; 51 return $reservation_member; 52 53 } 54 55 if($reservation_array[$date] >= 3){ 56 //予約人数が1人以上の場合は以下を実行する 57 58 $reservation_member = "<br/>"."<span class='green'>"."○"."</span>"; 59 return $reservation_member; 60 61 } 62 else{ 63 //予約人数が1人より少なければ以下を実行する 64 65 $reservation_member = "<br/>"."<span class='green'>"."◎"."</span>"; 66 return $reservation_member; 67 //例:echo $reservation_member; → 3人 68 //色を変えるためにspanでclassをつけた 69 } 70 71 } 72 73} 74 75/*その日の祝日名を取得-------------------------------------------------------------------------*/ 76function display_to_Holidays($date,$Holidays_array) { 77 //※引数1は日付"Y-m-d"型、引数に2は祝日の配列データ 78 //display_to_Holidays("Y-m-d","Y-m-d") →引数1の日付と引数2の日付が一致すればその日の祝日名を取得する 79 80 if(array_key_exists($date,$Holidays_array)){ 81 //array_key_exists関数を使用 82 //$dateが$Holidays_arrayに存在するか確認 83 //各日付と祝日の配列データを照らし合わせる 84 85 $holidays = "<br/>".$Holidays_array[$date]; 86 //祝日が見つかれば祝日名を$holidaysに入れておく 87 return $holidays; 88 } 89} 90

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

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

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

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

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

m.ts10806

2021/05/26 06:19

要件は一つに絞ったほうが良いです。あれもこれも一気に解決は無理です。
coboo

2021/05/26 06:25

ご指摘ありがとうございます。もう一度要件を分けて質問させていただきます。
m.ts10806

2021/05/26 06:26

質問は編集できますので、とりあえずこちらを1つ目に
coboo

2021/05/26 06:28

ありがとうございます。ただいま編集いたしました。
guest

回答1

0

自己解決

php

1if($today> $date){ 2 3} 4 56 7if(strtotime($today) > strtotime($date)){ 8}

上記コードにて解決できました。
teratailの別質問ページに
「文字列型の比較って、辞書順だったはずなので、日付の順の比較にならないと思います。」
とありました。
知らなかったので勉強になりました。お騒がせいたしました。

投稿2021/05/26 09:00

coboo

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問