1

先生が前のドロップダウンメニューから選択したモジュールに応じて、試験(セッション)を取得しようとしています。

例えば:

ドロップダウンから選択されたモジュール: CHI2332(ModuleId)Advanced Database Systems(ModuleName)

ドロップダウンに表示されるExam(Session):

AAA(SessionId)24-04-2012(SessionDate)11:00:00(Session Time)
ARF(SessionId)13-06-2012(SessionDate)14:00:00(Session Time)
EFT(SessionId)10-09- 2012(SessionDate)09:00:00(Session Time)

これらの試験はモジュールのドロップダウンメニューから選択したmoduleIdと一致し、これらの試験のTeacherIdはこのページにログインしているTeacher Usernameに属しているため、上記の試験がドロップダウンメニューに表示されます。

問題は、[試験]ドロップダウンメニューでは、モジュールがそれらの試験に正当であるにもかかわらず、試験が見つからないように見えるため、ドロップダウンメニューにそれらの試験を表示する必要があることです。

代わりに、以下のエラーを出力するだけです。

Sessions: Notice: Undefined variable: sessionHTML in /.../ on line 178

必要なときにドロップダウンメニューに試験を表示するにはどうすればよいですか?

以下はデータベーステーブルです。

セッションテーブル:

SessionId SessionDate SessionTime ModuleId  
AAA       24-04-2012  11:00:00    CHI2332 
ARF       13-06-2012  14:00:00    CHI2332 
EFT       10-09-2012  09:00:00    CHI2332 

モジュールテーブル:

ModuleId  ModuleName
CHI2332   Advanced Database Systems

以下はphp/mysqliコードです。

<?php

         // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }

   $courseid = (isset($_POST['courseid'])) ? $_POST['courseid'] : '';

   ?>

       <h1>DELETING AN ASSESSMENT</h1>

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
         <p>Course ID: <input type="text" name="courseid" /><input id="courseSubmit" type="submit" value="Submit" name="submit" /></p>      
        </form>


        <?php
