PHP测验收音机和复选框计算
我正在用PHP设计一个简单的测验,在继续之前,我想知道我是否以正确的方式进行测试 测验将有大约25个问题,包括单选按钮和复选框。这样做的目的是计算总数,并在提交测验时将其显示给用户 到目前为止,我只有四个问题。问题1-3是单选按钮,最多选择一个。问题4是复选框,最多允许两个选择,每个正确的选择值为0.5 下面是我的html代码片段(已删除问答文本) HTMLPHP测验收音机和复选框计算,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
// 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);
}
}