[英]It is only displaying one option in the drop down menu
我在下面的代碼中輸入了“課程”,然后用戶將顯示屬於該特定課程的相關模塊,然后將顯示一個屬於所選模塊的下拉菜單。
問題在於,即使該特定模塊下有很多會話,它也只在屬於該模塊的下拉菜單中顯示一個會話。
例如下面是數據庫“會話”表:
會話表:
SessionId SessionDate SessionTime ModuleId
AAA 2012-10-19 09:00:00 CHI2513
AFD 2012-10-29 10:00:00 CHI2513
TPP 2012-09-11 09:00:00 CHI2513
NUM 2012-05-03 11:00:00 CHI2513
然后,當用戶從“模塊”下拉菜單中選擇“ CHI2513”模塊時,則在“會話”下拉菜單中應顯示以下選項:
會話下拉菜單:
AAA 2012-10-19 09:00:00
AFD 2012-10-29 10:00:00
TPP 2012-09-11 09:00:00
NUM 2012-05-03 11:00:00
但是相反,它僅在下拉菜單中顯示一個會話,如下所示:
現在顯示的“會話下拉菜單”:
TPP 2012-09-11 09:00:00
那么,如何在下拉菜單中顯示與所選模塊相關的所有會話?
下面是代碼:
<?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
}
}
$sessionnum = 0;
if (isset($_POST['modulesubmit'])) {
if($_REQUEST['modulesDrop']==''){
echo "Please Select a Module from the Drop Down Menu Above";
}
else{
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>";
}
}
?>
好吧,您正在對查詢應用ORDER BY
子句,對我來說,TPP數據行是查詢輸出的數據的最后一位。 然后,這又告訴我查看構建HTML輸出的循環。
在該循環中,您有$output = "";
在循環的開始。 每次循環都會重置它。 您也可以使用$moduleHTML
做同樣的事情
因此,我可以看到在每個循環結束時回顯的$output
如何正確顯示結果。 但是在您調用modelHTML
下面的表單中,對於遍歷結果的每個循環都將對其進行重置,從而消除了.=
的概念以附加到其上。 你應該做的就是放
$moduleHTML
在foreach之外,因此最初在其中定義,然后其他所有內容保持不變。
例如:
$moduleHTML = "";
foreach(....){.....}
代替
foreach(....){....$moduleHTML = "";....}
它當前所做的只是保存上一次運行,因此可以循環瀏覽以在小部件,模塊,表單等中輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.