PHP测验收音机和复选框计算

PHP测验收音机和复选框计算,php,html,loops,if-statement,post,Php,Html,Loops,If Statement,Post,我正在用PHP设计一个简单的测验,在继续之前,我想知道我是否以正确的方式进行测试 测验将有大约25个问题,包括单选按钮和复选框。这样做的目的是计算总数,并在提交测验时将其显示给用户 到目前为止,我只有四个问题。问题1-3是单选按钮,最多选择一个。问题4是复选框,最多允许两个选择,每个正确的选择值为0.5 下面是我的html代码片段(已删除问答文本) HTML // q1 answer is value 2 <input type="radio" name="form[1-1]" value

我正在用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">

我不想使用JS/Jquery,我想使用PHP方法。

这是一个更动态的版本,也适合从数据库加载

解决方案数组具有问题和答案列表,如果是多答案问题,则答案是正确值的数组

循环遍历解决方案并将答案与预期解决方案进行比较。如果答案不存在,
??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);
    }
}

我在答案的底部添加了一些替代代码。通常情况下,添加一个新问题可能会更好,尤其是因为这个问题已经超过一个月了。谢谢,在您回答这个问题时,我刚刚发布了一个问题!请看这里再次感谢您的更新。这只会对您有所帮助,因为最初回答的人可能不在,可以给您一个更快(有时)更好的答案。
$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);
    }
}