配列が受け取れない理由とは?

このQ&Aのポイント
  • 配列を受け取れない理由について教えてください。
  • 配列をforeachで受け渡そうとしてもうまくいかない理由を知りたいです。
  • 日付を配列として渡すことができないのはなぜでしょうか?
回答を見る
  • ベストアンサー

配列が受け取れないのはなぜなのでしょうか?

カレンダーの日付にリンクをさせようとしているのですが、上手くできません。 リンクさせたい日付をforeachで配列として渡そうと思うのですが、 受け取ってくれません。 なぜ、受け取ることができないのでしょうか? 何が間違っているのでしょうか。 どなたかご指摘、アドバイスなどお願いします。 以下コードです。 <?php $qry = $_SERVER['QUERY_STRING']; if( ereg( "^[0-9]{8}", $qry ) ){ $today = getdate( mktime( 0, 0, 0, substr( $qry,4,2 ), substr( $qry,6,2 ), substr( $qry,0,4 ) ) ); }else{ $today = getdate(); } $f_today = getdate( mktime( 0, 0, 0, $today[mon], 1, $today[year] ) ); $prev_month = date( "Ymd", mktime( 0, 0, 0, $today[mon], 0, $today[year] ) ); $next_month = date( "Ymd", mktime( 0, 0, 0, $today[mon]+1, 1, $today[year] ) ); <table width=170><tr><td> <table width=100%> <tr><td colspan=7><a href="?<?= $prev_month ?>">≪ </a><?= $today[year] ?>年<?= $today[mon] ?>月 <a href="?<?= $next_month ?>"> ≫</a></td></tr> <tr><td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr> <tr> <?php for ( $i=0; $i<$f_today[wday]; $i++ ) { echo "<td></td>\n"; } $day = 1; while( checkdate( $today[mon], $day, $today[year] ) ){ $link = sprintf( "%4d%02d%02d", $today[year], $today[mon], $day ); if( $link == 20081014 ){ //← 日付を指定※ここが問題の箇所です。 echo "<td><a href=?date=$link\">$day</a></td>\n"; }else{ echo "<td>$day</td>\n"; } if( $f_today[wday] == 6) echo "</tr><tr>"; $day++; $f_today[wday]++; $f_today[wday] = $f_today[wday] % 7; } if( $f_today[wday] > 0 ){ while( $f_today[wday] < 7 ) { echo "<td> </td>\n"; $f_today[wday]++; } } else { echo "<td colspan=7></td>\n"; } ?> </tr> </table> </td></tr></table> 下記のように日付を配列にするとダメです。 $day = 1; //以下を変更 $data = array( "200810005", "200810010", "20081011", "20081015", "20081025", "20081030" ); foreach( $data as $value ) { $val = $value; while( checkdate( $today[mon], $day, $today[year] ) ){ $link = sprintf( "%4d%02d%02d", $today[year], $today[mon], $day ); if( $link == $val ){  // ← 配列で代入※配列として受け取ってくれない。 echo "<td><a href=?date=$link\">$day</a></td>\n"; }else{ echo "<td>$day</td>\n"; } if( $f_today[wday] == 6) echo "</tr><tr>"; $day++; $f_today[wday]++; $f_today[wday] = $f_today[wday] % 7; } } ↑ここまで なぜ、できないのかが分からないので、色々試しても上手くいきません。 宜しくお願いします。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • sgcarrot
  • ベストアンサー率68% (17/25)
回答No.1

配列内に値があるかどうかの判定はin_array()関数が便利です。 $day = 1; //以下を変更 $data = array( "200810005", "200810010", "20081011", "20081015", "20081025", "20081030" ); while( checkdate( $today[mon], $day, $today[year] ) ){ $link = sprintf( "%4d%02d%02d", $today[year], $today[mon], $day ); if( in_array ( $link , $data ) ) { echo "<td><a href=?date=$link\">$day</a></td>\n"; }else{ echo "<td>$day</td>\n"; } if( $f_today[wday] == 6) echo "</tr><tr>"; $day++; $f_today[wday]++; $f_today[wday] = $f_today[wday] % 7; }

参考URL:
http://jp.php.net/in_array
minoru4891
質問者

補足

sgcarrot様。 有難うございます。 sgcarrot様のお知恵を借りてなんとかできました。 目の前が明るくなりました。 in_array()関数なるものを始めて知りました。 大変便利な関数があったのですね。勉強不足でした。 このことに関連してもう1つアドバイスを頂きたいのですが、 $data = array( "200810005", "200810010", "20081011", "20081015", "20081025", "20081030" ); この配列はDBからselect文にて、while ( $col = mysql_fetch_array( $rst ) ) { $data = ・・・}で取得した配列でも同じ判定が可能なのでしょうか? 試したところ$data = array(・・・・);のようにはいきませんでした。 記述ミスなのでしょうか?それとも他のやり方があるのでしょうか? お手数ではございますが、アドバイスをお願い致します。 宜しくお願いします。

その他の回答 (2)

  • sgcarrot
  • ベストアンサー率68% (17/25)
回答No.3

わたし程度の知識だと、まだまだだと思いますが・・・(^^; >参考になさっている書籍やサイト んー、特に無いです。しいていればGoogle。(^^; >やはり、phpマニュアルの熟読と理解(+豊富な経験)に尽きるのでしょうか? マニュアルを読むのも大切ですが、一番良いのは、今のminoru4891さんみたいに、 間違っても良いからどんどん書いてみることだと思います。 動かないところを解決していく間に自然に身に付きます。

minoru4891
質問者

お礼

sgcarrot様。有難うございます。 とても、励みになりました。 頑張ります。 また、何処かで当方の質問を見かけたらお願いします。 有難うございました。

  • sgcarrot
  • ベストアンサー率68% (17/25)
回答No.2

$data = array(); while ( $col = mysql_fetch_array( $rst ) ) { $data[] = ・・・} としてみて下さい。

minoru4891
質問者

お礼

スゴイ!!できました!!! sgcarrot様、有難うございます。 ここ1週間ほどずっと考え込んでいたところ、大変助かりました。 配列って奥が深いですね。本当に有難うございました。 後学のために、知っておきたいのですが、sgcarrot様がphp関連で参考になさっている書籍やサイトなどがあれば、教えて頂きたいのですが。 やはり、phpマニュアルの熟読と理解(+豊富な経験)に尽きるのでしょうか? 宜しくお願いします。

関連するQ&A

  • カレンダーについて教えてください。

    phpでカレンダーを作っているのですが休日を設定したい場合 の方法がわかりません。 for文で日にちを表示させているのですが休日設定の配列の値を どのように参照すればいいかで悩んでおります。 // 現在の日付を取得 $year = date("Y"); $month = date("n"); $today = date("j"); // 休日を設定 $holyday = array('1', '5', '12', '28'); // カレンダー始まり echo "<table width='200' height='182' border='0'><tr><td valign='top'>"; echo "<table border ='0' bgcolor='#cccccc' cellspacing='1' cellpadding='3' width='170'><tr>\n"; echo "<td colspan='7' bgcolor='white' align='center' style='font-size:12px;font-weight:bold;color:#6666ff'>"; echo $year . "年" . $month . "月</td><tr>"; // 曜日表示部分 $weekday = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); for ($i = 0 ; $i < 7 ; $i++) { if ($i == 0 or $i == 6) { echo "<td class='head_" . $i . "'>"; } else { echo "<td class='head'>"; } echo $weekday[$i] . "</td>\n"; } echo "</tr>\n"; // 日数と曜日の計算 $days = cal_days_in_month (CAL_GREGORIAN, $month, $year); $week_start = jddayofweek (cal_to_jd(CAL_GREGORIAN, $month,1, $year) , 0); // 日付が始まる前の空白 for ($dot1 = 0 ; $dot1 < $week_start ; $dot1++) { echo "<td align='center' class='dot'></td>\n"; } // 日付表示部分 for ($day = 1 ; $day <= $days ; $day++) { if (($day+$week_start)%7 == 1) { // 日曜日 echo "<tr>\n<td class='sun'>$day</td>\n"; } else if (($day+$week_start)%7 == 0) { // 土曜日 echo "<td class='sat'>$day</td>\n</tr>\n"; } else if ($day == $today) { // 今日 echo "<td class = 'today'>$day</td>\n"; // ここで休日を表示させるのですが方法がわかりません。 } else if ($day == $holyday[0]) { // 休日 echo "<td class = 'holyday'>$day</td>\n"; } else { // 平日 echo "<td class='othr'>$day</td>\n"; } } // 最終日後の空欄の表示 $wend = 35 - ($days + $week_start); if ($wend < 0) { $wend += 7; } if ($wend == 7) { echo ''; } else if ($wend != 0) { for ($dot2 =0 ; $dot2 < $wend ;$dot2++) { echo "<td align='center' class='dot'></td>\n"; } } // カレンダー終り echo "</tr></table>\n"; echo "</td></tr></table>\n";

    • ベストアンサー
    • PHP
  • カレンダーの今日の日付をハイライトする。

    <?php $year = $_POST['year']; if($year == null){ $year = date(Y); } $month = $_POST['month']; if($month == null){ $month = date(n); } $today = $_POST['today']; if($today == null){ $today = date(j); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"><head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="../style.css"> <style type="text/css"> .dot { text-align:center;background-color:#ffffff;font-size:11px;color:black;padding:2px;height:21px } .head_0 { text-align:center;background-color:#ffeeee;font-size:11px;color:red;padding:2px } .head_6 { text-align:center;background-color:#eeffd0;font-size:11px;color:blue;padding:2px } .head { text-align:center;background-color:#ffffee;font-size:11px;color:black;padding:2px } .sun { text-align:center;background-color:#ffeeee;font-size:11px;color:red;padding:2px;height:21px } .sat { text-align:center;background-color:#eeffd0;font-size:11px;color:blue;padding:2px } .today { text-align:center;background-color:#ffcc00;font-size:11px;color:blue;padding:2px } .othr { text-align:center;background-color:#ffffee;font-size:11px;color:black;padding:2px } </style></head> <body><div class="file2" style="height:280px"> <form method = "POST" action = PHP061.php> <?php ///////////////////////////////////////////////////////////////////////カレンダー始まり echo "<table width='200' height='182' border='0'><tr><td valign='top'>"; echo "<table border ='0' bgcolor='#cccccc' cellspacing='1' cellpadding='3' width='170'><tr>\n"; echo "<td colspan='7' bgcolor='white' align='center' style='font-size:12px;font-weight:bold;color:#6666ff'>"; echo $year."年".$month."月</td><tr>"; ////////////////////////////////////////////////////////////////////////曜日表示部分 $weekday = array("SUN","MON","TUE","WED","THU","FRI","SAT"); for($hcnt = 0 ; $hcnt<7 ; $hcnt++){ if($hcnt == 0 or $hcnt == 6){ echo "<td class='head_".$hcnt."'>"; } else { echo "<td class='head'>"; } echo $weekday[$hcnt]."</td>\n"; } echo "</tr>\n"; ////////日数と曜日の計算 $days = cal_days_in_month ( CAL_GREGORIAN, $month, $year ); $week_start = jddayofweek ( cal_to_jd(CAL_GREGORIAN, $month,1, $year) , 0 ); ////////日付が始まる前の空白 for($dot1 = 0 ; $dot1 < $week_start ; $dot1++){ echo "<td align='center' class='dot'></td>\n"; } //////////日付表示部分 for( $day = 1 ; $day <= $days ; $day++ ){ if(($day+$week_start)%7 == 1){ //日曜日 echo "<tr>\n<td class='sun'>$day</td>\n"; } else if(($day+$week_start)%7 == 0){ //土曜日 echo "<td class='sat'>$day</td>\n</tr>\n"; } else if($day == $today){ echo "<td class = 'today'>$day</td>\n"; } else { //平日 echo "<td class='othr'>$day</td>\n"; } } //////////最終日後の空欄の表示 $wend = 35 - ($days + $week_start) ; if($wend < 0){ $wend += 7; } if($wend == 7){ echo ""; //この行はなくてもよい } else if($wend != 0){ for($dot2 =0 ; $dot2 < $wend ;$dot2++){ echo "<td align='center' class='dot'></td>\n"; } } /////////カレンダー終り echo "</tr></table>\n"; echo "</td></tr></table>\n"; ?> <br><br> </div> </form> </body> </html> 上記のソースでカレンダー表示は行えます。 しかし、今日の日付をハイライトすることができません。。 どなたかご存知の方、いらっしゃらないでしょうか? お願いします。

    • ベストアンサー
    • PHP
  • 万年カレンダーについて

    万年カレンダーについて質問します。例えば、11月10日(月)が休みとした場合に11月10日(月)セルの背景を赤色にする方法を教えて下さい。下記のプログラムに加える記述方法を教えて下さい。 <?php if($_GET['num']==''){ $today_year =date("Y"); $today_month=date("n"); }else{ $timestamp=mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year =date("Y",$timestamp); $today_month=date("n",$timestamp); } $current=mktime(0,0,0,$today_month,1,$today_year); $first_day=date("w",$current); $last_day=date("t",$current); ?> <html> <head> <title>万年カレンダ</title> </head> <body> <h1 style="background:#cccccc"> <?php print(date("Y年m月",$current)); ?>のカレンダ</h1> <table border="1" width="300"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th> <th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1;$i<=$first_day+$last_day;$i++){ if($i%7==1){print("<tr>"); } if($i>$first_day){ print("<td>".($i-$first_day)."</td>"); }else{ print("<td>&nbsp;</td>"); } if($i%7==0){print("</tr>");} } ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • PHPによるカレンダーについて

    PHPでカレンダーを作成しています。 プルダウンで年月を指定し、更新ボタンを押せば、指定した年月のカレンダーを表示させたいのですが、うまくいきません。 更新ボタンを押してもカレンダーが変わらないです。 KOMOカレンダーというサイトを参考にして、文字コードを変えただけです。 教えてくださる方がいらっしゃいましたら宜しくお願いいたします。 <?php $last_year = 2037; $wday_color = "#000000"; $sat_color = "#0000ff"; $sun_color = "#ff0000"; $reg_color = "#ffccff"; $year = (!isset($year)) ? date("Y") : $year; $month = (!isset($month)) ? date("n") : $month; ?> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>カレンダー</TITLE> </HEAD> <BODY> <P><FONT SIZE="6" COLOR="#006600">カレンダー</FONT></P> <P> <TABLE BORDER="1"CELLSPACING="1" CELLPADDING="1"> <TR> <TD COLSPAN="7"> <SELECT NAME="year"> <?php for($i = 2002; $i <= $last_year; $i++){ echo "<option value=".$i.(($i == $year) ? ' selected':'').">".$i."年\n"; } ?> </SELECT> <SELECT NAME="month"> <?php for($i = 1; $i <= 12; $i++){ echo "<option value=" . $i . (($i == $month) ? ' selected':'').">".$i."月\n"; } ?> </SELECT> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="更新"></TD> </TR> <TR> <TD> <P ALIGN="CENTER"><FONT COLOR="red">日</FONT> </TD> <TD> <P ALIGN="CENTER">月 </TD> <TD> <P ALIGN="CENTER">火 </TD> <TD> <P ALIGN="CENTER">水 </TD> <TD> <P ALIGN="CENTER">木 </TD> <TD> <P ALIGN="CENTER">金 </TD> <TD> <P ALIGN="CENTER"><FONT COLOR="blue">土</FONT> </TD> </TR> <?php $time = mktime(0, 0, 0, $month, 1, $year); $day_of_first = date("w", $time); $date_of_month = date("t", $time); $week_of_month = ceil($date_of_month / 7); if(($date_of_month % 7 > 7 - $day_of_first) || ($date_of_month % 7 == 0 && $day_of_first != 0)){ $week_of_month++; } for($i = 1; $i <= $week_of_month * 7; $i++){ if($i % 7 == 1){ echo "<tr>"; } if(($i - 1 < $day_of_first) || ($i > $date_of_month + $day_of_first)){ echo "<td>&nbsp;</td>"; }else{ if($i % 7 == 1){ $color = $sun_color; }elseif($i % 7 == 0){ $color = $sat_color; }else{ $color = $wday_color; } echo "<td width=30 height=30 align=right valign=top>"; echo "<font color=" . $color . ">"; echo $i - $day_of_first; echo "</font></td>"; } if($i % 7 == 0){ echo "</tr>\n"; } } ?> </TABLE> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHPでカレンダー

    PHPを使ってカレンダーを作成しました。が、コードの意味が良く分かりません。 コードは以下の通りです。 <?php if($_GET['num']==''){ $today_year = date("Y"); //4桁の西暦年 $today_month = date("n"); //1~12の月 }else{ $timestamp = mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year = date("Y",$timestamp); $today_month = date("n",$timestamp); //1~12月 } $current = mktime(0,0,0,$today_month,1,$today_year); $first_day = date("w",$current); //1日の曜日を0~6に当てはめる $last_day= date("t",$current); //月の日数 ?> <html> <head> <title>カンレンダー</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <h1><?php print (date("Y年m月",$current)); ?>のカレンダー</h1> <table border="1" cellpadding="0" cellspacing="2"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1; $i<=$first_day+$last_day; $i++){ if($i%7==1){print ("<tr>");} if($i>$first_day){ print ("<td>".($i-$first_day)."</td>"); }else{ print ("<td>&nbsp;</td>"); } if($i%7==0){print ("</tr>");} } ?> </table> </body> </html> for以降の部分が良く分かりません。よろしくお願いします。※上記のスクリプトで正しく表示されることは確認済です。

    • 締切済み
    • PHP
  • PHP 余分に出来たタグを消したい

    PHP初心者です。 ただ今カレンダーを作成しております。 コードは以下です。 <?php $d=isset($_GET['d'])? $_GET['d']:date("Y-n-d"); list($year,$month,$day)=explode("-",$d); $prev=date("Y-n-d",mktime(0,0,0,$month-1,1,$year)); $next=date("Y-n-d",mktime(0,0,0,$month+1,1,$year)); $timestamp = mktime(0,0,0,$month,1,$year); $fd=date("w",$timestamp); $ld=date("t",$timestamp); ?> <table> <tr> <th><a href="?d=<?php echo$prev; ?>">←</a></th> <th colspan="5"><?php echo ("<h1>".$year."年".$month."月</h1>"); ?></th>   <th><a href="?d=<?php echo$next; ?>">→</a></th> </tr> <tr> <th class="sun">日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th class="sat">土</th> </tr> <tr> <?php $offset = $fd; // while($fd--){ //$y ++; // 空セル文曜日を増やす $s .= "<td></td>\n"; } for($i=1; $i<=$ld; $i++){ $tmp = $offset + $i; //$tmpを$offset(1日までの空セル) と $i(31日)を足したものにする $s.="<td>$i</td>\n"; //$sに日数とセルを追加 if($tmp % 7 ==0){ //$tmp(空セル+その月の日数)を7で割りあまりが0すなわち土曜日まできたら $s.= "</tr>\n<tr>\n"; //</tr>で改行をいれる } } $y=0; for($i=1; $i<=$tmp; $i++){ //$tmp(空セル+その月の日数)になるまで if($y % 7 == 0){ //7倍数になったら0にリセットする $y = 0; } $y++; //リセットされた残りの曜日 } $r=7-$y; $y=0; while($r--){ $s.='<td></td>'; } for($i=1; $i<=$tmp; $i++){ if($tmp % 7 == 0){ $s.="</table>\n"; break; }else{ $s.="</tr></table>\n"; break; } } echo $s; ?> 一見出来ているようですが、最終日が土曜日になると余分な<tr>が入ってしまいます。 原因として、 if($tmp % 7 ==0){ $s.= "</tr>\n<tr>\n";} と入れてあり、土曜日に7がくる(7で割り切れる数字で終わる)であるとは理解しているのですが、どうすれば、「最終セルに最後の日が来たときに<tr>をいれない」といった命令の仕方がわかりません。 素人ですので、分かりやすく解説していただけると嬉しいです。 よろしくお願い致します。

  • 変数で、<td></td>ごと吐き出したいです。

    こんにちは。 いつもお世話になっております。 20項目ほどある項目の検索画面を作りたくて 色々考えながら作業をしております。 ------------------------------------------------ 【試している事】 $td = ""; $td2 = ""; という変数を用意して、IF文の分岐によって それぞれ $td .= "<td>年</td>"; $td2 .= "<td>".$rows['year']."</td>\n"; という値を挿入していきたいのです。 echoで吐き出されている値の確認をしたのですが、 echo "$td\n"; は、ちゃんと吐き出されてくれるのですが、 while ($rows=mysql_fetch_array($res)) { echo "<tr>\n"; echo "$td2\n"; echo "</tr>\n"; になると、吐き出されるのは<td></td>だけで 間の$rows['year']は全く無視されてしまいます。 書き方として間違っているのでしょうか・・? どうかご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • cgiとhtml

    #!/urs/bin/local/perl use CGI qw(:standard); use Date::Calc qw(:all); $year = param('year'); $mon = param('mon'); if ($year or $mon){ #年、月がないとエラー if (!$year){ &error(100,'年、月を入力して下さい。'); }elsif(!$mon){ &error(110,'年、月を入力して下さい。'); } #年は1以上、月は、1~12の範囲 #紀元前は計算しない if($year < 1){ &error(120,'年に誤りがあります。'); } if($mon < 1 or $mon > 12){ &error(130,'月に誤りがあります。'); } #カレンダーの計算 $cline = Calendar($year,$mon); #先頭行と最終行をとる $cline =~ s/^\n//; $cline =~ s/\n$//; #改行区切りで分割 @Cal = split(/\n/,$cline); #まず、年、月をテーブルに入れる $CAL.=<<"EOL"; <table border="1"> <tr> <td colspan="7" align="center">$year年$mon月</td> </tr> EOL #曜日をテーブルに入れる $CAL.=<<"EOL"; <tr> <td>日</td> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td>土</td> </tr> EOL #日付をテーブルに入れる for($i=2; $i<=$#Cal; $i++){ $CAL.= <<"EOL"; <tr> EOL $shift=3; #1日に3文字文使う $s = 0; for ($j=0; $j<7; $j++){ $day = substr($Cal[$i], $s, $shift); if($day !~ /\d/){ $day = '&nbsp;'; #数字がなければスペース }else{ $day =~ s/ //g; #余分なスペースをとる } $CAL.=<<"EOL"; <td align="right">$day</td> EOL $s += $shift #3文字を右へ $s += 1; #2回目からは、区切り文字も計算 } $CAL.=<<"EOL"; </tr> EOL } $CAL.=<<"EOL"; </table> EOL } print <<"EOL"; Content-type: txet/html というプログラムを作ってカレンダーを表示させたいのですが、 HTMLで打つときに <html> <head> <title>カレンダー</title> </head> <body> <from action="report.cgi"> 年:<input type="text" size="4" name="year"> 月:<input type="text" size="2" name="mon"> <br> <input type="submit" value="表示"> </from> <br><br> $CAL(と入れたのですが、画面に%CALと出るだけでカレンダーが表示されません) </body> </html> 何を入れると画面ににきれいにカレンダーが表示されるのでしょうか?

    • ベストアンサー
    • CGI
  • html

    #!/urs/bin/local/perl use CGI qw(:standard); use Date::Calc qw(:all); $year = param('year'); $mon = param('mon'); if ($year or $mon){ #年、月がないとエラー if (!$year){ &error(100,'年、月を入力して下さい。'); }elsif(!$mon){ &error(110,'年、月を入力して下さい。'); } #年は1以上、月は、1~12の範囲 #紀元前は計算しない if($year < 1){ &error(120,'年に誤りがあります。'); } if($mon < 1 or $mon > 12){ &error(130,'月に誤りがあります。'); } #カレンダーの計算 $cline = Calendar($year,$mon); #先頭行と最終行をとる $cline =~ s/^\n//; $cline =~ s/\n$//; #改行区切りで分割 @Cal = split(/\n/,$cline); #まず、年、月をテーブルに入れる $CAL.=<<"EOL"; <table border="1"> <tr> <td colspan="7" align="center">$year年$mon月</td> </tr> EOL #曜日をテーブルに入れる $CAL.=<<"EOL"; <tr> <td>日</td> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td>土</td> </tr> EOL #日付をテーブルに入れる for($i=2; $i<=$#Cal; $i++){ $CAL.= <<"EOL"; <tr> EOL $shift=3; #1日に3文字文使う $s = 0; for ($j=0; $j<7; $j++){ $day = substr($Cal[$i], $s, $shift); if($day !~ /\d/){ $day = '&nbsp;'; #数字がなければスペース }else{ $day =~ s/ //g; #余分なスペースをとる } $CAL.=<<"EOL"; <td align="right">$day</td> EOL $s += $shift #3文字を右へ $s += 1; #2回目からは、区切り文字も計算 } $CAL.=<<"EOL"; </tr> EOL } $CAL.=<<"EOL"; </table> EOL } print <<"EOL"; Content-type: txet/html というプログラムを作ってカレンダーを表示させたいのですが、 HTMLで打つときに <html> <head> <title>カレンダー</title> </head> <body> <from action="report.cgi"> 年:<input type="text" size="4" name="year"> 月:<input type="text" size="2" name="mon"> <br> <input type="submit" value="表示"> </from> <br><br> ここに入れるべきものがよくわかりません。 </body> </html> 何を入れるとプログラムにきれいにカレンダーが表示されるのでしょうか?

    • ベストアンサー
    • HTML
  • 該当日のスケジュール内容を別ウィンドウで表示したいのですが…。

    初めて質問させて頂きます。 プログラム初心者です。 今、課題でカレンダー作成(予定を表示させる)をしています。 現在の時点でカレンダーの指定日(予定のある日)にリンクをつけるところまでは出来たのですが、リンク先に移動した際に該当日の予定を表示させるのが出来なくて困っています。 (予定はCSVファイルからuploadしています。) どなたかお力を貸して頂けませんでしょうか??…orz。 宜しくお願いします。 ソースはこちらです。 …読みにくくてすみません(泣 <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>カレンダー</title> </head> <form name="skl" method="post" action="yotei.php"> <body> <?php  $year = date("Y");  $month = date("n");  $day = date("j");  $year2=$_GET["year"];  $month2=$_GET["month"];  $day2=$_GET["day"]; //先月、来月をクリックした場合の処理  if($year2!="" || $month2!="" || $day2!="") {   if($year2!="") {    $year = $year2;   }   if($month2!="") {    $month = $month2;   }   if($day2!="") {    $day = $day2;   }else {    $day = 1;   }  } // カレンダー表示(先月の場合)  if($month==1) {   $year3 = $year-1;   $month3 = 12;  }else {   $year3 = $year;   $month3 = $month-1;  } // カレンダー表示(来月の場合)  if($month==12) {   $year4 = $year+1;   $month4 = 1;  }else {   $year4 = $year;   $month4 = $month+1;  } // テーブルの作成  print "<tableborder='1'><tr>";  print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>";  print "<a href=\"?year=$year3&month=$month3\"><<</a>";  print " ".$year."年".$month."月のカレンダー ";  print "<a href=\"?year=$year4&month=$month4\">>></a></td></tr>";  print "<tr><td align='center' bgcolor='pink'>日</td>";  print "<td align='center' bgcolor='silver'>月</td>";  print "<td align='center' bgcolor='silver'>火</td>";  print "<td align='center' bgcolor='silver'>水</td>";  print "<td align='center' bgcolor='silver'>木</td>";  print "<td align='center' bgcolor='silver'>金</td>";  print "<td align='center' bgcolor='skyblue'>土</td></tr>";  $week = date(w,mktime(0,0,0,$month,1,$year));  for ($ix1 = 0 ; $ix1 < $week ; $ix1++) {   print "<td align='center'>-</td>";  } // ファイルの読み込み  $data = "date- data.CSV";  $file = fopen($data,"r");  while(!feof($file)){   $csv = fgets($file);   $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納   $str = explode(",", $csv);   for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {    if($str[1] == "$year/$month/$day") {     $ymd[] = $str[1];    }   }  }  for($day = 1 ; checkdate ($month,$day,$year) ; $day++) {   print "<td align='center'";   if(($day+$week)%7 == 1 ) {    print "bgcolor='pink'><font color='red'>";   }else if(($day+$week)%7 == 0 ) {    print "bgcolor='skyblue'><font color='blue'>";   }else {    print "bgcolor='wheat'>";   }   for($i=0 ; $i<count($ymd) ; $i++) {    if($ymd[$i] == "$year/$month/$day") {     print "<a href=yotei.php>";    }   }   print "$day</td>";   if(($day+$week)%7 == 0 ) {    print "</tr>";   }  }  fclose($file);  $weekend = date(w,mktime(0,0,0,$month,$day,$year));  for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) {   if ($weekend != 0) {    print "<td align='center'>-</td>";   }  }  print "</tr>";  print "</table>"; ?> <table border='0'> <tr> <td width="250"> <div align="center"> <input type="button" value="ファイル参照画面へ戻る" onClick="location.href='upload.php'" name="button"> </div> </td> </tr> </table> <br><br> </body> </form> </html>

    • 締切済み
    • PHP

専門家に質問してみよう