if (isset($_POST['submit'])) {

        $query = "
                 SELECT cm.CourseId, cm.ModuleId, 
                 c.CourseName,
                 m.ModuleName
                 FROM Course c
                 INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
                 JOIN Module m ON cm.ModuleId = m.ModuleId
                 WHERE
                 (c.CourseId = ?)
                 ORDER BY c.CourseName, m.ModuleId
                ";

    $qrystmt=$mysqli->prepare($query);
    // You only need to call bind_param once
    $qrystmt->bind_param("s",$courseid);
    // get result and assign variables (prefix with db)

    $qrystmt->execute(); 

    $qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseName,$dbModuleName);

     $qrystmt->store_result();

    $num = $qrystmt->num_rows();

    if($num ==0){
        echo "<p>Sorry, No Course was found with this Course ID '$courseid'</p>";
    } else { 

        $dataArray = array();

 while ( $qrystmt->fetch() ) { 
          // data array
          $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
          $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
           // session data
          $_SESSION['idcourse'] = $dbCourseId;
          $_SESSION['namecourse'] = $dbCourseName;

    }

     foreach ($dataArray as $courseId => $courseData) {

          $output = ""; 

          $output .= "<p><strong>Course:</strong> " . $courseId .  " - "  . $courseData['CourseName'] . "</p>";

       $moduleHTML = ""; 
       $moduleHTML .= '<select name="module" id="modulesDrop">'.PHP_EOL;
       $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;      
            foreach ($courseData['Modules'] as $moduleId => $moduleData) {        

            $moduleHTML .= "<option value='$moduleId'>" . $moduleId . " - " . $moduleData['ModuleName'] ."</option>".PHP_EOL;        
  } 
            }
            $moduleHTML .= '</select>';

      echo $output;

        }


        ?>

         <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
         <p>Module: <?php echo $moduleHTML; ?><input id="moduleSubmit" type="submit" value="Submit" name="modulesubmit" /></p>      
        </form> 



        <?php

    }

 if (isset($_POST['modulesubmit'])) {

     var_dump($_POST['modulesDrop']);

            $sessionquery = "
                 SELECT SessionId, SessionDate, SessionTime, ModuleId
                 FROM Session
                 WHERE
                 (ModuleId = ?)
                 ORDER BY SessionDate, SessionTime 
                ";

    $sessionqrystmt=$mysqli->prepare($sessionquery);
    // You only need to call bind_param once
    $sessionqrystmt->bind_param("s",$_POST['modulesDrop']);
    // get result and assign variables (prefix with db)

    $sessionqrystmt->execute(); 

    $sessionqrystmt->bind_result($dbSessionId,$dbSessionDate,$dbSessionTime, $dbModuleId);

     $sessionqrystmt->store_result();

    $sessionnum = $sessionqrystmt->num_rows();   

        $dataArraySession = array();

 while ( $sessionqrystmt->fetch() ) { 

     $dataArraySession[$dbModuleId]['Sessions'][$dbSessionId]['SessionDate'] = $dbSesisonDate['SessionTime'] = $dbSessionTime; 

    }

    foreach ($dataArraySession as $sessionId => $sessionData) {

       $sessionHTML = ""; 
       $sessionHTML .= '<select name="session" id="sessionsDrop">'.PHP_EOL;
       $sessionHTML .= '<option value="">Please Select</option>'.PHP_EOL;           
       $sessionHTML .= "<option value='$sessionId'>" . $sessionId . " - " . $sessionData['SessionDate']. " - " . $sessionData['SessionTime'] ."</option>".PHP_EOL;        
       $sessionHTML .= '</select>';
            }


     if ($sessionnum > 0) {

 ?>

         <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
         <p>Sessions: <?php echo $sessionHTML; ?><input id="sessionSubmit" type="submit" value="Submit" name="sesionsubmit" /></p>      
        </form>       

<?php

    }

    else {
   echo "<p>Sorry, You have No Sessions under this Module</p>";
}


}


        ?>

アプリケーションへのリンクはこちら:アプリケーション

4

2 に答える 2

1

ここにタイプミスがあります(行:111):

$dataArraySession[$dbSessionId]['Sessions']['SessionDate'] = $dbSesisonDate['SessionTime'] = $dbSesisonTime;

バインドされたパラメータが呼び出され、配列に$dbSessionTime割り当て$dbSesisonTimeます。$dataArraySessionこれ$dataArraySessionにより、109行目のwhileループの値が埋められなくなります。その後、foreach115行目のループは実行されず、$sessionHTMLこのループ内で定義されているため、後で131行目で使用すると未定義になります。

PS:アプリケーションに提供されたリンクを続行するには、認証が必要です。

特定のデータが存在しない場合に備えて、コードサンプルを提供するように編集courseIdします。

一部の結果が見つかった場合にのみドロップダウンが表示されるように、ステートメント130-132内の行を折り返しますif

if ($sessionnum > 0) {
   // display your form
}
else {
   echo "No results found!";
}
于 2012-10-16T15:40:07.143 に答える
0

変化する$sessionHTML .= '<select name="session" id="sessionsDrop">'.PHP_EOL;

$sessionHTML .= '<select name="sessionsDrop" id="sessionsDrop">'.PHP_EOL;

POSTで渡されるのはIDではなく名前です

<?php

     // connect to the database
 include('connect.php');

 /* check connection */
 if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
die();
}

 $courseid = (isset($_POST['courseid'])) ? $_POST['courseid'] : '';

