Я создаю приложение для викторины. Я хочу получить, чтобы получать вопросы в случайном порядке, что нормально работает. Но проблема с ответом. Я пытался получить идентификатор каждого вопроса и прикрепить его к каждому вопросу. Суть этого в том, чтобы получить правильный ответ по ID вопроса. Но вместо всех отвеченных вопросов я получаю только одно значение. Я добавил скрытый тип ввода, который сохраняет идентификатор вопроса, чтобы использовать его для получения правильного ответа на каждый вопрос.
Это запрос на получение вопроса
<form method = "POST" role = "form" id = "form" action = "result.php">
<?php
// fetch out questions and answers from the database
$qryquestions = "SELECT * FROM questions WHERE `course_title`='".$course_title."' ORDER BY RAND() LIMIT 10";
$qryquestionscheck=$conn->query($qryquestions);
foreach ($qryquestionscheck as $row){
$question_id = $row['id'];
$questions = $row['questions'];
$optionA = $row['option_A'];
$optionB = $row['option_B'];
$optionC= $row['option_C'];
$optionD = $row['option_D'];
$_SESSION['course_title'] = $course_title;
?>
<div class = "form-group">
<label style = "font-weight: normal; text-align: justify;"><b><?php echo "Question" . " " . $counter++; ?></b> <?php echo $questions; ?></label><br>
<div id = "quiz-options">
<label style = "font-weight: normal; cursor: pointer;">
<input type = "checkbox" name = "option[]" value = "A"> <?php echo $optionA; ?>
</label><br>
<label style = "font-weight: normal; cursor: pointer;">
<input type = "checkbox" name = "option[]" value = "B"> <?php echo $optionB; ?>
</label><br>
<label style = "font-weight: normal; cursor: pointer;">
<input type = "checkbox" name = "option[]" value = "C"> <?php echo $optionC; ?>
</label><br>
<label style = "font-weight: normal; cursor: pointer;">
<input type = "checkbox" name = "option[]" value = "D"> <?php echo $optionD; ?>
</label><br>
<input type = "hidden" name = "question_id[]" value = "<?php echo $question_id; ?>">
</div>
<hr>
</div><br>
<?php } ?>
<input class = "btn btn-primary pull-right" name = "submit" type = "submit" value = "Submit">
</form>
И здесь я получаю правильные ответы с каждым идентификатором вопроса.
//check and compare anwsers
if (isset($_POST['submit'])){
$option_array = $_POST['option'];
$each_question_id = $_POST["question_id"];
echo json_encode($each_question_id).'<br/>';
// convert question id to string
$each_question_id_string = implode(",", $each_question_id);
echo $each_question_id_string . '<br>';
if (empty($option_array) == false){
//select answer with the question ID
$query = "SELECT answer FROM answers WHERE `question_id`='".$each_question_id_string."'";
$checkquery = $conn->query($query);
$correct_option = array();
while ($answerrows = $checkquery->fetch_assoc()){
$correct_option[] = $answerrows['answer'];
}
$correct_string = implode(",", $correct_option);
echo $correct_string. '<br>';
$correct_array = explode(",", $correct_string);
echo json_encode($correct_array).'<br/>';
echo $each_question_id_string.'<br/>';
exit();
$result= array_intersect_assoc($correct_array,$option_array);
$resultcount = count($result);
$noOfQuestions = "10";
$wrongAnswers = $noOfQuestions - $resultcount;
$date_taken = date('Y-m-d:h:i:s');
// performance
if ($resultcount >= "7"){
$performance = "Excellent";
} else if ($resultcount >= "5") {
$performance = "Good";
} else if ($resultcount <= "4") {
$performance = "Poor";
}
$insertresult = "INSERT INTO result (`username`, `fullname`, `result`, `matricNo`, `date_taken`, `course_title`) VALUES ('$username', '$fullname', '$resultcount', '$matricNo', '$date_taken', '$course_title')";
$checkinsert = $conn->query($insertresult);
if (!$checkinsert){
die ('Error inserting has occurred');
}
} else {
?><script type = "text/javascript">
alert('You need to attempt at least one question');
window.location = "select_course.php";
</script><?php
}
/*?><script type = "text/javascript">
else {
console.info('Cancel');
}</script><?php*/
} else {
echo "<p style='text-align: center; font-size: 18px;'>Your Quiz session has expired... Click <a href='user_dashboard.php'>here</a> to go to your dashboard and re-take the exam if needed</p>";
}
Теперь проблема в том, что запрашивается только один ответ.. Пожалуйста, помогите мне
Пожалуйста, помогите мне больше в этом. Что мне нужно сделать?
Это ссылка, по которой я перешел, потому что я испытываю то же самое, что описано в вопросе здесь stackoverflow.com/questions/31914891/…
Кто-нибудь должен помочь мне, пожалуйста
вы используете где, идентификатор совпадает - есть только одна строка ...
Хорошо, но я хочу, чтобы это было общее количество полученных вопросов. Таким образом, он должен получить 10 ответов, а не 1. Я добавил LIMIT 10, но не работает. Я получаю значение последней строки в базе данных
добавление лимита ничего не изменит, "SELECT answer FROM questions WHERE id='".$each_question_id_string."'"; -> ваш код получает только один ответ, потому что вы используете поле идентификатора - ответы и вопросы должны быть отдельными таблицами, которые используют внешние ключи
Позвольте нам продолжить обсуждение в чате.
Я пробовал помещать вопросы в массив с ID. Пожалуйста, мне нужно больше предложений
Вам нужны две таблицы: одна - с ответами, а другая - с вопросами с внешним ключом на question.id = answer.question_id.
Да, я сделал это именно так
тогда sql должен выглядеть как select * from answers where question_id = :questionId, тогда вы можете использовать rand(), random_int(), array_rand(), чтобы получить что-то случайное
Можем ли мы перейти в чат? Я сделал, но все еще не работаю. Вопрос, который у меня есть в массиве, поэтому я использую implode, чтобы сделать его строковым. Позвольте мне обновить свой вопрос






Задача решена. Я попытался получить вопросы и ответы случайным образом, и нет необходимости снова использовать второй запрос
вы ищете поле идентификатора, используя строку ..? также вы открыты для SQL-инъекций и должны решить эту проблему как можно скорее