You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PHP实现无数据库测验评分系统:积分累加问题求助

解决PHP测验系统积分累加问题

你遇到的问题根源是函数内部的$p是局部变量——每次调用resposta函数时,都会新建一个独立的$p,函数执行完毕后这个变量就会被销毁,根本没法累计所有题目的得分。下面给你两种可行的解决方案:

方案一:用引用传递累计积分

把总分变量通过引用传给函数,这样函数里的修改会直接作用到外部的变量上,实现累加:

function resposta($alternativa, $resposta, &$pontuacao){
    // a $alternativa (name) é oq a pessoa selecionar no radio. A $resposta é informada no value do radio
    // a função exibirá uma msg em verde caso o name corresponda ao value da resposta correta (definir no isset($_POST)
    if($alternativa == $resposta){
        $pontuacao += 10; // 直接修改外部传入的总分变量
        return "<div style='background-color:green;'>Parabéns, você ganhou 10 pontos!!! <br> alternativa correta: ".$resposta."</div>";
    }else{
        return "<div style='background-color:red;'>Você marcou a alternativa incorreta e não marcou pontos. <br> alternativa marcada: ".$alternativa."</div> <br> <div style='background-color:green;'> alternativa correta: ".$resposta."</div>";
    }
}

使用示例:

// 初始化总分为0
$totalPontos = 0;

// 处理每一道题(假设表单提交的题号是questao1、questao2...)
if(isset($_POST['questao1'])){
    echo resposta($_POST['questao1'], 'resposta_correta_1', $totalPontos);
}
if(isset($_POST['questao2'])){
    echo resposta($_POST['questao2'], 'resposta_correta_2', $totalPontos);
}

// 最后展示总分
echo "<h3>Total de pontos: ".$totalPontos."</h3>";

方案二:让函数返回得分,外部累加

更符合函数单一职责的写法:函数只负责判断对错、输出提示,并返回本次题目的得分(答对10分,答错0分),然后在外部把得分加到总分里:

function verificarResposta($alternativa, $resposta){
    if($alternativa == $resposta){
        echo "<div style='background-color:green;'>Parabéns, você ganhou 10 pontos!!! <br> alternativa correta: ".$resposta."</div>";
        return 10;
    }else{
        echo "<div style='background-color:red;'>Você marcou a alternativa incorreta e não marcou pontos. <br> alternativa marcada: ".$alternativa."</div> <br> <div style='background-color:green;'> alternativa correta: ".$resposta."</div>";
        return 0;
    }
}

使用示例:

$totalPontos = 0;

if(isset($_POST['questao1'])){
    $totalPontos += verificarResposta($_POST['questao1'], 'resposta_correta_1');
}
if(isset($_POST['questao2'])){
    $totalPontos += verificarResposta($_POST['questao2'], 'resposta_correta_2');
}

echo "<h3>Total de pontos: ".$totalPontos."</h3>";

这两种方法都能解决你的积分累加问题,方案二更清晰,推荐使用。

内容的提问来源于stack exchange,提问作者Beea 314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:54:58