PHP Тест на радио и чекбокс - PullRequest
1 голос
/ 01 мая 2020

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

В тесте будет приблизительно 25 вопросов, набор радио-кнопок и флажки. Идея состоит в том, чтобы вычислить итоговое значение и показать его пользователю при отправке теста.

У меня пока только четыре вопроса. Вопросы 1 - 3 - это радио кнопки, один выбор макс. Вопрос 4 является флажком и допускает максимум два выбора, каждый правильный выбор стоит 0,5

Вот фрагмент моего кода html (текст вопроса и ответа удален).

HTML

// q1 answer is value 2
<input type="radio" name="form[1-1]" value="1">
<input type="radio" name="form[1-1]" value="2">
<input type="radio" name="form[1-1]" value="3">

// q2 answer is value 1
<input type="radio" name="form[1-2]" value="1">
<input type="radio" name="form[1-2]" value="2">
<input type="radio" name="form[1-2]" value="3">

// q1 answer is value 2
<input type="radio" name="form[1-3]" value="1">
<input type="radio" name="form[1-3]" value="2">
<input type="radio" name="form[1-3]" value="3">

// q4 answer is value 1 or 3. 0.5 points each
<input type="checkbox" name="form[1-4][]" value="1">
<input type="checkbox" name="form[1-4][]" value="2">
<input type="checkbox" name="form[1-4][]" value="3">
<input type="checkbox" name="form[1-4][]" value="4">

Код PHP ниже работает, это правильный подход или есть более эффективный способ? В частности с вопросом о флажке 4.

PHP

$total = array();

$total = '0';

$q1 = $_POST['form']['1-1'];
$q2 = $_POST['form']['1-2'];
$q3 = $_POST['form']['1-3'];
$q4 = $_POST['form']['1-4'];

// answer with value 2 is correct
if ($q1 == '2' ) {
    $total++;
};
// answer with value 1 is correct
if ($q2 == '1' ) {
    $total++;
};
// answer with value 2 is correct
if ($q3 == '2' ) {
    $total++;
};
// answer with value 1 is correct
if ($q4[0] == '1' ) {
    $total = $total + 0.5;
};
// answer with value 3 is correct
if ($q4[1] == '3' ) {
    $total = $total + 0.5;
};

// send $total to database here

Я не хочу использовать JS / Jquery, я хочу использовать PHP подход.

1 Ответ

1 голос
/ 01 мая 2020

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

Массив solutions содержит список вопросов и ответов, если это вопрос с несколькими ответами, то ответ представляет собой массив правильных значений.

l oop проходит через решения и сравнивает ответ с ожидаемым решением. Если ответа нет, ?? null устанавливает его, но он не должен совпадать с результатами.

$solutions = ['1-1' => 2, '1-2' => 1, '1-3' => 2, '1-4' => [1,3]];

foreach ( $solutions as $question => $solution ) {
    $userAnswer = $_POST['form'][$question] ?? null;
    if ( is_array($solution) ){
        $marksPerAnswer = 1/count($solution);
        $correct = array_intersect($solution, $userAnswer);
        $total += $marksPerAnswer * count($correct);
    }
    else    {
        $total += ($userAnswer == $solution);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...