1

Using this code how can you make it only echo out the radio or checkbox if you have a b c d answers or a b answers. On my quiz its going to be a b c d and a (true) b (false) answers. To finish my quiz this is the only thing stopping me from finishing it. My question might not be to the point but I tried to get it ask close to what I did done. Thanks for any help.

<?php
    //retreive questions from database and put into question box

    $query2 = "SELECT `QuestionId`, `Question`, `Opt1`, `Opt2`, `Opt3`, `Opt4`,`Answer` FROM `pf_questions`";

    $question2 = mysql_query($query2);

    while($row = mysql_fetch_array($question2)){

        $id         = $row['QuestionId'];
        $question   = $row['Question'];
        $opt1       = $row['Opt1'];
        $opt2       = $row['Opt2'];
        $opt3       = $row['Opt3'];
        $opt4       = $row['Opt4'];
        $answer     = $row["Answer"];




    ?>
    <div id="ContainerQuestion">
        <span class="Question">Question <?php echo $id; ?>. <?php echo $question; ?></span>

            <p><input type=radio name='q<?php echo $id; ?>' <?=( $answer  == 'a')?("checked='checked'"):(""); ?>  value="a"> <?php echo $opt1; ?> </p>
            <p><input type=radio name='q<?php echo $id; ?>' <?=( $answer  == 'b')?("checked='checked'"):(""); ?> value="b"> <?php echo $opt2; ?> </p>
            <p><input type=radio name='q<?php echo $id; ?>' <?=( $answer  == 'c')?("checked='checked'"):(""); ?> value="c"> <?php echo $opt3; ?> </p>

            <p><input type=radio name='q<?php echo $id; ?>' <?=( $answer  == 'd')?("checked='checked'"):(""); ?> value="d"> <?php echo $opt4; ?> </p>


    </div>
    <?php
    }

    ?>
4

2 に答える 2

0

私はあなたが何を求めているのか理解していると思います。各行を「if」句でラップします。例えば:

<?php if( isset ($opt3) ) { ?>

<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer  == 'c')?("checked='checked'"):(""); ?> value="c"> <?php echo $opt3; ?> </p>

<?php } 
      if( isset ($opt4) ) { ?>

<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer  == 'd')?("checked='checked'"):(""); ?> value="d"> <?php echo $opt4; ?> </p>

<?php } ?>

やや醜いハックですが、うまくいくはずで、あなたはその考えを理解します。

于 2012-10-12T22:19:27.957 に答える
0

whileおそらくループを次のようなものに置き換えます(テストされていません):

$answerFields = array('Opt1'=>'a', 'Opt2'=>'b', 'Opt3'=>'c', 'Opt4'=>'d');

while($row = mysql_fetch_array($question2)){
    $id         = $row['QuestionId'];
    $question   = $row['Question'];

    // Print Question
    printf('<div id="ContainerQuestion">');
    printf('<span class="Question">Question %s. %s</span>', $id, $question);

    // Print Answers
    foreach($answerFields as $field=>$ans)
    {
        if(array_key_exists($field, $row) && $row[$field])
        {
            $checked = ($row["Answer"] == $ans) ? 'checked' : '';
            printf('<p><input type="radio" name="%s" %s value="%s">%s</p>', 
                $id, $checked, $ans, $row[$field]);
        }
    }
}

データベースの回答フィールド (Opt1、Opt など) が設定されていない場合、または空の文字列の場合、<p>回答を含む は出力されません。

このソリューションを使用すると、3/4 の応答が入力され、1/4 が空の場合にアプリケーションを拡張できます。またprintf、インライン php と html の間を行き来する代わりにステートメントを使用することで、コードを少しクリーンアップします。

最後に、準備されたステートメントに関する重要なコメントを指摘する義務的なメモ。

于 2012-10-12T22:27:40.363 に答える