2017-11-11 11 views
0

私は現在、PHPを使用してSql Serverデータベースからプルするクラススケジュールを作成しようとしていますが、レイアウト出力とデータをグループ化しています。リソース。foreach()ループ出力データの作成とレイアウトの作成

これらのグループは、のようなネストされている:

-DAY 
--TIME 
---CLASS 
----STUDENTS 

そして、このような出力すべきである:私の現在の出力は、しかし、働いている enter image description here

enter image description here

は、しかし、私はこれを取得しています、それは最初のループ上にあるだけです、そして、すべてはうんざりします。私は、間違った</div>タグが私のコードのどこかにあると仮定していますが、私の人生はそれを見つけることができません。

私のPHPコードのようなdelcareある関数です。

<div class="mainScheduleWrapper"> 
    <?php daySchedule(); ?> 
</div> 

私のPHPコードは次のような次のとおりです。

function daySchedule() { 
    global $conn; 
    $dayScheduleQuery = 'SET DATEFIRST 1 
       SELECT [DAY].[DAY] AS [DAY], CLASS.CLASSTIME AS CLASSTIME, CLASSLEVEL.CLASSLEVEL AS CLASSLEVEL, CLASS.MAXSTUDENT AS MAXSTUDENT, INSTRUCTOR.FIRSTNAME AS INSTRUCTOR, STUDENT.FIRSTNAME AS STUDENTFIRST, STUDENT.SURNAME AS STUDENTLAST, STUDENT.DOB AS STUDENTDOB 
       FROM STUDENT JOIN BOOKING ON STUDENT.ID = BOOKING.STUDENTID JOIN CLASS ON CLASS.ID = BOOKING.CLASSID JOIN CLASSLEVEL ON CLASS.CLASSLEVELID = CLASSLEVEL.ID JOIN [DAY] ON CLASS.CLASSDAY = [DAY].ID JOIN INSTRUCTOR ON CLASS.INSTRUCTORID = INSTRUCTOR.ID 
       WHERE [DAY].ID = (DATEPART(dw, GETUTCDATE() AT TIME ZONE \'AUS Eastern Standard Time\')) 
       ORDER BY CLASS.CLASSTIME ASC, INSTRUCTOR.FIRSTNAME ASC, CLASSLEVEL.CLASSLEVEL ASC'; 

    // COUNTERS 
    $t = 0; 
    $i = 0; 

    //VARIABLES FOR DAY SCHEDULE 
    $classDay = NULL; 
    $classTime = NULL; 
    $classInstructor = NULL; 
    $closeClass = false; 
    $closeAll = false; 
    $queryConnector = $conn->query($dayScheduleQuery); 

    foreach ($queryConnector as $schedule) { 

     // CLASS DAY HEADER 
     if ($classDay != $schedule['DAY']) { 

      echo '<div class="grid-1">'; 
      echo '<h1>' . $schedule['DAY'] . '</h1>'; 
      echo '</div><!-- Day closed! -->'; 
      $classDay = $schedule['DAY']; 

     } 

     // CLASS TIME HEADER 
     if ($classTime != $schedule['CLASSTIME']) { 

      if($classTime != $schedule['CLASSTIME'] && $t > 0) { 
       $closeAll = true; 
       goto closeAll; 
      } 

      echo '<div class="grid-12-noGutter scheduleContainer">'; //NON-CLOSED 
      echo '<h1>' . 'T = ' . $t . '</h1>'; 
      echo '<div class="grid-middle-center col scheduleTimeTab">'; 
       // FIX 3 DIGIT MILITARY TIME 
       if (strlen($schedule['CLASSTIME']) < 4) { 
        $classScheduleTime = '0' . $schedule['CLASSTIME']; 
       } else { 
        $classScheduleTime = $schedule['CLASSTIME']; 
       } 
       echo '<p>' . date('g:i A', strtotime($classScheduleTime)) . '</p>'; 
      echo '</div>'; //CLOSE TIME TAB 

      echo '<div class="innerSchedule">'; // NON-CLOSED 

      $classTime = $schedule['CLASSTIME']; 
      $t += 100; 

     } 
     // INSTRUCTOR HEADER 
     if ($classInstructor != $schedule['INSTRUCTOR']) { 

      if ($classInstructor != $schedule['INSTRUCTOR'] && $i > 0) { 
       $closeClass = true; 
       goto closeClassWrapper; 
      } 

      echo '<div class="classWrapper">'; 
      echo '<h1>' . 'I =' . $i . 'T = ' . $t . '</h1>'; 
       echo '<div class="grid-3-middle classHeader">'; 
        echo '<div class="col classHeaderCell' . classLevelColour($schedule['CLASSLEVEL']) . '">' . $schedule['CLASSLEVEL'] . '</div>'; 
        echo '<div class="col classHeaderCell">' . $schedule['INSTRUCTOR'] . '</div>'; 
        echo '<div class="col classHeaderCell">Max' . ' ' . $schedule['MAXSTUDENT'] . '</div>'; 
       echo '</div>'; 
       echo '<div class="grid-4-middle" id="studentHeaders">'; 
        echo '<div class="col"><h6>Student Name</h6></div>'; 
        echo '<div class="col"><h6>Student Birthday</h6></div>'; 
        echo '<div class="col"><h6>Class Level</h6></div>'; 
        echo '<div class="col"><h6>Attendance</h6></div>'; 
       echo '</div>'; 

      $classInstructor = $schedule['INSTRUCTOR']; 
      $i += 100; 

     } 
     echo '<div class="grid-4 studentRow">'; 
      echo '<div class="col">'; 
       echo '<span class="studentCell">' . $schedule['STUDENTFIRST'] . ' ' . $schedule['STUDENTLAST'] . '</span>'; 
      echo '</div>'; 
      echo '<div class="col">'; 
       echo '<span class="studentCell">' . $schedule['STUDENTDOB'] . '</span>'; 
      echo '</div>'; 
      echo '<div class="col">'; 
       echo '<span class="studentCell">' . $schedule['CLASSLEVEL'] . '</span>'; 
      echo '</div>'; 
      echo '<div class="col">'; 
       echo '<span class="studentCell">--</span>'; 
      echo '</div>'; 
     echo '</div>'; 

     // GOTO TAGS 
     closeClassWrapper: { 
      if ($closeClass === true) { 
       echo '</div>'; 
       $closeClass = false; 
       $i = 0; 
      } 
     } 

     closeAll: { 
      if ($closeAll === true) { 
       echo '</div>'; 
       echo '</div>'; 
       echo '</div>'; 
       $closeAll = false; 
       $t = 0; 
       $i = 0; 
      } 
     } 
    } 
} 

任意の助けをいただければ幸いです - それは私に教えていても、私はそれについて完全に間違った方法をしています。

親切よろしく マイケル・Z

+0

なぜPHPを使ってレイアウトをビルドしているのですか?悪い考え – meda

+0

データベースからこの構造を構築する方法を常に教えてください。 – user3436334

+0

確かに、あなたはあなたのビューがちょうど 'HTML'ファイルでなければならない、あなたのサーバーに要求を行うために' javascript'( 'AJAX')を使うならば、PHPを使ってクエリを実行してJSON 'データをクライアントに返します。 – meda

答えて

0

私はあなたがそれについて完全間違った道を進んでいると言うではないだろうが、いくつかの赤い旗はあなたのコードで私に飛び出しました。

  1. gotoジャンプの使用が悪い習慣です。それはあなたのプログラムの流れを変え、隔離すべきではないタスクを分離するよう強制します。 </div>が見つからなかった場合は、コード "// NON CLOSED"のセクションにマークを付けました。その目的はありますか? gotoセクションが信頼できることをどうやって知っていますか?

  2. (文字「すべてのため」\ のように)二重引用符をエスケープせずに<div class="col">好きecho何かが、それは問題になることがあります。あなたのコードは、PHPの終わりかHTMLの終わりのどちらにおいても混乱したり誤解されたりすることがあります。

他の人が言っているように、ここでは過剰な人がいるかもしれません。 JSONを送信するだけでなく、残りはJavaScriptで処理することができます。

+1

ヘッドアップありがとう! :) JSONの使用に関しては、私がこれを行った唯一の時間は、Shopifyとそのテンプレートシステムを使用してクライアントのサイトを構築するときです。私がJSONでやっていることを達成する方法を知るためのヒントは何ですか? – user3436334

+0

http://php.net/manual/en/function.json-encode.php JSONについてはほとんど分かりませんが、これは役に立ちます。 –

+1

Hmmm ...私はいくつかのものを探しており、多次元配列はこのタイプのレイアウトにも適しているようです。 – user3436334

関連する問題