人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以前PHPについて質問させて頂きました。
同じ質問になってしまいますが、自分でソースを書いたらうまく動きません。デバッグしてくれたら嬉しいです。ポイントはそれなりにお支払いします。

http://q.hatena.ne.jp/1163814335
http://q.hatena.ne.jp/1164007516
この問題でさらに機能をつけたく、例えば今日の日付を取得します。今日が11/23であれば今日の日付を取得します。今日から月末までは$iにリンクをつけて(リンク先はなんでもOK)、1日から今日までの日付は日付($i)はリンクをつけません。リンクは"<td align=\"center\"><A href=XXX>$i</A></td>\n";につけます。このような条件文はどのようにしたらよいでしょうか?
ソースコードは下記のサイトにあります。このソースコードを改造したいと思っていますので、このコードを元にお願いいたします。
http://www.geocities.jp/kingmaskmelon/test.htm

●質問者: popattack
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:23 PHP コード サイト ソース
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●50ポイント

原因は、{} の整合が崩れていたためです。

インデントのみ修正:オリジナル

function uruu($year) {
 $ret = 28 ;
 if (($year % 4) == 0) $ret = 29 ;
 if (($year % 100) == 0) $ret = 28 ;
 if (($year % 400) == 0) $ret = 29 ;
 return $ret;
}

 if ($getResult==29 && $getMonth==2){
 $monthLast[1]=29;
}

インデント修正後

// うるう年の計算
function uruu($year) {
 $ret = 28 ;
 if (($year % 4) == 0) $ret = 29 ;
 if (($year % 100) == 0) $ret = 28 ;
 if (($year % 400) == 0) $ret = 29 ;
 return $ret;

 if ($getResult==29 && $getMonth==2){
 $monthLast[1]=29;
 }
}

PHPエディタ

のような開発環境を使用すると、文法や{}の整合性をチェックしてくれるので、このようなエラーを発見しやすいと思います。


たいした問題ではないので、ポイントは規定値で結構ですよ。

◎質問者からの返答

こんにちは、Mook様にはお世話になっております。function uruuは特に使っていなく、いろいろ勉強していたときのコードがそのまま残っていてついていたので、必要がなく、function uruuは削除しましたが、直りません。

今日が28日なので、本来は1日から28日までのリンクが表示されなく、29日から30日までのリンクはさせたいとおもっていますが、直りません。


2 ● okuryu
●100ポイント
function drawCalender1( $y ,$m ) {

 global $hi;

 ...

}

関数の内部で $hi をグローバル宣言してみてはどうでしょうか。

関数の外部で宣言した変数を関数の内部で有効にするには グローバル宣言する必要があります。

http://www.php.net/manual/ja/language.variables.scope.php:PHP: 変数のスコープ - Manual]

◎質問者からの返答

globalが問題だったのですね。まだコードをしっかり見ないと理解できないところがありますので、じっくりと読んでみます。ありがとうございます。


3 ● Mook
●250ポイント ベストアンサー

失礼しました。

質問にもう一点、機能の追加がありましたね。

下記に変更例を掲載します。

ただし、drawCalender1 のみリンクの対応をしています。

drawCalender2 に関しては、同様にできると思いますので、そのままに保留してあります。

<?php

//function drawCalender1
function drawCalender1( $y ,$m ) {
// $dateinfo = getdate(); //YEARとMonthを受け取る
 $hi = date('j'); // $dateinfo['mday']; //get today's date
 $mm = date('n'); // $dateinfo['mon'];
 $yy = date('Y'); // $dateinfo['year'];

 $t = mktime(0, 0, 0, $m, 1, $y); //$y年$m月1日のUNIXTIME 日付情報の作成
 $w = date( 'w', $t ); //1日の曜日(0:日?6:土)その月の曜日を求める
 $n = date( 't', $t ); //$y年$m月の日数

 print "<TD colspan=7 align=center>";
 print $y;
 print "年";
 print $m;
 print "月";
 print "</TD>";

print <<<DAY_TITLE
 <tr>
 <TD><FONT color="#ff0000">SUN</FONT></TD>
 <TD>MON</TD>
 <TD>TUE</TD>
 <TD>WED</TD>
 <TD>THU</TD>
 <TD>FRI</TD>
 <TD><FONT color="#0000ff">SAT</FONT></TD>
 </TR>
DAY_TITLE;

 for( $i = 1 - $w ; $i <= $n + 7 ; $i++ ){
 if ( ( ( $i + $w ) % 7 ) == 1 ) {
 print "<tr>\n";
 }
 switch ( ( $i + $w ) % 7 ) {
 case 0 :
 $tdClass = '"saturday"';
 break;
 case 1 : $tdClass = '"sunday"';
 break;
 default : $tdClass = '"weekday"';
 break;
 }
 if ( ( 0 < $i ) && ( $i <= $n ) ) { //1日から月の終わりまで
 if( mktime( 0, 0, 0, $m, $i, $y ) > mktime( 0,0,0, $mm, $hi, $yy ) ) { //リンク分岐 case0は土曜
 print "<td class=$tdClass align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n";
 }else {
 print "<td class=$tdClass align=\"center\">$i</A></td>\n";
 }
 } else {
 print "<td class=$tdClass>&nbsp;</td>\n";
 }
 if ((( $i + $w ) % 7 ) == 0 ) {
 print "</tr>\n";
 if ( $i >= $n ) {
 break;
 }
 }
 }
 print "</table>\n";
}

