评分题标着必填,不打分直接点提交,照样进了下一题,后台这一列 27% 是空值。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

<input type="radio" name="q3" value="1" required>
// 后端再校验 array_key_exists('q3', $_POST)

评分组件由五个 radio 拼成,required 加在包裹的 div 上,浏览器根本不认这个属性。后端也没有做非空校验。这一点先确认清楚,后面就不用反复试。

碰到「必填项未校验」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

具体做法是,required 加到第一个 radio 上,或者提交前用脚本校验这一组;后端按题目 ID 遍历必填列表,缺一项就返回 422;把评分、多选、下拉三种题型各空着提交一次。

改完照着核一遍,不打分点提交时停在评分题并提示,后端接口返回 422 而不是写入空值。

作者 9823189