1

以下に基本的な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

奇妙な理由で、ドロップダウンメニューからどのコースを選択しても、送信ボタンをクリックすると、ドロップダウンメニューの下に出力されるはずのエコーが常にコース番号とコース名を出力しますINFO102 - Computing。これは、他のオプションを選択したにもかかわらずINFO101 - Information Communication Technologyです。なぜこれが発生するのですか?

4

1 に答える 1

1

whileループでは、長い文字列に蓄積するのではなく、反復ごとに再初期化$outputcourseしています。したがって、ループでフェッチされた最後のアイテムのみが表示されます。

// 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ます。上に表示されていない他の入力が含まれていることを願っています。これは、関連する入力なしで a を a 内$assessmentformにラップしただけだからです。<p><form>

于 2012-11-25T02:46:08.590 に答える