You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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;
?>

关键修改说明

  1. 正确获取POST值:用$questionId = $b["id"]存储题目ID,然后通过$_POST[$questionId]获取用户提交的答案,这样PHP能正确解析变量。
  2. 处理未答题:新增isset($_POST[$questionId])判断,避免未答题时的警告,同时单独统计未答题数量(你可以根据需求决定是否将未答题计入答错)。
  3. 增加分数计算:根据答对数量计算总分,这里假设每题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

火山引擎 最新活动