?>

   <h1>DELETING AN ASSESSMENT</h1>

    <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
     <p>Course ID: <input type="text" name="courseid" /><input id="courseSubmit" type="submit" value="Submit" name="submit" /></p>      
    </form>


    <?php
  if (isset($_POST['submit'])) {

    $query = "
             SELECT cm.CourseId, cm.ModuleId, 
             c.CourseName,
             m.ModuleName
             FROM Course c
             INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
             JOIN Module m ON cm.ModuleId = m.ModuleId
             WHERE
             (c.CourseId = ?)
             ORDER BY c.CourseName, m.ModuleId
            ";

$qrystmt=$mysqli->prepare($query);
// You only need to call bind_param once
$qrystmt->bind_param("s",$courseid);
// get result and assign variables (prefix with db)

$qrystmt->execute(); 

$qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseName,$dbModuleName);

 $qrystmt->store_result();

$num = $qrystmt->num_rows();

if($num ==0){
    echo "<p>Sorry, No Course was found with this Course ID '$courseid'</p>";
} else { 

    $dataArray = array();

 while ( $qrystmt->fetch() ) { 
      // data array
      $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
      $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
       // session data
      $_SESSION['idcourse'] = $dbCourseId;
      $_SESSION['namecourse'] = $dbCourseName;

}

 foreach ($dataArray as $courseId => $courseData) {

      $output = ""; 

      $output .= "<p><strong>Course:</strong> " . $courseId .  " - "  . $courseData['CourseName'] . "</p>";

   $moduleHTML = ""; 
   $moduleHTML .= '<select name="modulesDrop" id="modulesDrop">'.PHP_EOL;
   $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;      
        foreach ($courseData['Modules'] as $moduleId => $moduleData) {        

        $moduleHTML .= "<option value='$moduleId'>" . $moduleId . " - " .   
    $moduleData['ModuleName'] ."</option>".PHP_EOL;        
  } 
        }
        $moduleHTML .= '</select>';

  echo $output;

    }


    ?>

     <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
     <p>Module: <?php echo $moduleHTML; ?><input id="moduleSubmit" type="submit" value="Submit" name="modulesubmit" /></p>      
    </form> 



    <?php

}

 if (isset($_POST['modulesubmit'])) {

 var_dump($_POST['modulesDrop']);

        $sessionquery = "
             SELECT SessionId, SessionDate, SessionTime, ModuleId
             FROM Session
             WHERE
             (ModuleId = ?)
             ORDER BY SessionDate, SessionTime 
            ";

$sessionqrystmt=$mysqli->prepare($sessionquery);
// You only need to call bind_param once
$sessionqrystmt->bind_param("s",$_POST['modulesDrop']);
// get result and assign variables (prefix with db)

$sessionqrystmt->execute(); 

$sessionqrystmt->bind_result($dbSessionId,$dbSessionDate,$dbSessionTime, $dbModuleId);

 $sessionqrystmt->store_result();

$sessionnum = $sessionqrystmt->num_rows();   

    $dataArraySession = array();

 while ( $sessionqrystmt->fetch() ) { 

 $dataArraySession[$dbSessionId]['SessionDate'] = $dbSessionDate;  
 $dataArraySession[$dbSessionId]['SessionTime'] = $dbSessionTime;



}

foreach ($dataArraySession as $sessionId => $sessionData) {

   $sessionHTML = ""; 
   $sessionHTML .= '<select name="session" id="sessionsDrop">'.PHP_EOL;
   $sessionHTML .= '<option value="">Please Select</option>'.PHP_EOL;           
   $sessionHTML .= "<option value='$sessionId'>" . $sessionId . " - " . $sessionData['SessionDate']. " - " . $sessionData['SessionTime'] ."</option>".PHP_EOL;        
   $sessionHTML .= '</select>';
        }


 if ($sessionnum > 0) {

 ?>

     <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
     <p>Sessions: <?php echo $sessionHTML; ?><input id="sessionSubmit" type="submit" value="Submit" name="sesionsubmit" /></p>      
    </form>       

<?php

}

else {
 echo "<p>Sorry, You have No Sessions under this Module</p>";
}


}


    ?>
于 2012-10-17T21:03:31.823 に答える