2014-10-01 71 views
2

我要展示一些从我的数据库称为随机问题,并使用代码检查答案随机多项选择题:检查答案从数据库

question.php:

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

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

如何更改上述代码以使整个系统正常工作? 这些代码适用于没有随机问题并且问题依次为升序的情况。

+1

将问题编号置于隐藏输入中。然后表单处理脚本可以查找正确的问题。 – Barmar 2014-10-01 06:35:37

回答

0

为您解决问题最简单的方法是简单地将问题的ID附加到每个问题的这样的价值属性:

echo '<input type="radio" name="a'.$x.'" value="a'.$row['id'].'" />' ,"A ".$row['a'] . '<br />'; 

这会给你的每一个问题的唯一答案值,你可以用来获取问题的ID,然后从数据库中提取问题。

因此,如果您的答案之一的值为'b7',您知道用户用选项b回答了问题7。

从字符串获取ID,如“B7”,你可以使用以下命令:

$questionId = filter_var($fullAnswer, FILTER_SANITIZE_NUMBER_INT); 

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

所以在你的服务器端脚本,你将不得不改变你的循环迭代20次(因为那是多少个问题已经提交)。这是你的这两个文件应该怎么照顾你做出所有必要的改变:

question.php:

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

<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文档,然后更改所有数据库内容以在代码中使用它。

祝你好运。

+1

你也可以使用[filter_var](http://php.net/filter_var):https://eval.in/200587 – 2014-10-01 07:41:48

+0

我已经改变了正则表达式。它更简单,然后我猜是正则表达式。感谢您的建议:) – 2014-10-01 07:46:42

+1

也许for循环是:for($ i = 0; $ i <= 19; $ i ++)? – 2014-10-01 09:30:39