phpカレンダー縦型から格子型へ
予約状況用の既存スクリプトから表示を変更させたいのですが、
変更内容は以下の通りです。(PHP+MySQL)
▼縦型から
------------------------
|1日 |○|
|2日 |×|
・・・
|31日 |×|
▼カレンダー形式へ
------------------------
| |1|2|3|4|5|6|
|○|×|△|○|○|×|×|
|7|8|9|10|11|12|13|
|○|×|△|○|○|×|×|
・・・
------------------------------------------------
<table border="1">
<tr bgcolor="#ffd700">
<td>日付</td>
<?php
// 部屋表示
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
$roomid = $row["roomid"];
$roomname = cnv_dispstr($row["roomname"]);
$link = $_SERVER["PHP_SELF"]."?act=det&roomid=".$roomid;
?>
<td><a href="<?php echo $link?>">
<?php echo $roomname ?></a></td>
<?php } ?>
</tr>
<?php
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
for ($i = 1; $i <= $lastd; $i++) {
?>
<tr>
<?php
$ts = mktime(0, 0, 0, $mm, $i, $yyyy);
$ymd = date("Y/m/d", $ts);
$ymdstr = strftime("%Y年%m月%d日(%a)", $ts);
?>
<td><?php echo $ymd ?></td>
<?php
// 部屋ごとの予約表示
$res = mysql_query($sql, $conn) or die("データ抽出エラー");
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
$roomid = $row["roomid"];
$roomname = cnv_dispstr($row["roomname"]);
$link = $_SERVER["PHP_SELF"].
"?act=upd&hiduke=".$ymd."&roomid=".$roomid; ?>
<td><a href="<?php echo $link?>">
<?php echo yoyakuchk($ymd,$roomid) ?></a></td>
<?php } ?>
</tr>
<?php } ?>
</table>
------------------------------------------------
調べたところ
$lastd = date("d", mktime(0, 0, 0, $mm + 1, 0, $yyyy));
for ($i = 1; $i <= $lastd; $i++) {
$days = date("d", mktime(0, 0, 0, $mm, $i, $yyyy));
$first_day = date('w', mktime(0, 0, 0, $mm, 1, $yyyy));
$last_day = date('w', mktime(0, 0, 0, $mm, $days, $yyyy));
}
$last_week_days = ($days + $first_day) % 7;
if ($last_week_days == 0){
$weeks = ($days + $first_day) / 7;
}else{
$weeks = ceil(($days + $first_day) / 7);
}
今月の日数、最初の日、最後の日の曜日、最後の週の曜日を得ればいいんだろうというところまでは分かったんですが、どう書き換えていいかわかりません。どなたか参考となるソースをご指南頂けると、とても助かります。
お礼
回答ありがとうございました。 返事が遅れまして本当に申し訳ありません!!! テーブルヘッダーの行のTRが確かに抜けていますね! ご指摘ありがとうございました。 ただ、TRの閉じタグを追加してみましたが、何も変わりませんでした。 TRの閉じタグがなくても今まで表示されてたのも不思議。。。 うーん、どうしたらよいのでしょう?? IE8でも確認してみましたが、IE6と同じ表示でした。。。
補足
回答にお礼をしたあとなんですが、何とか解決できました。 原因はよく分かりませんが、行った操作を書いておきます。 1.以前はforeachを外すと、タイトルTHの所だけですが、ちゃんとした位置に表示されていたので、phpとIE6の連携が上手くいっていないのかなぁと漠然と思っていました。 2.けれど、skyfangさんの回答にもありますように、htmlの問題かと思い、まず意味もなくテーブルの列数を減らしてみました。いろいろな組み合わせで減らしてみると、「欠席者」の列を消してみたらちゃんとした位置に表示されることがわかりました。 3.列数を減らしても、「欠席者」の列が含まれているとちゃんとした位置に表示されないことが分かり、「欠席者」の列の部分に他の列をコピーして埋め合わせてもちゃんと表示されたので、なぜかわかりませんが、「欠席者」列に問題があるようだと言うことが分かりました。 4.それで、結局やったことは、「コメント」列をコピーして、変数を欠席者用に替えました。すると、なぜかちゃんと表示されるようになりました。 読みにくく且つ長くなってしまいましたが、質問時のhtmlを読んで下さり、本当にありがとうございました!