我在下面有一个基本的mysqli代码,它执行查询以从数据库中选择课程编号和课程名称,并在下拉菜单中显示。
$sql = "SELECT CourseId, CourseNo, CourseName FROM Course ORDER BY CourseId";
$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" onchange="getModules();">'.PHP_EOL;
$courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;
$outputcourse = "";
while($sqlstmt->fetch())
{
$course = $dbCourseId;
$courseno = $dbCourseNo;
$coursename = $dbCourseName;
$courseHTML .= "<option value='".$course."'>" . $courseno . " - " . $coursename . "</option>".PHP_EOL;
$outputcourse .= "<p><strong>Course:</strong> " . $courseno . " - " . $coursename . "</p>";
}
$courseHTML .= '</select>';
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" onsubmit="return validation();">
<table>
<tr>
<th>Course: <?php echo $courseHTML; ?></th>
</tr>
</table>
<p><input id="moduleSubmit" type="submit" value="Submit Course and Module" name="moduleSubmit" /></p>
</form>
<?php
if (isset($_POST['moduleSubmit'])) {
$assessmentform = "<div id='lt-container'>
<form action='".htmlentities($_SERVER['PHP_SELF'])."' method='post' id='assessmentForm'>
{$outputcourse}
</form>
</div>";
echo $assessmentform;
...
?>
现在让我们说下拉菜单包含以下这些课程:
INFO101 - Information Communication Technology
INFO102 - Computing
出于某些奇怪的原因,无论我从下拉菜单中选择哪一个课程,当我点击提交按钮时,回想一下,如果要在下拉菜单下输出,则始终输出课程编号和课程名称{{ 1}}。这是即使我选择了另一个选项INFO102 - Computing
为什么会发生这种情况?
答案 0 :(得分:1)
在while
循环中,您将在每次迭代时重新初始化$outputcourse
,而不是将其累积为长字符串。因此,它只会显示循环中提取的 last 项。
// Initialize $outputcourse outside the loop:
$outputcourse = "";
while($sqlstmt->fetch())
{
$course = $dbCourseId;
$courseno = $dbCourseNo;
$coursename = $dbCourseName;
$courseHTML .= "<option value='".$course."'>" . $courseno . " - " . $coursename . "</option>".PHP_EOL;
// Match the course in $_POST with the current fetch iteration and load $outputcourse
if (isset($_POST['courses']) && $_POST['courses'] == $course)) {
$outputcourse = "<p><strong>Course:</strong> " . $courseno . " - " . $coursename . "</p>";
}
}
现在,只有选定的课程会被加载到$outputcourse
。希望您在$assessmentform
中添加了一些未在上面显示的其他输入,因为现在您只是将<p>
包裹在<form>
内而没有相关输入。