簡體   English   中英

它沒有從下拉菜單中顯示正確的選項詳細信息

[英]it does not display correct option details from drop down menu

我正在嘗試從“課程”下拉模塊中檢索所選課程的詳細信息,然后顯示一個模塊下拉菜單,其中列出了屬於該課程的所有模塊。

我遇到的問題是,我的課程下拉菜單中有以下兩個選項:

INFO101 - Business
INFO102 - ICT

由於某些奇怪的原因,每次我從下拉菜單中選擇頂部選項(INFO101)並單擊Submit按鈕時,它總是顯示其他課程詳細信息(INFO102),從而顯示屬於該課程的模塊,而不顯示其他課程課程。

我的問題是當我從下拉菜單中提交(INFO101)選項時,為什么它顯示其他課程的信息?

下面是mysqli代碼

     $sql = "SELECT CourseId, CourseName FROM Course"; 

$sqlstmt=$mysqli->prepare($sql);

$sqlstmt->execute(); 

$sqlstmt->bind_result($dbCourseId, $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()) 
{ 
$course = $dbCourseId;
$coursename = $dbCourseName; 
$courseHTML .= '<option value="'.$course.'">' . $course . ' - ' . $coursename . '</option>'.PHP_EOL;  
} 

$courseHTML .= '</select>'; 
$courseHTML .= '</form>'; 

?>

<?php
include('noscript.php');
?>

<h1>CREATING A NEW ASSESSMENT</h1>

<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 = (isset($_POST['courses']));

$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",$submittedCourseId);
// 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 '$course'</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 $foundCourse => $courseData) {

$output = ""; 

$output .= "<p><strong>Course:</strong> " . $foundCourse .  " - "  . $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="/u0000000/Mobile_app/create_session.php" method="post">
        <table>
        <tr>
        <th>Course: <select name="courses" id="coursesDrop">
<option value="">Please Select</option>
<option value='INFO101'>INFO101 - Bsc Information Communication Technology</option>
<option value='INFO102'>INFO102 - Bsc Computing</option>
</select></form><input id="courseSubmit" type="submit" value="Submit" name="submit" /></th>
        </tr>
        </table>
        </form>

        <p>Sorry, No Course was found with this Course ID 'INFO102'</p>  

嘗試交換: foreach ($dataArray as $course => $courseData) for foreach ($dataArray as $foundCourse => $courseData)

然后foreach中的所有$course也應重命名。 您可以在頁面頂部使用$course變量,即使它不能解決問題,也會使代碼更易於理解。

您還應該研究使用PDO將您的數據庫提供程序抽象為http://www.php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated

編輯:

代碼說:“這是所有的課程,現在,如果您要提交使用$ course,並獲取其詳細信息,”

但是您根本不會獲得發布的課程,因此(恰好發生)將使用腳本頂部foreach中“剩余”的相同命名變量。

我建議按照上面的說明做,然后在if(isset($_POST['submit']))添加$submittedCourseId = $_POST['coursesDrop'];

然后在您的綁定$qrystmt->bind_param("s",$submittedCourseId);添加THAT $qrystmt->bind_param("s",$submittedCourseId);

我認為應該解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM