PHPスクリプトでカレンダー作成(先月や来月も表示できるタイプ)
PHP初心者が誰もが通る道・・・・それが「カレンダー作成・・・」 なのかはわかりませんがw プログラムの練習に作ってみました 今回作成したのは、「来月」や「先月」もボタンで切り替えれるタイプのカレンダー 普通に作ると「来月」や「前月」ボタンを押した時に 変数がリセットされるので、結局1ヶ月分先か1ヶ月後しか表示できないので セッション変数($_SESSION)を使って変数が保てるようにします $_POSTした時に[input type="hidden"]で 月($_SESSION['tuki'])と年($_SESSION['nen'])をセッション変数で年月を渡します
Notice: Undefined index: nen in /home/member/sitemix_55218/site/calendar_setumei.php on line 5
Notice: Use of undefined constant Y - assumed 'Y' in /home/member/sitemix_55218/site/calendar_setumei.php on line 6
Notice: Undefined index: tuki in /home/member/sitemix_55218/site/calendar_setumei.php on line 8
Notice: Use of undefined constant n - assumed 'n' in /home/member/sitemix_55218/site/calendar_setumei.php on line 9
Notice: Use of undefined constant Ynj - assumed 'Ynj' in /home/member/sitemix_55218/site/calendar_setumei.php on line 11
Notice: Use of undefined constant Y - assumed 'Y' in /home/member/sitemix_55218/site/calendar_setumei.php on line 12
Notice: Use of undefined constant n - assumed 'n' in /home/member/sitemix_55218/site/calendar_setumei.php on line 13
Notice: Use of undefined constant t - assumed 't' in /home/member/sitemix_55218/site/calendar_setumei.php on line 16
月 | 火 | 水 | 木 | 金 | 土 | 日 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 |
PHPカレンダープログラムの簡単な使い方
1. ページの最初に下記のプログラムを読み込んでおく
2. <?php calendar()?> で呼び出す
<?phpsession_start();//ページの最初に呼び出すfunction calendar(){if($_SESSION["nen"] == ""){$_SESSION["nen"] = date(Y);}if($_SESSION["tuki"] == ""){$_SESSION["tuki"] = date(n);}$nowday = date(Ynj);// 今日の日付$nen = date(Y);$tuki = date(n);//今月の初めの曜日//$start_youbi = date("N", mktime(0, 0, 0,$tuki,1,$nen));///↑↑date(N)は1が月曜日 7が日曜日(PHP 5.1から)↑↑///$tuki_owari = date(t); // その月の終りの日数/////////ココから←先月の処理/////////////if(@$_POST['sengetu']){//unixtimeスタンプが1970年からのため下の1行を加えとくif($_SESSION["nen"]>=1970){if($_SESSION["tuki"]==1){$_SESSION["nen"]=$_SESSION["nen"]-1;$_SESSION["tuki"] = 12;// 1月だったら、年を1減らして12月にする$start_youbi =date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));$tuki_owari =date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));}else{ //以下は 1月以外の処理$_SESSION["tuki"]=$_SESSION["tuki"]-1;$start_youbi =date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));$tuki_owari =date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));}}}/////////ココから来月→の処理////////////if(@$_POST['raigetu']){if($_SESSION["tuki"]==12){$_SESSION["nen"]=$_SESSION["nen"]+1;$_SESSION["tuki"] = 1; //12月だったら1月にして年を1増やす$start_youbi =date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));$tuki_owari =date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));}else{ //以下は12月以外の処理$_SESSION["tuki"]=$_SESSION["tuki"]+1;$start_youbi =date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));$tuki_owari =date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));}}//////////////フォーム部分///////////////////////echo<<<EOT<form action="" method="post"><input type="submit" name="sengetu" value="<<"><input type="hidden" name="nen" value="{$_SESSION["nen"]}"><input type="hidden" name="tuki" value="{$_SESSION["tuki"]}">{$_SESSION["nen"]}年{$_SESSION["tuki"]}月<input type="submit" name="raigetu" value=">>"></form><table class="calendar"><tr><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th class="doyoubi">土</font></th><th class="nitiyoubi">日</font></th></tr><tr>EOT;$cnt = 1;$orikaesi =0;if($start_youbi != 1){//月曜始まりでなければ空セル発射!for($i=2 ; $i<=$start_youbi ; $i++){echo "<td> </td>";$orikaesi++;}}while($cnt<=$tuki_owari){if($nowday==$_SESSION["nen"].$_SESSION["tuki"].$cnt){$td="honjitu";//本日の色}elseif($orikaesi == 5){$td= "doyoubi";//土曜日の色}elseif($orikaesi == 6){$td= "nitiyoubi";//日曜日の色}else{$td = "heijitu";//平日の色}echo '<td class="'.$td.'">'.$cnt.'</td>';$cnt++;$orikaesi++;if(($orikaesi ==7)&&($tuki_owari != $cnt-1)){echo "</tr><tr>";//折り返し$orikaesi =0;//折り返しカウンタリセット}}if($orikaesi!=0){//日曜終りでなければ空セル発射while($orikaesi<7){echo "<td> </td>";$orikaesi++;}}echo "</tr>";echo "</table>";}?>
Notice: Undefined offset: 119 in /home/member/sitemix_55218/site/calendar_setumei.php on line 111
PHPカレンダープログラムの説明
まずセッションを使っているためページの先頭にこのプログラムを読み込む必要があります
カレンダーを関数にしている理由は
session_start()をページはじめに読ませるためです
関数にしとかないとページの一番上にしかカレンダーを表示できないプログラムになるからです
カレンダーの使い方は、カレンダーを呼び出したい所で <?php calendar() ?>と記述します
calender()ではなく、calendar()です
最後に;(セミコロン)は必要ありません
CSSは以下のようになります。名前をcalendar.cssなどにして
<link rel="stylesheet" type="text/css" href="calendar.css">
などとして読み込んでおきます
CSSの部分
<link rel="stylesheet" type="text/css" href="calendar.css">
などとして読み込んでおきます
CSSの部分
<style>.calendar{width :180px;height :180px;border: 1px #000000 solid;text-align : center;border-collapse:collapse;}.calendar th{border: 1px #4F5450 solid;background-color : lightgray;}.calendar td{border: 1px #4F5450 solid;}.honjitu {background-color : yellow;}.doyoubi {color : blue;background-color:#ABD2FF}.nitiyoubi {color : red;background-color:#FFC7CB}.heijitu {color : black;}</style>
Notice: Undefined offset: 30 in /home/member/sitemix_55218/site/calendar_setumei.php on line 106
上記のPHPカレンダープログラムについて・・・・
ソースを貼り付ける際に不具合が会ったようで
うまく作動しなかったみたいです
ごめんなさい
修正しました(2012.4.13)
月終りの日が折り返しとぴったりの場合に</tr><tr>が echoされて
テーブルの最後のボーダーが表示されない不具合を修正(2013.3.29)
休日、祝日付きのカレンダーを作りたいかたはこちらをご覧下さい
F5キーなどでカレンダーが更新されるのがいやな場合はJavascriptを使用します
詳しくはJavascriptのページをご覧下さい