###前提・実現したいこと
PHPでカレンダーを作成しています。ただ日付を表示するところまではできたのですが、データベースから取得したスケジュールを表示させる方法がわかりません。
予定がない火は日付だけを、予定がある日は日付のしたに予定名を表示させたカレンダーを作りたいです。
ページ遷移(次の月など)はまだ手をつけてないので、ひと月分の表示だけで大丈夫です。
初心者のため、質問の文がわかりづらいかもしれませんが、どうかご協力よろしくお願いいたします。
###発生している問題・エラーメッセージ
下記のコードだと、予定を取得するためにまわしたforの数だけ他の日にちも増えてしまいます。<td>タグの置く場所が問題なのはわかるのですが、どう書けばよいのか思いつきません。
データベースから取得したものを格納した配列は、
Array (
[0] => Array ( [schedule_id] => 1 [schedule_name] => スケジュール1 [schedule_date] => 2017-02-23 )
[1] => Array ( [schedule_id] => 2 [schedule_name] => スケジュール2 [schedule_date] => 2017-02-25 )
)
という感じです。
###該当のソースコード
php
1//データベースから予定を取得 2$schedule_list = array(); 3while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) { 4 $schedule_list[] = $row; 5} 6 7//日付データを変数に格納 8$year = 2017; //(仮) 9$month = 02; //(仮) 10$ym = $year."-".$month; 11$youbi_list = array("日","月","火","水","木","金","土"); 12$last_date = date("t", mktime(0, 0, 0, $month, 01, $year)); 13$timestampfirst = mktime(0, 0, 0, $month, 01, $year); 14$first_youbi = date("w", $timestampfirst); 15$timestamplast = mktime(0, 0, 0, $month , $last_date, $year); 16$last_youbi = date("w", $timestamplast); 17 18//テーブル作成 19print("<table class=\"calendar\" border=\"1\" cellpadding=\"1\" cellspacing=\"0\" align=\"center\">"); 20print("<tr>"); 21 22//曜日部分 23for ($i = 0; $i < 7; $i++) { 24 print("<th width=\"100\" height=\"30\" style=\"font-size : 22px;\">".$youbi_list[$i]."</th>"); 25} 26print("</tr>"); 27 28//1日より前の空白部分 29for ($i = 1; $i <= $first_youbi; $i++) { 30 print("<td height=\"60\">$nbsp</td>"); 31} 32 33//日付部分 34for ($j = 1; $j <= $last_date; $j++) { 35 for ($k = 0; $k < count($schedule_list); $k++){ 36 if ($schedule_list[$k]["schedule_date"] == $ym."-".$j) { 37 print("<td height=\"60\" valign=\"top\" style=\"font-size : 20px;\">".$j."<br />".$schedule_list[$k]["schedule_name"]."</td>"); 38 } else { 39 print("<td height=\"60\" valign=\"top\" style=\"font-size : 20px;\">".$j."<br /></td>"); 40 } 41 } 42 43 //土曜日で次の行に 44 if (($i + $j -1) % 7 == 0) { 45 print("</tr>"); 46 } 47 48} 49 50//最終日以降の空白部分 51for ($l = $last_youbi; $l < 6; $l++) { 52 print("<td>$nbsp</td>"); 53} 54 55print("</table>");
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。