首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用数据库中的随机mc问题检查答案

用数据库中的随机mc问题检查答案
EN

Stack Overflow用户
提问于 2014-10-01 14:32:45
回答 1查看 2.2K关注 0票数 2

我打算显示一些从我的数据库中调用的随机问题,并使用以下代码检查答案:

question.php:

代码语言:javascript
复制
<html>
<body>
<h3>Please answer all questions.</h3><br><br>
<form action="phpinfo.php" method="post">
<?php
//connect to db
$server = mysql_connect ('localhost', 'username', 'password');
mysql_select_db("mc", $server);
$question = mysql_query("SELECT * FROM `question` ORDER BY RAND() LIMIT 20;"); // 60 questions in my database
$x = 0;
while ($row = mysql_fetch_array($question))
{   
   echo "Question: ".$row['q_do'] . '<br />'; //q_do are my questions
   echo '<input type="radio" name="a'.$x.'" value=a />' ,"A ".$row['a'] . '<br />'; // answer a
   echo '<input type="radio" name="a'.$x.'" value=b />' ,"B ".$row['b'] . '<br />'; // answer b
   echo '<input type="radio" name="a'.$x.'" value=c />' ,"C ".$row['c'] . '<br />'; // answer c
   echo '<input type="radio" name="a'.$x.'" value=d />' ,"D ".$row['d'] . '<br />'; // answer d
   $x++;   
   };
mysql_close($server);
?>
<input type="submit" name="Submit" value="Submit" /> //go to next page
<br>
</form>
</body>
</html>

phpinfo.php:

代码语言:javascript
复制
<html>
<body>
<?php
//connect to db
$server = mysql_connect ('localhost', 'username', 'password');
mysql_select_db("mc", $server);
$question = mysql_query("SELECT * FROM `question` ;");
$x = 0;
$score = 0;
while ($row = mysql_fetch_array($question)) //do not know how to call the questions did in previous page since they are random
{
    echo $row['q_do'] . '<br />';

    $answered = $row[$_POST['a'.$x]] ; // the answers
    $correct = $row['corr_ans'] ; 

    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++;
}
echo 'You had a total of ' . $score . ' out of ' . $x . ' questions right!';
mysql_close($server);
?>
</body>
</html>

如何更改上述代码才能使整个系统正常工作?这些代码在没有随机且问题后面有升序的地方起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 15:13:18

解决问题的最简单方法是简单地将问题的id附加到每个问题的value属性中,如下所示:

代码语言:javascript
复制
   echo '<input type="radio" name="a'.$x.'" value="a'.$row['id'].'" />' ,"A ".$row['a'] . '<br />';

这将为每个问题提供一个唯一的回答值,您可以使用该值来获取问题的id,然后从数据库中提取问题。

因此,如果其中一个答案的值是'b7‘,那么您就知道用户用选项b回答了问题7。

要从类似'b7‘的字符串中获取该id,您可以使用以下命令:

代码语言:javascript
复制
$questionId = filter_var($fullAnswer, FILTER_SANITIZE_NUMBER_INT);

因为现在您知道问题是什么了,您可以使用id从数据库中获取它,并对该问题进行其余的处理。

因此,在您的服务器端脚本中,您必须将循环更改为简单地迭代20次(因为这是提交的问题数量)。这是在进行所有必需的更改后,这两个文件应该是什么样子:

question.php:

代码语言:javascript
复制
<html>
<body>
<h3>Please answer all questions.</h3><br><br>
<form action="phpinfo.php" method="post">
<?php
//connect to db
$server = mysql_connect ('localhost', 'username', 'password');
mysql_select_db("mc", $server);
$question = mysql_query("SELECT * FROM `question` ORDER BY RAND() LIMIT 20;"); // 60 questions in my database
$x = 0;
while ($row = mysql_fetch_array($question))
{   
   echo "Question: ".$row['q_do'] . '<br />'; //q_do are my questions
   echo '<input type="radio" name="a'.$x.'" value="a'.$row['id'].'" />' ,"A ".$row['a'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value="b'.$row['id'].'" />' ,"B ".$row['b'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value="c'.$row['id'].'" />' ,"C ".$row['c'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value="d'.$row['id'].'" />' ,"D ".$row['d'] . '<br />';
   $x++;   
   };
mysql_close($server);
?>
<input type="submit" name="Submit" value="Submit" /> //go to next page
<br>
</form>
</body>
</html>

phpinfo.php:

代码语言:javascript
复制
<html>
<body>
<?php
//connect to db
$server = mysql_connect ('localhost', 'username', 'password');
mysql_select_db("mc", $server);
$x = 0;
$score = 0;

// Make 20 iterations to process the 20 answers
for ($i=0; $i<=19; $i++)
{
    $fullAnswer = $row[$_POST['a'.$x]] ;

    // Find the question id
    $questionId = filter_var($fullAnswer, FILTER_SANITIZE_NUMBER_INT);

    // Find the answer
    $answer = substr($fullAnswer, 0, 1);

    // get the question for the answer of current iteration
    $result = mysql_query("SELECT * FROM `question` WHERE id=$questionId LIMIT 1;");
    $question = mysql_fetch_assoc($result);

    echo $question['q_do'] . '<br />';

    $correct = $question['corr_ans'] ; 

    if ($answer == $correct ) {
        $score++;
        $acolor = 'green' ;
    }
    else {
    $acolor = 'red' ;
    }
    echo 'you answered <font color=' . $acolor . '>' . $answer . '<font color=black> <br />';
    echo 'the correct answer was ' . $correct . '<br />' ;
    echo '-------------------------------------- <br />' ;
    $x++;
}
echo 'You had a total of ' . $score . ' out of ' . $x . ' questions right!';
mysql_close($server);
?>
</body>
</html>

简单:)

这应该可以工作,但我没有测试。

只想让您知道,使用mysql_query不是一个好主意。它是折旧的。您应该改用PDO。在PHP文档中查找如何使用它,然后更改所有数据库内容以在代码中使用它。

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26135407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档