基于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
相关产品推荐
相关产品推荐

