[PHP-users 19018]Re: 月間スケジュールに予定を入れる(質問)

Tadayuki Motoyama motoyama @ clinks.jp
2003年 11月 19日 (水) 22:19:08 JST


こんばんは。本山です。

>$sql = "select year, month, day, title
>from cal_tbl where year = '$year' and month = '$mon'";
>
>while( $row=mysql_fetch_array($rs) ){
>	  if( $day == $row["day"] ){
>	    if( !empty($row["url"]) ){
>	      print("<TR>".$day_print."<TD>".$row["title"]."</TD></TR>");
>	    }else{
>	      print("<TR>".$day_print."<TD>".$row["title"]."</TD></TR>");
>	    }
>	//===============================================
>	// このコメントを外すと該当月の全てのデータが
>	// 表示されるが、件数分行が増える。002.gif状態
>	//===============================================
>	//}else{
>	//  print("<TR>".$day_print."<TD>&nbsp;</TD></TR>");
>}

SQLで当月3件のデータを取得したとすると、
このwhileループは3回実行されます。
そのためelse も3回実行され、
同じデータが3件表示されるのではないでしょうか?

----  >8 ------------------------------- 8< ------------

ついでに、

>$mday_last  = date( "t", mktime(0,0,0,$mon,1,$year,0) ); // 最終日
>$week_max = ceil( ($mday_last + $wday_first)/7 );		 // 最終週
>
>// 週毎の表示
>for ($i=0; $i<$mday_last; $i++){

$mday_last ではなく、$week_max ではないですか?

----  >8 ------------------------------- 8< ------------

同じような処理をするなら、、こんな感じでも出来ると思います。
動作確認してません。

$mday_last  = date( "t", mktime(0,0,0,$mon,1,$year,0) ); // 最終日
for ($day=1; $day<=$mday_last; $day++) {

	// 年月日指定でデータ取得
	$sql = "select year, month, day, title
	from cal_tbl where year=$year and month=$mon and day=$day";
	$rs = mysql_db_query($db,$sql);

	// テーブル出力
	print("<TR><TD>$day</TD><TD>曜日</TD><TD>");
	while( $row=mysql_fetch_array($rs) ){
		print($row["title"]."<BR>");
	}
	print("</TD></TR>");
	mysql_free_result($rs);
}

----  >8 ------------------------------- 8< ------------



がんばってください。


- 以上 -



------------------------
[PHP-users 19014] 月間スケジュールに予定を入れる(質問) from 倉林 巧 <kanae @ kitacity.jp>
Wed, 19 Nov 2003 18:28:22 +0900


> 
> 倉林と申します。日頃の皆さまの活動、
> 毎回参考にさせて頂いております。お礼申し上げます。
> また、毎回のご指導ありがとうございます。
> 
> (以下、長文にて失礼いたします。)
> 
> 今回、月間予定表を作成し、予定を書き込む
> 簡単なスケジューラーを作成しています。
> 
> 月間の日にち、曜日などはPHPで出力し、
> 予定の内容などはMySQLを利用してDBに保存して
> 指定した月のカレンダー表示と、それに対応する日のデータを、
> DBにから抽出して表示させたいと考えています。
> 
> 予定のある日だけをカレンダー表示することはできるのですが、
>  #11月23日の予定で1件、26日に2件の予定を登録した場合、
>  #3件だけのカレンダーとして表示される。
> http://www.city.kita.tokyo.jp/sample/001.gif
> 
> 月のカレンダーを全て表示させた上で、
> 予定が入っている日だけ、カレンダーの予定欄に予定を表示し、
> そのほかの、予定の無い日は、予定欄を空欄で表示させたいと
> 考えています。
> http://www.city.kita.tokyo.jp/sample/003.gif
> 
> プログラムしてみた結果、
> 上記のケースで月に3件のデータがある場合、
> 毎日3つの行を作成するような状態になってしまいました。
> http://www.city.kita.tokyo.jp/sample/002.gif
> 
> 以下記述です。(一部割愛)
> 横文字数の関係で、一部見にくくなっております。
> 
> //===============================================
> // カレンダー用の事前計算
> //===============================================
> global $PHP_SELF;
> 
> // 今日の日付の取得
> $today_date = getdate();
> $today_year = $today_date['year'];
> $today_mon  = $today_date['mon'];
> $today_mday = $today_date['mday'];
> 
> //変数を握っている場合の処理(カレンダー変更処理)
> if( empty($year2) )	$year = $today_year;
> else			$year = $year2;
> if( empty($mon2)  )	$mon  = $today_mon;
> else			$mon = $mon2;
> 
> if(( $year == $today_year )&&( $mon == $today_mon ))
> 	{ $today = $today_mday; }  // 本日
> else
> 	{ $today = -1; }  // あり得ない日
> 
> $wday_first = date( "w", mktime(0,0,0,$mon,1,$year,0) );
> $mday_last  = date( "t", mktime(0,0,0,$mon,1,$year,0) );
> $week_max = ceil( ($mday_last + $wday_first)/7 );
> 
> // 週毎の表示
> for ($i=0; $i<$mday_last; $i++){
> 
> // 曜日毎の表示
> for ($j=0; $j<7; $j++){
>   $day = 7*$i + $j - $wday_first + 1;
>   $countday = 7*$i + $j - $wday_first + 1;
> 
> // その月でない日
> if ( (($i==0)&&($j<$wday_first)) || ($countday > $mday_last) ){
>    //print "<td>&nbsp;</td>"; }
> }else{
> 	$code = check_holiday($year,$mon,$day);
> 
> // 曜日の表示
> if ($j == 0)		$youbi = "日";
> elseif ($j == 1)	$youbi = "月";
> elseif ($j == 2)	$youbi = "火";
> elseif ($j == 3)	$youbi = "水";
> elseif ($j == 4)	$youbi = "木";
> elseif ($j == 5)	$youbi = "金";
> elseif ($j == 6)	$youbi = "土";
> else 			$youbi = "";
> 
> //===============================================
> // カレンダーから該当するデータをDBより条件抽出
> // primary key は auto_increment で id フィールドを設定
> //===============================================
> $sql = "select year, month, day, title
> from cal_tbl where year = '$year' and month = '$mon'";
> 
> $rs = mysql_db_query($db,$sql);
> if ($rs == False) {
> 	print("<P>error</P>");
> 	exit;
> }
> $num = mysql_num_fields($rs);
> $rows = mysql_num_rows($rs);
> if ($rows == False) {
> 	print("<P>error</P>");
> 	exit;
> }
> 
> //===============================================
> // 日にち、曜日毎の表示方法設定
> //===============================================
> if ($day == $today){	// 今日の表示
>   $day_color = "<TD>$countday</TD><TD>$youbi</TD>";
> }elseif ($j == 6){	// 土曜日の表示
>   $day_color = "<TD>$countday</TD><TD>$youbi</TD>";
> }elseif ($j == 0){	// 日曜日の表示
>   $day_color = "<TD>$countday</TD><TD>$youbi</TD>";
> }else{			// 平日の表示
>   $day_color = "<TD>$countday</TD><TD>$youbi</TD>";
> }
> 
> if ( $code != 0 ){	// 祝日の表示
>   $holiday = get_holiday($code);
>   $day_print = "<TD>$countday</TD><TD>$holiday</TD>";
> }else{
>   $day_print = $day_color;
> }
> 
> //===============================================
> // MySQLループ処理
> //===============================================
> while( $row=mysql_fetch_array($rs) ){
>   if( $day == $row["day"] ){
>     if( !empty($row["url"]) ){
>       print("<TR>".$day_print."<TD>".$row["title"]."</TD></TR>");
>     }else{
>       print("<TR>".$day_print."<TD>".$row["title"]."</TD></TR>");
>     }
> //===============================================
> // このコメントを外すと該当月の全てのデータが
> // 表示されるが、件数分行が増える。002.gif状態
> //===============================================
> //}else{
> //  print("<TR>".$day_print."<TD>&nbsp;</TD></TR>");
>   }
> }	//MySQLループ終了
> }	//その月でない日ループ終了
> }	//曜日毎のループ終了
> }	//週毎のループ終了
> 
> print("</TABLE></DIV>");
> 
> //================================記述終了
> 
> MySQLのループの処理部分でいろいろ行ってみましたが、
> 根本的に処理の考え方が間違っているのでしょうか?
> 何か、良い方法をご教授頂けると幸いです。
> 
> [使用環境]
> Win2000Pro SP4
> Apache 1.3.24
> PHP Version 4.2.2
> MySQL 3.23.53-max-nt
> 
> ■■■■■■■■■■■■■■■■■■■■■
> 倉林 巧 Takumi KURABAYASHI
> 東京都北区企画部広報課
> 114-8508 東京都北区王子本町1-15-22
> TEL 03-3908-1102 ( 2142 )
> FAX 03-3905-3422
> ■■■■■■■■■■■■■■■■■■■■■
> 
> 
> _______________________________________________
> PHP-users mailing list
> PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users


------------------------------------------
 Tadayuki Motoyama : motoyama @ clinks.jp


PHP-users メーリングリストの案内