0

ユーザーが選択した答えが正しいかどうかを確認しようとしていますが、正しく機能しません。

                        <form method="post">
                        <?php
                            $question = mysql_query("SELECT * FROM `questions`");
                            $stat = mysql_fetch_assoc($question);
                            $num = mysql_num_rows($question);
                            $questionid = 0;
                            for($i=0;$i<=$num;$i++)
                            {
                                $question = mysql_query("SELECT * FROM `questions` WHERE `id`='$i'");
                                $stat = mysql_fetch_assoc($question);
                                //if($stat['answer'] == null
                                echo $stat['question'] . '<br />';
                                echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer1']."<br />";
                                echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer2'] . '<br />';
                                echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer3'] . '<br />';
                                echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer4'] . '<br />';
                                $questionid++;
                                $x = $x+1;
                            }
                            echo $result;
                        ?>
                        <input type="submit" name="go" value="Go" />
                    </form>

その部分は基本的に:

$x = 1;
$question = mysql_query("SELECT * FROM `questions`");
$stat = mysql_fetch_assoc($question);
$num = mysql_num_rows($question);
if(isset($_POST['go']))
{
    for($i=0;$i<$num;$i++)
    {
        if ($_POST['ans'.$x] == $row['correct']) 
        { 
            $result = $result + 1; 
        }
        $x = $x + 1;
    }
}

何らかの理由で結果が適切に投稿されず、コードに問題があると思われます。助けていただければ幸いです。

4

1 に答える 1

0

これはあなたを助けるための別の試みです。

私は実際に「完全な解決策」を書きましたが、その過程であなたのコードに小さなバグがいくつか発見されました。さらに、理解できないことがいくつかありました。

主なバグ: あなたのラジオ ボタンはすべて同じ値 ($x) を持っているので、質問 1 でどのボタンを押しても答えは「1」などです。そこで私が代わりに行ったのは、質問をするページと結果を評価するページという単純なフローを作成することでした。

質問ページ (データベースのアクセス パラメータを難読化しました - いいえ、パスワードとして「password」は使用しません!):

<html>
<body>
<form action="./evaluate.php" method="post">
<?php
$server = mysql_connect ('localhost', 'username, 'password');
mysql_select_db("questionnaire", $server);

$question = mysql_query("SELECT * FROM `Questions`;");
$x = 0;
while ($row = mysql_fetch_assoc($question))
{
   echo $row['question'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=1 />' .$row['answer1'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=2 />' .$row['answer2'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=3 />' .$row['answer3'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=4 />' .$row['answer4'] . '<br />';
   $x = $x + 1;

}
mysql_close($server);
?>

<input type="submit" name="Submit" value="Submit" />
<br>
</form>
</body>
</html>

および evaluate.php: 編集: コードを少し変更して、出力を「よりクリーン」にし、赤/緑のタッチを追加して、正しく答えられた質問と間違って答えられた質問を示しました。明らかに、必要に応じて、これらのことをさらに進めることができます...

<html>
<body>

<?php
$server = mysql_connect ('localhost', 'username', 'password');
mysql_select_db("questionnaire", $server);

$question = mysql_query("SELECT * FROM `Questions`;");
$x = 0;
$score = 0;
while ($row = mysql_fetch_assoc($question))
{
    echo $row['question'] . '?<br />';

    $answered = $row['answer'.$_POST['a'.$x]] ;
    $correct = $row['correct'] ;

    if ($answered == $correct ) {
        $score++;
        $acolor = 'green' ;
    }
    else {
        $acolor = 'red' ;
    }

    echo 'you answered <font color=' . $acolor . '>' . $answered . '<font color=black> <br />';


    echo 'the correct answer was ' . $correct . '<br />' ;
    echo '-------------------------------------- <br />' ;

    $x = $x + 1;
}
echo 'You had a total of ' . $score . ' out of ' . $x . ' questions right!';
mysql_close($server);
?>

</body>
</html>

これにより、(私が行った単純な3つの質問の複数選択の場合)期待される結果が得られました. それがあなたのために働くかどうか教えてください!

于 2013-01-22T20:44:00.037 に答える