PHP测试系统对错统计及分数计算问题求助(附代码)
修复测试系统的答题统计问题
嘿,我看到你的测试系统在提交答案后没法正确统计对错和分数,核心问题出在result.php里的POST变量调用逻辑上,还有一些细节没处理到位。咱们一步步来修复:
问题分析
- 错误的$_POST变量解析:你写的
$_POST['$b["id"]']是无效的——单引号包裹的字符串里,PHP不会解析变量,所以这个写法永远拿不到用户提交的答案值。 - 未处理未答题场景:如果用户没选某道题,直接访问
$_POST[$b["id"]]会触发Undefined index警告,同时错误地将未答题计入答错数量。
修正后的result.php代码
<?php $corrects = 0; $wrongs = 0; $unanswered = 0; // 新增:统计未答题数量 include 'ayar.php'; $v = $db->prepare("select * from riyaziyyat where id IN(1,2,3) limit 100"); $v->execute(array()); $x = $v->fetchALL(PDO::FETCH_ASSOC); foreach ($x as $key => $b) { $questionId = $b["id"]; // 把题目ID存到变量,让代码更清晰 // 先判断用户是否提交了这道题的答案 if (isset($_POST[$questionId])) { $userAnswer = $_POST[$questionId]; if ($userAnswer == $b["correct"]) { $corrects++; } else { $wrongs++; } } else { $unanswered++; // 用户没选这道题,计入未答题 } } // 计算分数(假设每题10分,可根据需求调整) $score = $corrects * 10; echo "你的答对数量 ---> " . $corrects; echo "<br>"; echo "你的答错数量 ---> " . $wrongs; echo "<br>"; echo "未答题目数量 ---> " . $unanswered; echo "<br>"; echo "你的得分 ---> " . $score; ?>
关键修改说明
- 正确获取POST值:用
$questionId = $b["id"]存储题目ID,然后通过$_POST[$questionId]获取用户提交的答案,这样PHP能正确解析变量。 - 处理未答题:新增
isset($_POST[$questionId])判断,避免未答题时的警告,同时单独统计未答题数量(你可以根据需求决定是否将未答题计入答错)。 - 增加分数计算:根据答对数量计算总分,这里假设每题10分,你可以根据实际需求调整分值。
另外,建议在表单里给每个题目加上题目内容和选项文本的展示,这样用户答题时能看到完整题目,比如修改表单代码:
<form action="result.php" method="post"> <?php include 'ayar.php'; $v=$db->prepare("select * from riyaziyyat where id IN(1,2,3)"); $v->execute(array()); $x=$v->fetchALL(PDO::FETCH_ASSOC); foreach ($x as $key => $b) { ?> <div class="cavablardivi"> <h4>题目<?php echo $b["id"]; ?>:<?php echo $b["question"]; ?></h4> <input type="radio" name="<?php echo $b["id"];?>" value="A"><span class="radioherf">A. <?php echo $b["A"]; ?></span><br> <input type="radio" name="<?php echo $b["id"];?>" value="B"><span class="radioherf">B. <?php echo $b["B"]; ?></span><br> <input type="radio" name="<?php echo $b["id"];?>" value="C"><span class="radioherf">C. <?php echo $b["C"]; ?></span><br> <input type="radio" name="<?php echo $b["id"];?>" value="D"><span class="radioherf">D. <?php echo $b["D"]; ?></span><br> <input type="radio" name="<?php echo $b["id"];?>" value="E"><span class="radioherf">E. <?php echo $b["E"]; ?></span><br> </div> <?php } ?> <input type="submit" name="send" value="finish"> </form>
这样用户体验会更好,也能确保答题逻辑的完整性。
内容的提问来源于stack exchange,提问作者Nurlan




