3

送信後に正しい詳細を表示できません。私のページ構造が間違っていると思います現在起こっていることは、Module送信ボタンをクリックしても、正しくないものが何も表示されていないということです。

以下は、起こると思われることです:(ページは3つの部分で機能します)

パート1:モジュールのドロップダウンメニューが含まれています。ユーザーはドロップダウンメニューからオプションを選択して送信します。送信されるたびに、パート2が変更され、パート3は非表示になります。送信後、ドロップダウンメニューは[選択してください]オプションに戻ります。

パート2:[評価]ドロップダウンメニューが含まれ、ユーザーがパート1を送信した後にのみ表示されます。ユーザーが[評価]ドロップダウンメニューからオプションを選択して送信ボタンをクリックすると、ドロップダウンメニューが[選択してください]に戻り、パート3が表示されます。 。パート3は、パート2がさまざまなオプションで送信されるたびに変更されます。

パート3:パート2の詳細を表示します。パート2から選択および送信された評価に応じてのみ表示および変更されます。ユーザーがパート1から送信した場合、このパートは非表示になります。

今、私の試みはphpとphmtlを互いに分離することですが、私が言ったように、彼の問題は詳細が表示されていないことです。たくさんのコードがありますが、それは私のページがどのように構成されているかを示す必要があるためです。私の質問は、ページ構造を修正するために何をする必要があるかということです。

ここでアプリケーションで何が起こっているかを見ることができます:アプリケーション

以下は、表示されている順序で実行されるコードです:(可能な限り制限しようとしました):

PHP:

         <?php

// connect to the database

$moduleactive = 1;

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


//excute query

$sqlnum = $sqlstmt->num_rows();

$moduleHTML = "";
$moduleHTML .= '<select name="modules" id="modulesDrop">' . PHP_EOL;
$moduleHTML .= '<option value="">Please Select</option>' . PHP_EOL;

while ($sqlstmt->fetch()) {
    $moduleHTML .= sprintf('<option value="%1$s_%2$s_%3$s">%1$s - %2$s</option>' . PHP_EOL, $dbModuleNo, $dbModuleName, $dbModuleId);
}

$moduleHTML .= '</select>';

$pHTML = "";

//Module Submit (Part 1 Submitted)    
if (isset($_POST['moduleSubmit'])) {
    $sessionquery = " 
SELECT s.SessionId, SessionName, SessionDate, SessionTime, ModuleId, SessionActive, Complete 
FROM Session s 
INNER JOIN Session_Complete sc ON sc.SessionId = s.SessionId 
WHERE 
(ModuleId = ? AND SessionActive = ? AND Complete = ?) 
ORDER BY SessionName  
";

    $active   = 1;
    $complete = 1;

    //execute query 

    $sessionnum = $sessionqrystmt->num_rows();

    $sessionHTML = '';

    if ($sessionnum == 0) {
        $pHTML = "<span style='color: red'>Sorry, You have No Assessments under this Module</span>";
    }

    $sessionHTML = '<select name="session" id="sessionsDrop">' . PHP_EOL;
    $sessionHTML .= '<option value="">Please Select</option>' . PHP_EOL;

    while ($sessionqrystmt->fetch()) {
        $sessionHTML .= sprintf("<option value='%s'>%s - %s - %s</option>", $dbSessionId, $dbSessionName, date("d-m-Y", strtotime($dbSessionDate)), date("H:i", strtotime($dbSessionTime))) . PHP_EOL;
    }


    $sessionHTML .= '</select>';

}

//Session Submit (Part 2 Submitted)

if (isset($_POST['sessionSubmit'])) {
    $sessiondetailsquery = " 
    SELECT SessionId, SessionName 
    FROM Session 
    WHERE 
    (SessionId = ?) 
";

    //execute query

    $sessiondetailsqrystmt->bind_result($detailsSessionId, $detailsSessionName);

}

?> 

PHTML:

 <form action="<?php
    echo htmlentities($_SERVER['PHP_SELF']);
    ?>" method="post"> 
    <table> 
    <tr> 
    <th>Module: <?php
    echo $moduleHTML;
    ?></th> 
    </tr> 
    </table> 
    <p><input id="moduleSubmit" type="submit" value="Submit Module" name="moduleSubmit" /></p> 


      <?php
    if ($step == 2) {
        if (!$_POST['moduleSubmit']) {
            if ($_POST['modules'] == '') {
    ?>  
               <span style='color: red'>Please Select a Module</span>  
           <?php
            } elseif (!$sqlnum) {
    ?>  
               <span style='color: red'>Sorry, You have No Assessments under this Module</span>  
            <?php
            } else {
    ?>  
        <p><strong>Assessments:</strong> {$sessionHTML} </p>   
        <p><input id='sessionSubmit' type='submit' value='View Assessment Details' name='sessionSubmit' /></p>  
         <?php
            }
        }
    }
    ?> 

      <?php
    if ($step == 3) {
        if (!$_POST['sessionSubmit']) {
            if ($_POST['session'] == '') {
    ?>  
               <span style='color: red'>Please Select an Assessment</span>  
            <?php
            } else {
    ?>   

    <table> 
    <tr> 
    <td></td> 
    <td><input type='text' id='currentId' name='Idcurrent' readonly='readonly' value='$detailsSessionId' /></td> 
    </tr> 
    <tr> 
    <td><strong>Assessment:</strong></td> 
    <td>{$detailsSessionName}</td> 
    </tr> 
    </table> 
         <?php
            }
        }
    }
    ?> 

    </form> 

        </body> 
    </html>

