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

Laravel平台新增1-2词答案题型后题目记录无法存入数据库求助

Laravel题库功能提交异常排查

核心问题定位

1. 视图层表单字段重复提交冲突

当前所有题型对应的表单块都预渲染在同一个<form>标签内,哪怕通过jQuery把非选中题型的块设置为display:none,被隐藏的DOM输入元素依然会被浏览器收集并随表单一起提交。

  • 每个题型块内都重复定义了同名字段:question、a、b、c、d、answer,多块并存时,同名字段会出现值覆盖,最终提交到后端的参数可能被最后一个隐藏块的空值覆盖,直接触发控制器的必填校验失败,根本无法进入数据库写入流程。
  • 早期仅配置2类题型时,字段覆盖逻辑未触发必填校验失败的阈值;新增第3、第4个题型块后,多值叠加的覆盖结果直接导致所有题型的提交都校验不通过。

2. 数据库写入逻辑未做空值兼容

模型中AddClass方法直接读取请求参数,未做存在性判断:

// 原写入逻辑片段
'a' => $data->a,
'b' => $data->b,
'question_img' => $data->question_img,
'question_video_link' => $data->question_video_link,
  • 选中1-2词答案的题型时,表单中根本不存在a/b/c/d、question_img等字段,直接读取会触发Undefined array key运行时错误,即使侥幸通过校验层,写入流程也会直接中断。

3. 校验规则存在细节缺陷

控制器的校验规则中,question_img未设置nullable标识:

// 原校验规则
'question_img' => 'image',
  • 表单本身未设计题目图片上传的输入项,一旦请求中该字段传了空值、格式不匹配的值,就会触发校验失败。同时校验失败仅返回通用提示,未携带具体的错误信息,导致用户无法感知校验不通过的具体原因,直观感受就是“提交没反应、数据写不进去”。

针对性修复方案

1. 优化视图层提交逻辑,避免重复字段干扰

在题型切换的jQuery逻辑中,增加对非激活题型块的输入元素禁用操作——被disabled标记的表单元素不会被浏览器收集提交:

$(document).ready(function(){
    // 初始化:隐藏所有题型块
    $(".div_content").hide();
    // 初始化当前选中题型块的输入启用状态
    let initSelectVal = $("#select").val();
    if(initSelectVal) {
        $('#' + initSelectVal).show().find('input, textarea').prop('disabled', false);
    }

    // 监听题型切换事件
    $("#select").change(function(){
        // 先禁用所有块的输入框
        $('.div_content').find('input, textarea').prop('disabled', true);
        $('.div_content').hide();
        // 启用当前选中块的输入框
        let currentVal = $(this).val();
        $('#' + currentVal).show().find('input, textarea').prop('disabled', false);
    });
});

2. 模型层写入逻辑增加空值兜底

读取请求参数时,使用input()方法对不存在的参数设置默认空值,避免触发运行时错误:

public static function AddClass($data) {
    $row = DB::table('questions')->insert([
        'quiz_id' => $data->input('quiz_id'),
        'question_type_id'  => $data->input('question_type_id'),
        'question' =>  $data->input('question'),
        'a' =>  $data->input('a', null),
        'b' =>  $data->input('b', null),
        'c' =>  $data->input('c', null),
        'd' =>  $data->input('d', null),
        'answer'=> $data->input('answer'),
        'status'  => 1,
        'created_at'  => date('Y-m-d H:i:s'),
        'updated_at'  => date('Y-m-d H:i:s'),
        'question_img'=> $data->input('question_img', null),
        'question_video_link' => $data->input('question_video_link', null),
    ]);
    return $row;
}

3. 调整控制器校验规则

给question_img校验项增加nullable标识,无文件上传时不触发校验;同时将具体的校验错误信息通过会话带回视图,方便排查问题:

$rules = [
    'quiz_id' => 'required',
    'question_type_id' => 'required',
    'question' => 'required|string|max:255',
    'answer' => 'required',
    'question_img' => 'nullable|image',
];

$validator = Validator::make($request->all(),$rules);
if($validator->fails()){
    return back()->withErrors($validator)->with('warning','请完善必填字段后再提交');
}

内容的提问来源于stack exchange,提问作者Jilani Shaik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 07:15:07