Как проверять ответы на вопросы, если ответов несколько?

Доброго времени суток!

Имеется таблица следующей структуры:
id-----name----------id_question-----correct_answer
1-----Ответ 1----------55---------------0
2-----Ответ 2----------55---------------1
3-----Ответ 3----------55---------------1
4-----Ответ 4----------55---------------0
5-----Ответ 1----------56---------------0
6-----Ответ 2----------56---------------1
7-----Ответ 3----------56---------------1

Где id - инкремент, name - тест ответа, id_question - id вопроса, correct_answer - правильность ответа (0 - нет, 1 - да).

Вопросы и ответы сейчас выводятся следующим образом
<div class="block">
	<p>Тест вопроса №1</p>
	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 1</p>
	</div>

	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 2</p>
	</div>

	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 3</p>
	</div>

	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 4</p>
	</div>
</div>
<div class="block">
	<p>Тест вопроса №2</p>
	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 1</p>
	</div>

	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 2</p>
	</div>

	<div class="row_answers">
		<input type="checkbox" name="answer[]" value="id_question-id_answer">
		<p>Ответ 3</p>
	</div>
</div>


Затем, я хотел значение из value чекбокса, разбивать через explode и проверять в цикле.
Т.е. мне нужно проверить:
- сделать запрос в БД насчет количества правильных ответов на вопрос с id = 55. Куда-то записать.
- сделать запрос в БД насчет текущих ответов с id вопроса и с id ответа. Куда-то записать.
- если количество ответов на вопрос (id) равно количество правильных ответов (id), то ответ правильный. Куда-то записать.

Но. Проблема в том, что я не пойму, как мне правильно организовать цикл, так как у ответов с разным id, есть одинаковые id вопросов.

Может быть, я не так организовал структуру БД или вывода? Или может быть реализовать цикл реально?

Пожалуйста, помогите! Заранее спасибо!
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
Измените форму на
<input type="checkbox" name="answer[id_question][]" value="id_answer">

$bd = []; //запрос в бд для получения всех верных ответов
$a = 0;
foreach ($answer as $id_quest => $answers) {
  $is = false;
  foreach ($answers as $id_answer) {
    foreach ($bd as $bd_element) {
      if ($bd_element['id_question'] == $id_quest and $id_answer == $bd_element['id']) $is = true;
    }
  }
  if ($is) $a++;
}

Первый цикл получаем вопросы, затем ответы и проверяем их с БД. Если в базе хоть один ответ верный то прибавить 1 к правильным ответам. В итоге будет сумма правильных ответов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `id_question`,
  COUNT(*) AS `correct_answers_total`,
  SUM(`id` IN (1, 2, 6, 7)) AS `correct_answers_users`
  FROM `answers`
  WHERE `correct_answer` = 1
  GROUP BY `id_question`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы