Laravel测验应用如何在对应问题后仅展示该题正确答案
问题解决方案
问题根因
你在每道题的遍历循环内嵌套遍历了所有正确答案和用户答案集合,没有将判断逻辑和当前正在渲染的题目做绑定,导致每道题下方都会输出所有题目的校验结果。同时你使用题目内容作为提交数组的索引,存在内容重复时索引冲突的隐患。
改造步骤
1. 优化索引规则(视图表单部分)
将提交的答案数组索引统一改为题目ID,保证唯一对应,替换原有使用题目内容作为索引的逻辑,同时修复label标签关联错误的问题:
<input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->a}}" id="radio_{{$answer->id}}_a" >(A) : <label class="form-check-label" for="radio_{{$answer->id}}_a">{{$answer->a}}</label><br> <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->b}}" id="radio_{{$answer->id}}_b" >(B) : <label class="form-check-label" for="radio_{{$answer->id}}_b">{{$answer->b}}</label><br> <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->c}}" id="radio_{{$answer->id}}_c" >(C) : <label class="form-check-label" for="radio_{{$answer->id}}_c">{{$answer->c}}</label><br> <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->d}}" id="radio_{{$answer->id}}_d" >(D) : <label class="form-check-label" for="radio_{{$answer->id}}_d">{{$answer->d}}</label><br> <input type="hidden" name="ans[{{$answer->id}}]" value="{{$answer->ans}}">
2. 替换结果校验逻辑(视图部分)
删除原来嵌套遍历所有答案的代码,直接通过当前题目的ID取出对应答案做判断,放在每道题的循环内即可:
@if(isset($answers)) @php $currentQid = $answer->id; // 取出当前题的用户选择和正确答案 $userChoose = $answers[$currentQid] ?? null; $correctAns = $ans[$currentQid] ?? null; @endphp @if($userChoose == $correctAns) <h6 style="color:green">回答正确</h6> @else <h6 style="color:red">正确答案:{{$correctAns}}</h6> @endif @endif
3. 可选优化项
- 控制器内的
$users变量实际存储的是题目数据,建议重命名为$questions提升代码可读性 - 表单提交方式改为
POST,避免答案参数暴露在URL中,对应修改路由定义为Route::post('/startQ',[QuestionController::class,'startQ']);
内容的提问来源于stack exchange,提问作者M Farhan Shaukat
相关产品推荐
相关产品推荐

