5

これまでに質問されたことがある場合は申し訳ありませんが、問題の答えを見つけるのに苦労しています。

PHPでWebアプリケーションのカレンダーシステムとスケジュールシステムを構築しようとしていますが、特定の領域で問題が発生しています。

午前12時から午後11時30分までの時刻を作成する「for」ステートメントがあります。

このforループの中に、特定の時間に一致する配列内のオブジェクトをエコーアウトしたいforeachがあります。

for、while、foreachステートメントの使用を含む私が試したすべてのステートメントは、その後のイベントが時間の隣に並んでいることを示していません。

これが私のコードです

<?php
$tStart = strtotime($start_time);
$tEnd = strtotime($end_time);
$tNow = $tStart;

while($items = mysql_fetch_object($result)){
    $events[] = $items;
}

for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){
    // Time to color the rows to make it easier to read
    if(!isset($day_row)){
        $day_row = "0";
    }
    if(isset($day_row) && $day_row >= "2"){
        $day_row--;
    }
    else{ $day_row++; 
    }

    //This bit draws the first column.
    echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>";

    // MySQL stuff is now here
    foreach($events as $e => $item){
        if($item->apnt_start == $tnow){
            $rowspan = ((strtotime($item->apnt_finish)-strtotime($item->apnt_start))/"1800");
            echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$item->apnt_start."-".$item->apnt_finish." ".$item->apnt_brief."</td></tr>";
        }
    }
}
?>

現在、
12:00 AM
12:30 AM
01:00 AM
01:30 AM
02:00 AM
02:30 AM
03:00 AM
03:30 AM
04:00 AM
04:30 AM
05:のページが表示されます。 00 AM
05:30 AM

時間の隣に、時間と一致する予定が欲しいです。

http://mrbs.sourceforge.net/に似たものを実現しようとして いますが、システムを適切に統合できず、コードを調べてみたところ、多くの人を指しているようです。ファイルと私は私が求めている機能を理解しようとして問題を抱えています。

これが十分に明確でない場合は私に知らせてください、そしてさらに説明しようとします。

4

3 に答える 3

0

さて、これはあなたのために働くはずです。

<?php
    $tStart = strtotime($start_time);
    $tEnd = strtotime($end_time);
    $tNow = $tStart;

    echo '<table>';

    while($events = mysql_fetch_assoc($result)){
        for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){
        // Time to color the rows to make it easier to read
            if(!isset($day_row)){
                $day_row = "0";
            }
            if(isset($day_row) && $day_row >= "2"){
                $day_row--;
            }
            else{ $day_row++; 
            }

            //This bit draws the first column.
            echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>";
            if(strtotime($events['apnt_start']) == $tNow) {     
                $rowspan = ((strtotime($events->apnt_finish)-strtotime($events->apnt_start))/"1800");
                echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$events->apnt_start."-".$events->apnt_finish." ".$events->apnt_brief."</td></tr>";
            }
        } //end for
    } //end while
    echo '</table>';
?>
于 2012-11-17T06:24:59.893 に答える
0

以下の変数の値を定義して設定する必要があります。

$start_time = "09:00 AM";
$end_time = "11:30 PM";

また、クエリとデータベース接続を追加する必要があります(while($items = mysql_fetch_object($result)){ステートメントの上):

mysql_connect("hostname", "user", "password");
mysql_select_db("mydb");
$result = mysql_query("select * from mytable");

編集: mysql_fetch_objectの代わりにmysql_fetch_assocを使用する必要があります。交換

while($items = mysql_fetch_object($result)){

while($items = mysql_fetch_assoc($result)){

消去:$events[] = $items;

すべてのコード(質問にリストしたコード)が実行された後、上記のwhileステートメントが終了することを確認してください-閉じ括弧}

于 2012-11-17T03:53:50.297 に答える
0

この問題についてアドバイスを提供してくれたすべての人に感謝します。ついに、別の変数を追加し、配列を配列に格納する方法を使用して動作するようになりました。

最終的なコードは次のようになります

<?php
    $tStart = strtotime($start_time);
    $tEnd = strtotime($end_time);
    $tNow = $tStart;
    $events = array();
    $eas = "0"; // eas stands for Event Array Start. this will be used to cycle through the events in the array.
    while($items = mysql_fetch_assoc($result)){
        $events[] = $items;
    }

    for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){
        // Time to color the rows to make it easier to read
            if(!isset($day_row)){
                $day_row = "0";
            }
            if(isset($day_row) && $day_row >= "2"){
                $day_row--;
            }
            else{ $day_row++; 
            }

            //This bit draws the first column.
            echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>";
        if(strtotime($events[$eas]['apnt_start']) == $tNow) {     
                $rowspan = ((strtotime($events[$eas]['apnt_finish'])-strtotime($events[$eas]['apnt_start']))/"1800");
                echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\" >".$events[$eas]['apnt_start']."-".$events[$eas]['apnt_finish']." ".$events[$eas]['apnt_brief']."</td></tr>";
                $eas++;
           }
            else{
                echo "<td class=\"day_row".$day_row."\"></td>";
            }
        } //end for
?>

変数$easを使用することで、最初に0に設定することで開始する番号を制御でき、一致する時間のエントリが見つかったときに、ifステートメントを通過しました。ifステートメントの最後にそれがあります。増分する$eas++が与えられました。

これにより、予定がない場合、$ easは実行されず、インクリメントされず、最後にインクリメントされた$easに留まることが証明されました。

皆様のご協力に改めて感謝いたします。

于 2012-11-18T01:03:40.797 に答える