アップデート:

Notice: Undefined index: modules in ...on line 66
Notice: Undefined offset: 1 in ... on line 68 
Notice: Undefined offset: 2 in ... on line 69
Notice: Undefined index: modules in ... on line 116

PHPフィドルが更新されました:http://phpfiddle.org/main/code/cbx-6mi

4

1 に答える 1

1

構造をどのようにしたいかは完全にはわかりませんが、私が理解できることから、これがあなたの質問に対する答えです。

構造が表示されているはずです。うまくいけば、それを使用できます=)

アイデアは、ユーザーが私たちに提供した情報の量に応じてセクションを表示することです。

また、ユーザーが戻って古いデータを変更できるようにします。

私はあなたの「コード」のいくつかをコメントアウトし、あなたが削除すべきいくつかのオプションを追加しました。しかし、これはあなたがあなたのコードを入力することを強制されることなくあなたに提案された構造を示すはずです。

<html>
<body>
<form action="" method="post"> 
    <table> 
        <tr> 
            <th>
                <?php
                    // connect to the database
                    //$sql = "SELECT ModuleId, ModuleNo, ModuleName FROM Module WHERE ModuleActive = ? ORDER BY ModuleNo";
                    //excute query
                    //$sqlnum = $sqlstmt->num_rows();
                ?>
                Module: 
                <select name="module" id="modulesDrop">
                    <option value="">Please Select</option>
                    <?php
                        /*
                        while ($sqlstmt->fetch()) {
                            echo sprintf('<option value="%1$s_%2$s_%3$s">%1$s - %2$s</option>' . PHP_EOL, $dbModuleNo, $dbModuleName, $dbModuleId);
                        }
                        */
                    ?>
                    <option value="test">test</option>
                </select>
            </th> 
        </tr> 
    </table> 
    <input id="moduleSubmit" type="submit" value="Submit Module" name="moduleSubmit" />
</form>
<?php
if(isset($_POST["module"]))
{
?>
<form action="" method="post"> 
    <input type="hidden" name="module" value="$_POST[module]">
    Assigments: 
    <?php
        $sessionquery = "SELECT s.SessionId, SessionName, SessionDate, SessionTime, ModuleId, SessionActive, Complete 
        FROM Session s 
        INNER JOIN Session_Complete sc ON sc.SessionId = s.SessionId 
        WHERE 
        (ModuleId = ? AND SessionActive = ? AND Complete = ?) 
        ORDER BY SessionName";

        //execute query 

        //$sessionnum = $sessionqrystmt->num_rows();

        if ($sessionnum == 0 && false) // "&& false" should ofcourse be removed
        {
        ?>
    <span style='color: red'>Sorry, You have No Assessments under this Module</span>
        <?php
        }
        else
        {
        ?>
    <select name="session" id="sessionsDrop">
        <option value="">Please Select</option>
        <?php
            /*
            while ($sessionqrystmt->fetch()) {
                $sessionHTML .= sprintf("<option value='%s'>%s - %s - %s</option>", $dbSessionId, $dbSessionName, date("d-m-Y", strtotime($dbSessionDate)), date("H:i", strtotime($dbSessionTime))) . PHP_EOL;
            }
            */
            echo "<option value='tst'>tst</option>";
        ?>
    </select>
    <br>
    <input type="submit" value="Submit Assigments">
</form>
<br>
<br>
    <?php
    if(isset($_POST["session"]))
    {
        ?>
            <table> 
                <tr> 
                    <td></td> 
                    <td><input type='text' id='currentId' name='Idcurrent' readonly='readonly' value='$detailsSessionId' /></td> 
                </tr> 
                <tr> 
                    <td><strong>Assessment:</strong></td> 
                    <td>{$detailsSessionName}</td> 
                </tr> 
            </table> 
        <?php
        }
    }
}
?>
</body>
</html>

一度に1つの「ステップ」のみを表示する場合は、「if」ではなく「else if」を使用します(もちろん、それより少し多く必要ですが、それからどのように行うかを理解する必要がありますか?)

于 2013-01-16T06:26:16.093 に答える