//function drawCalender2
function drawCalender2( $y ,$m ) {
 $t = mktime(0, 0, 0, $m, 1, $y); //$y年$m月1日のUNIXTIME 日付情報の作成
 $w = date('w', $t); //1日の曜日(0:日?6:土)その月の曜日を求める
 $n = date('t', $t); //$y年$m月の日数
 
 if($m==12){
 $m=1;
 $y=$y+1;
 }else{
 $m=$m+1;
 }

 print "<TD colspan=7 align=center>";
 print $y;
 print "年";
 print $m;
 print "月";
 print "</TD>";

print <<<DAY_TITLE
 <tr>
 <TD><FONT color="#ff0000">SUN</FONT></TD>
 <td>MON</td>
 <td>TUE</td>
 <td>WED</td>
 <td>THU</td>
 <td>FRI</td>
 <TD><FONT color="#0000ff">SAT</FONT></TD>
 </tr>
 <tr>
DAY_TITLE;
 for( $i = 1 - $w ; $i <= $n + 7 ; $i++ ){
 if ( ( ( $i + $w ) % 7 ) == 1 ) {
 print "<tr>\n";
 }
 if ( ( 0 < $i ) && ( $i <= $n ) ) {
 switch ( ( $i + $w ) % 7 ) {
 case 0:
 print "<td class=\"saturday\" align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n";
 break;
 case 1:
 print "<td class=\"sunday\" align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n";
 break;
 default :
 print "<td align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n";
 break;
 } //switch end
 } else {
 print "<td>&nbsp;</td>\n";
 }
 if ((( $i + $w ) % 7 ) == 0 ) {
 print "</tr>\n";
 if ( $i >= $n ) {
 break;
 }
 }
 }
 print "</table>\n";
}
?>

<?php
// データの初期設定
$monthLast = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ;

// うるう年の計算
function uruu($year) {
 $ret = 28 ;
 if (($year % 4) == 0) $ret = 29 ;
 if (($year % 100) == 0) $ret = 28 ;
 if (($year % 400) == 0) $ret = 29 ;
 return $ret;

 if ($getResult==29 && $getMonth==2){
 $monthLast[1]=29;
 }
}
?>

<HTML>
<style type="text/css">
<!--
td.sunday { background-color:#ffcccc;}
td.saturday { background-color:#ccffff;}
td.weekday { background-color:#ffffff;}
-->
</style>
<BODY>
 <TABLE border="1">
 <TBODY>
 <?php
 //第一テーブル
 drawCalender1(date('Y'),date('n'));
 ?>
 </TBODY>
 </TABLE>

 <TABLE border="1">
 <TBODY>
 <?php
 //第二テーブル
 drawCalender2(date('Y'),date('n'));
 ?>
 </TBODY>
 </TABLE>
</BODY>
</HTML>

一つ、アドバイスをさせていただくと、関数の外で設定した変数は、通常関数の中で参照できません。

参照したい場合は、関数の最初で

global $y;

のように記述が必要です。

PHP 基礎編4


他に問題があれば、回数コメントを有効にするか回答回数を増やしていただければ、補足説明いたします。

◎質問者からの返答

globalが問題だったのですね。まだコードをしっかり見ないと理解できないところがありますので、じっくりと読んでみます。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