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

Laravel+PHP+HTML实现MySQL数据存储失败求助

Laravel数据存入MySQL失败排查方案

问题描述

使用PHP、HTML及Laravel框架开发数据存储功能,点击保存按钮后页面正常跳转,但数据未成功存入MySQL数据库。

相关代码

路由代码

<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ServicePaieController;


route::get('/',[ServicePaieController::class, 'index']);

Route::match(['get', 'post'], '/search', [ServicePaieController::class, 'searchDataAbsence'])->name('searchDataAbsence');

Route::post('/', [ServicePaieController::class,'storeAbsence'])->name('storeAbsence');

Route::middleware([
    'auth:sanctum',
    config('jetstream.auth_session'),
    'verified',
])->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');
});

控制器storeAbsence函数

public function storeAbsence(Request $request) {

        $request->validate([
            'Matricule' => 'required',
            'Structure' => 'required',
            'NomPrenom' => 'required',
            'Abs_Periode' => 'required',
            'Abs_Mois' => 'required',
            'Abs_Exercice' => 'required',
            'Abs_jour_sp' => 'required',
            'Abs_Total_ap' => 'required',
            'Abs_Retenue_sp' => 'required',
            'Abs_jour_aes' => 'required',
            'Abs_Total_aes' => 'required',
            'Abs_Retenue_aes' => 'required',
            
        ]);

        Log::info('Your log message here');

        Absence::create([
            'Matricule' => $request->search,
            'Structure' => $request->nomStr,
            'NomPrenom' => $request->nomPer,
            'Abs_Periode' => $request->searchPeriode,
            'Abs_Mois' => "Décembre",
            'Abs_Exercice' => $request->searchExercice,
            'Abs_jour_sp' => $request->jour_sp,
            'Abs_Total_ap' => $request->total_sp,
            'Abs_Retenue_sp' => $request->retenue_sp,
            'Abs_jour_aes' => $request->jour_aes,
            'Abs_Total_aes' => $request->total_aes,
            'Abs_Retenue_aes' => $request->retenue_aes,
        ]);

        return redirect()->route('service_paie.service_paie_module')->with('success', "Absence data created successfully");
}

HTML表单代码

<form class="font_size" id="addAbsenceForm" action="{{ route('storeAbsence') }}" method="post">
 @csrf 
       <!-- your form fields go here -->
      <div class="div_design">
       <div class="btn_design" role="group" aria-label="Actions">
                                        
    <input id="addAbsenceButton" class="btn_designBtn btn btn-primary" type="submit" value="Enregistrer">
    </div>
      </div>
      </form>

排查与解决步骤

1. 修正验证规则与请求字段不匹配问题

控制器中验证规则使用的字段名(如Matricule、Structure)与实际从请求中获取的字段名(如search、nomStr)完全不一致,这会导致验证逻辑失效甚至静默失败。

  • 方案一:将验证规则改为实际表单提交的字段名:
$request->validate([
    'search' => 'required',
    'nomStr' => 'required',
    'nomPer' => 'required',
    'searchPeriode' => 'required',
    'searchExercice' => 'required',
    'jour_sp' => 'required',
    'total_sp' => 'required',
    'retenue_sp' => 'required',
    'jour_aes' => 'required',
    'total_aes' => 'required',
    'retenue_aes' => 'required',
]);
  • 方案二:统一表单输入框的name属性与验证规则的字段名,确保两者一致。

2. 检查Absence模型的批量赋值权限

Laravel的create()方法要求模型必须声明可批量赋值的字段,否则数据无法写入数据库。在Absence模型中添加$fillable属性:

protected $fillable = [
    'Matricule',
    'Structure',
    'NomPrenom',
    'Abs_Periode',
    'Abs_Mois',
    'Abs_Exercice',
    'Abs_jour_sp',
    'Abs_Total_ap',
    'Abs_Retenue_sp',
    'Abs_jour_aes',
    'Abs_Total_aes',
    'Abs_Retenue_aes',
];

3. 完善表单输入字段

当前HTML表单仅包含提交按钮,缺少实际的输入字段,导致请求中没有携带需要存储的数据。需要补充表单输入框,并确保每个输入框的name属性与控制器中$request->xxx的xxx一致:

<form class="font_size" id="addAbsenceForm" action="{{ route('storeAbsence') }}" method="post">
    @csrf 
    <div>
        <label>Matricule:</label>
        <input type="text" name="search" required>
        @error('search') <span class="text-danger">{{ $message }}</span> @enderror
    </div>
    <!-- 按相同逻辑补充nomStr、nomPer等其他字段 -->
    <div class="div_design">
        <div class="btn_design" role="group" aria-label="Actions">
            <input id="addAbsenceButton" class="btn_designBtn btn btn-primary" type="submit" value="Enregistrer">
        </div>
    </div>
</form>

4. 增加请求日志排查数据

修改控制器中的日志代码,记录完整的请求数据,便于排查是否有数据传入:

Log::info('Store absence request data:', $request->all());

之后查看storage/logs/laravel.log文件,确认请求中是否包含所需字段及对应值。

5. 验证重定向路由有效性

检查重定向使用的service_paie.service_paie_module路由是否在路由文件中正确定义,若路由不存在,会导致跳转异常。

6. 调整路由避免潜在冲突

根路径/同时绑定了GET请求的index方法和POST请求的storeAbsence方法,建议将存储路由改为更明确的路径,避免潜在冲突:

Route::post('/absence/store', [ServicePaieController::class,'storeAbsence'])->name('storeAbsence');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:49:51