Laravel二进制MLM注册表单提交无报错但数据库未插入数据求助
问题排查及解决方案
核心问题原因
你遇到的无报错无数据写入的情况,是由多个前端和配置问题共同导致的,验证失败后跳回表单页但错误提示不全,所以看不到具体报错信息:
1. 前端表单字段配置错误
- 密码字段缺失name属性
你的Blade模板中密码输入框代码为:
<input type="password" id="password" placeholder="Password" class="form-control">
没有添加name="password"属性,导致表单提交时密码字段根本不会被发送到后端,直接触发password必填验证规则失败。
- 错误提示不全
表单中只配置了referrer_id、position、username三个字段的错误输出,缺少email、password的错误提示,哪怕这两个字段验证失败你也看不到任何提示。 - referrer_id字段可能不存在
你的逻辑中referrer_id是通过AJAX请求返回后插入到#ref容器中的隐藏字段,如果用户未触发推荐人输入框的keyup事件、或者AJAX返回的HTML没有正确渲染带name="referrer_id"的输入框,会导致这个必填字段缺失,触发验证失败。
2. 模型批量赋值配置错误
Laravel的create方法为批量赋值,必须在对应模型的$fillable属性中声明允许写入的字段,否则字段会被静默过滤,不会报错也不会写入数据库:
- 检查
User模型的$fillable,必须包含所有你写入的字段:
protected $fillable = [ 'email', 'password', 'referrer_id', 'position', 'username', 'join_date', 'posid' ];
- 检查
MemberExtra模型的$fillable,必须包含:
protected $fillable = [ 'user_id', 'left_paid', 'right_paid', 'left_free', 'right_free', 'left_bv', 'right_bv' ];
3. 临时排查方案
可以先开启调试模式快速定位问题:
- 打开项目根目录的
.env文件,将APP_DEBUG的值改为true,提交表单后就能看到完整的错误提示 - 在控制器
register方法第一行添加dd($request->all());,提交表单后就能看到所有提交到后端的字段,确认是否有缺失
修复建议
- 给密码输入框加上
name="password"属性 - 给邮箱字段下方加上对应的错误提示代码,和username字段的错误提示格式一致
- 确认推荐人AJAX返回的HTML中包含带
name="referrer_id"的隐藏输入框 - 补全两个模型的
$fillable配置
内容的提问来源于stack exchange,提问作者user16945874
相关产品推荐
相关产品推荐

