下面我有一個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>
感謝您的回答,我需要知道的是應該在'$ _POST ['postedVariable']'中爲模塊編號和模塊名稱發佈變量? – user1819709
可以用表單上稱爲變量的任何東西來替換postedVariable。 CourseName或基於上述代碼的類似內容。 – Jammin411
我的意思是它需要$ _POST name屬性,所以如果你做'$ _POST ['Modules']',因爲下拉菜單中選項的值是'$ dbModuleId',那麼它將輸出模塊的ID。現在我需要這個$ _POST在頁面上,但要張貼在QandATable.php中,我想發佈'$ dbModuleNo'和'$ dbModuleName',但我怎麼能發佈他們兩個變量?你真的可以做'$ _POST ['$ dbModuleNo'];''和'$ _POST ['$ dbModuleName'];'? – user1819709