проверить ответ со случайными вопросами MC из базы данных

Я собирался отобразить несколько случайных вопросов, вызванных из моей базы данных, и проверить ответы с помощью кода:

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>

Как я могу изменить вышеуказанные коды, чтобы заставить всю систему работать?
Эти коды работают там, где нет случайных и вопросы следуют в порядке возрастания.

2

Решение

Самый простой способ решить вашу проблему — просто добавить идентификатор вопроса в атрибут значения каждого вопроса следующим образом:

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

Это даст вам уникальное значение ответа для каждого вопроса, которое вы можете использовать, чтобы получить идентификатор вопроса, а затем извлечь вопрос из базы данных.

Таким образом, если для одного из ваших ответов указано значение «b7», вы знаете, что пользователь ответил на вопрос 7 с помощью опции b.

Чтобы получить этот идентификатор из строки, такой как ‘b7’, вы можете использовать следующее:

$questionId = filter_var($fullAnswer, FILTER_SANITIZE_NUMBER_INT);

Поскольку теперь вы знаете, что это за вопрос, вы можете получить его из базы данных с помощью идентификатора и выполнить остальную обработку этого вопроса.

Таким образом, в вашем серверном скрипте вам придется изменить цикл так, чтобы он просто повторялся 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 о том, как его использовать, а затем измените все содержимое базы данных, чтобы использовать его в своем коде.

Удачи.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]