0

以下のコードでは、dbからすべてのモジュールを取得し、ドロップダウンメニューにオプションとしてリストするクエリがあります。ここで、ユーザーがドロップダウンメニューからモジュールを選択して送信すると想定されます。送信後、ユーザーが選択したモジュールの下に表示されます。

問題は、ユーザーがドロップダウンメニューからどのモジュールを選択したかに関係なく、ユーザーがモジュールを選択したことを常に示していることAdvanced Web programmingです。私の質問は、なぜそれが常にこれを述べており、代わりに選択された正しいモジュールを表示しないのですか?

以下は、VIEWSOURCEコードです。

<form action="" method="post">Module:
  <select name="module" id="modulesDrop">
    <option value="">Please Select</option>
    <option selected='selected' value='CHI2513_Systems Strategy_1'>CHI2513 - Systems Strategy</option>
    <option value='CHI2565_Ecommerce, Business and Technology_3'>CHI2565 - Ecommerce, Business and Technology</option>
    <option value='CHT2220_Interactive Systems_4'>CHT2220 - Interactive Systems</option>
    <option value='CHT2520_Advanced Web Programming_5'>CHT2520 - Advanced Web Programming</option>
  </select>
  <input id="moduleSubmit" type="submit" value="Submit Module" name="moduleSubmit" />
</form>
<form action="" method="post">
  <p> <strong>Selected Module:</strong>CHT2520 - Advanced Web Programming
    <input type='text' value='CHI2513_Systems Strategy_1' />
  </p>
  Asessments: <span class='red'>Sorry, You have No Assessments under this Module</span>

以下は書かれたコードです:

$moduleactive = 1;
            $sql = "SELECT ModuleId, ModuleNo, ModuleName FROM Module WHERE ModuleActive = ? ORDER BY ModuleNo"; 

            $sqlstmt=$mysqli->prepare($sql);
            $sqlstmt->bind_param("i", $moduleactive);
            $sqlstmt->execute(); 
            $sqlstmt->bind_result($dbModuleId,$dbModuleNo,$dbModuleName);
            $sqlstmt->store_result();
            $sqlnum = $sqlstmt->num_rows();
            ?>
            Module: 
            <select name="module" id="modulesDrop">
                <option value="">Please Select</option>
                <?php
                while($sqlstmt->fetch()) { 
                    $ov = $dbModuleNo . "_" . $dbModuleName . "_" . $dbModuleId; 
                    if($ov == $_POST["module"]) 
                        echo "<option selected='selected' value='$ov'>$dbModuleNo - $dbModuleName</option>" . PHP_EOL; 
                    else 
                        echo "<option value='$ov'>$dbModuleNo - $dbModuleName</option>" . PHP_EOL;
                 } 
                ?>
            </select>
            <input id="moduleSubmit" type="submit" value="Submit Module" name="moduleSubmit" />
        </form>
        <?php
        if(isset($_POST['moduleSubmit'])) 
{


if($_POST["module"] != "") { ?>
        <form action="" method="post"> 
            <p>
            <strong>Selected Module:</strong><?php echo $dbModuleNo .' - '. $dbModuleName;?> <input type='text' value='<?php echo $_POST["module"];?>'>
            </p>
            <?php } ?>
4

1 に答える 1

0

私は自分のPHPに少し錆びていますが、それはモジュールAdvanced Web Programmingがリストの最後にあるためだと思います。変数$dbModuleNo$dbModuleNameは、DBから行をフェッチするwhileループを実行するたびに更新されるため、選択したモジュールを表示するときまでに、これらの変数には、選択したデータではなく、最後にフェッチしたデータが含まれます。

次のようなものを試してください(既存のコードに数行追加しました):

<?php
$selectedText = "None";
while($sqlstmt->fetch()) { 
    $ov = $dbModuleNo . "_" . $dbModuleName . "_" . $dbModuleId; 
    if($ov == $_POST["module"]) 
        echo "<option selected='selected' value='$ov'>$dbModuleNo - $dbModuleName</option>" . PHP_EOL;
        $selectedText = $dbModuleNo .' - '. $dbModuleName;
    else 
        echo "<option value='$ov'>$dbModuleNo - $dbModuleName</option>" . PHP_EOL;
} 
?>

そして後で...

<strong>Selected Module:</strong><?php echo $selectedText;?>
于 2013-01-17T14:56:12.533 に答える