2012-11-26 39 views
1

下面我有一個php腳本,它顯示了「課程」下拉菜單和「模塊」下拉菜單。假定發生的事情是用戶首先從「課程」下拉菜單中選擇一門課程,然後屬於所選課程的模塊列表將出現在「模塊」下拉菜單中。下面是該代碼:

create_session.php

$sql = "SELECT CourseId, CourseNo, CourseName FROM Course"; 
$sqlstmt=$mysqli->prepare($sql); 
$sqlstmt->execute(); 
$sqlstmt->bind_result($dbCourseId, $dbCourseNo, $dbCourseName); 
$courses = array(); // easier if you don't use generic names for data 

$courseHTML = ""; 
$courseHTML .= '<select name="courses" id="coursesDrop">'.PHP_EOL; 
$courseHTML .= '<option value="">Please Select</option>'.PHP_EOL; 

while($sqlstmt->fetch()) 
{ 
    $courseno = $dbCourseNo; 
    $course = $dbCourseId; 
    $coursename = $dbCourseName; 
    $courseHTML .= "<option value='".$course."'>" . $courseno . " - " . $coursename . "</option>".PHP_EOL; 
} 

$courseHTML .= '</select>'; 

?> 

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

<?php 

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

    $submittedCourseId = $_POST['courses']; 

    $query = "SELECT cm.CourseId, cm.ModuleId, c.CourseNo, m.ModuleNo, 
      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",$submittedCourseId); 
    // get result and assign variables (prefix with db) 

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

    $qrystmt->store_result(); 

    $num = $qrystmt->num_rows(); 

    if($num ==0){ 
     echo "<p style='color: red'>Please Select a Course</p>"; 
    } else { 

     $dataArray = array(); 

     while ($qrystmt->fetch()) { 
      // data array 
      $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
      $dataArray[$dbCourseId]['CourseNo'] = $dbCourseNo; 
      $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
      $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo; 

      } 

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

      $output = ""; 

      $output .= "<p><strong>Course:</strong> " . $courseData['CourseNo'] . " - " . $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'>" . $moduleData['ModuleNo'] . " - " . $moduleData['ModuleName'] ."</option>".PHP_EOL;   
      } 
     } 
    $moduleHTML .= '</select>'; 

    echo $output; 

?> 

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

因此,可以說我在「課」中選擇課程INFO101 - Information Communication Technology下拉菜單,它會顯示以下模塊的模塊下拉低於此菜單與課程對應:

CHI2520 - Advanced Web Programming 
CHI2220 - Systems Strategy 
CHI2350 - Interactive Systems 

現在我想要做的是,我希望用戶選擇以下從下拉菜單中的一個模塊,然後提交表單導航到QandATable.php頁面。但我想知道如何從下拉菜單中檢索模塊編號和名稱並將其顯示在QandATable.php頁面中?我知道我應該使用$ _SESSION變量如何以及在哪裏在兩個頁面中寫入$ _SESSION變量?我也需要使用isset,所以我沒有得到一個未定義的變量?

下面是形式,導航到QandATable.php:

<form action="QandATable.php" method="post" id="sessionForm"> 
      <table><tr><th>6: Module:</th> 
      <td><?php echo $moduleHTML; ?></td> 
      </tr> 
      </table> 
      <p><strong>11: </strong><input class="questionBtn" type="submit" value="Prepare Questions" name="prequestion" /></p> 


     </form> 

回答

0

在回答你的問題。是的,最好在最初發布的變量上使用isset或is_null以確保您具有有效值。在將其寫入會話變量的情況下,儘管它並不重要。您可以爲會話變量分配一個空值,但如果您嘗試使用希望得到有效值的會話變量,則最終可能會導致意外的結果。

要設置會話變量,您可以執行以下操作。您可以隨時設置此項以便更新變量。我通常會在收集用戶數據後的某個帖子頁面上分配這些信息。

$_SESSION['variableName'] = $_POST['postedVariable']; 

請記住,您還需要在每個頁面的最頂部使用會話或可能被創建的會話變量點擊下面的代碼。如果您沒有在網頁上設置此代碼,並且用戶訪問了該代碼,則會丟失會話跟蹤。

session_start(); 

以後要引用一個存儲會話變量,你可以這樣做是這樣的:

echo $_SESSION['variableName']; 

希望我理解正確你的問題。

+0

感謝您的回答,我需要知道的是應該在'$ _POST ['postedVariable']'中爲模塊編號和模塊名稱發佈變量? – user1819709

+0

可以用表單上稱爲變量的任何東西來替換postedVariable。 CourseName或基於上述代碼的類似內容。 – Jammin411

+0

我的意思是它需要$ _POST name屬性,所以如果你做'$ _POST ['Modules']',因爲下拉菜單中選項的值是'$ dbModuleId',那麼它將輸出模塊的ID。現在我需要這個$ _POST在頁面上,但要張貼在QandATable.php中,我想發佈'$ dbModuleNo'和'$ dbModuleName',但我怎麼能發佈他們兩個變量?你真的可以做'$ _POST ['$ dbModuleNo'];''和'$ _POST ['$ dbModuleName'];'? – user1819709

0

但我想知道如何從下拉菜單中檢索模塊編號和名稱並將其顯示在QandATable.php頁面中?我知道我應該使用$ _SESSION變量如何以及在哪裏在兩個頁面中寫入$ _SESSION變量?

在此php代碼的末尾,您可以保存$ dataArray的全部或任何部分,例如,

if (!isset($_SESSION)) { 
    session_start(); 
} 
    $_SESSION['dataArray'] = $dataArray; 

當你加載你的QandATable。PHP頁面,您撥打:

if (!isset($_SESSION)) { 
    session_start(); 
} 
if (isset($_SESSION['dataArray'])){ 
    $dataArray = $_SESSION['dataArray']; 
} 

然後,您可以使用(由$ _ POST)您所選擇的選項作爲索引在數組中獲得您想要的信息。

相關問題