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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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

0回答

931閲覧

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:34

編集2021/05/26 07:03

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

予約人数に応じて◎,〇,△,×の記号を表示するようにしているが、◎,〇,△の時はクリックで入力フォームへ飛び、×(予約が埋まってしまった場合)の時のみクリックできないようにしたいです。

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

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

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ページで確認できます。

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

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

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

takna

2021/05/26 06:55

> ×(予約が埋まってしまった場合)の時はクリックすると入力フォームへ飛ばずにモーダルウィンドウなどで「予約で埋まっています。」と表示したい ×で予約が埋まっているとわかるものなので、×ならクリックしても何も起きないようにした方が良いんじゃないかと思いました。
coboo

2021/05/26 07:04

ご指摘ありがとうございます。そのように再度質問させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問