【问题标题】:How can I see if the user's choice in the quiz is correct?如何查看用户在测验中的选择是否正确?
【发布时间】:2013-01-05 21:49:06
【问题描述】:

我正在尝试检查用户选择的答案是否正确,但它不能正常工作:

                        <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;
    }
}

由于某种原因,它没有正确发布结果,我认为代码有问题,希望得到帮助。

【问题讨论】:

  • 您尝试过任何基本调试吗?例如var_dump($_POST)?您似乎正在将字段名称构建为a1、a2 等...但正在您的 php 代码中寻找ans1、ans2 等...。
  • 你能打印出一些中间结果吗?例如,$row['correct'] 是什么 - 是您所期望的吗?
  • 我认为 Marc 的想法与 a. 和 ans. 之间的区别
  • 我通过结果检查将 PHP 部分中的 ans 更改为 a,$_row['correct'] 基本上是一个整数,它告诉哪个答案是正确的。
  • $result 是否从未被初始化有关系吗?我不知道它是否在代码之外,但在这里我只看到结果增加并显示,最初没有设置任何值。

标签: php mysql post phpmyadmin mysql-num-rows


【解决方案1】:

这是另一个帮助您的尝试。

我实际上写了一个“完整的解决方案”,并在此过程中发现了您的代码中的一些小错误 - 以及一些我无法理解的东西。

主要错误:您所有的单选按钮都具有相同的值 ($x),因此无论您为问题 1 按什么按钮,答案都是“1”,等等。您还做了其他一些我无法做到的事情弄清楚 - 所以我所做的是创建一个简单的流程 - 一个页面提出问题,另一个页面评估结果。

问题页面(我混淆了我的数据库的访问参数 - 不,我不使用“密码”作为我的密码!):

<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>

和评估.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>

这产生了(对于我所做的一个简单的三个问题的多项选择)预期的结果。让我知道它是否适合您!

【讨论】:

  • 即使我选择正确的答案它告诉'0',也许它与MySQL有关:结构是:id question_id question type correct answer1 answer2 answer3 answer4 ID是AI和answer1,answer2等'... 的值是一个整数 (1,2,3,4),它指定了他选择的答案。答案文本位于 answer1、answer2、answer3、answer4 字段中。
  • 好吧,终于修好了!只需添加 $_POST['a'.$x] 值,然后进行比较,得到正确答案
  • 好的 - 很高兴你成功了。在我的迷你数据库中,正确答案(文本,而不是索引)位于“答案”列中...如果此解决方案有效,您可能会考虑“接受”它...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多