Я пытаюсь что-то здесь выяснить.
У меня есть несериализованный массив, содержащий вопросы с несколькими вариантами ответов, которые выводятся из базы данных в раскрывающемся списке.
Мне нужно это для циклического переборакогда человек отправляет ответы, страница оценки должна знать, сколько циклов нужно просчитать, чтобы выбрать правильные и неправильные ответы.
Моя проблема заключается в том, что он подсчитывает через тестовый вопрос еще один рази дает ложный результат в конце.Сказать «вы правильно ответили на 2 вопроса», когда был только один вопрос, например.
Вот массив, напечатанный из базы данных, который тестируемый видит перед отправкой ответа.
<form class="create-test" action="grade.php" method="POST">
<?php
$numberOfLoops = 1;
foreach ($testArray as $testArray['row']) {
//echo $testArray['row']['choice1'];
//}
//for ($i = 1; $i <= $quantity; $i++){
?>
<label for='test-question'><?php echo $testArray['row']['question']; ?></label>
<!-- Loop to go through the question array from the database, to be posted to the grading funciton -->
<select class = 'form-control' name="Question<?php echo $numberOfLoops; ?>">
<option value="Select an answer" disable selected hidden>Select an answer</option>
<option value="<?php echo $testArray['row']['choice1']; ?>"><?php echo $testArray['row']['choice1']; ?></option>
<option value="<?php echo $testArray['row']['choice2']; ?>"><?php echo $testArray['row']['choice2']; ?></option>
<option value="<?php echo $testArray['row']['choice3']; ?>"><?php echo $testArray['row']['choice3']; ?></option>
</select>
<input type="hidden" class='form-control' id='actanswer' name="actanswer<?php echo $numberOfLoops; ?>" value="<?php echo $testArray['row']['answer']; ?>">
<div class="line"></div>
<?php
$numberOfLoops++;
}
echo "<input type='hidden' name='numberOfLoops' value='".$numberOfLoops."'>";
?>
<input type='hidden' name='test-id' value="<?echo $testID; ?>">
<button type="submit" class="btn btn-primary btn-lg" name='submit-answers'>Submit Answers</button>
</form>
А вот цикл for, который ищет ответы.
$correct = 0;
$incorrect = 0;
$num = $_POST['numberOfLoops'];
echo $num;
for ($x = 1; $x <= $num; $x++) {
$response = $_POST['Question'.$x];
echo $response."<br>";
$answer = $_POST['actanswer'.$x];
echo $answer."<br>";
if($answer == $response){
$correct++;
}elseif($response !== $answer){
$incorrect++;
}
}
Он всегда будет считать один лишний, независимо от количества вопросов.
Вся помощь и отзывы приветствуются.
РЕДАКТИРОВАТЬ: В качестве дополнительной информации, есть эхо-тег, который скажет, что вы правильно x и y неправильно.Если тест состоит из двух вопросов, он скажет.«Вы правильно поняли 3 вопроса, а 0 - нет».Хотя есть только два вопроса.