【问题标题】:How to insert data to database with Laravel如何使用 Laravel 向数据库中插入数据
【发布时间】:2023-03-14 04:46:01
【问题描述】:

我正在尝试将我的数据从表单插入数据库。

我创建数据的网址是web.com/siswa/create

但是当我点击提交时系统显示错误MethodNotAllowedHttpException

我该如何解决?我的代码有什么问题吗?

这是我的表格:

<form action="{{ url('siswa') }}" method="POST">
      <div class="form-group">
         <label for="exampleInputEmail1">NISN</label>
          <input type="text" class="form-control" name="nisn" id="nisn" placeholder="NISN"></div>
         <div class="form-group">
         <label for="exampleInputEmail1">Nama Siswa</label>
         <input type="text" class="form-control" name="nama_siswa" id="nama_siswa" placeholder="Nama Siswa"> </div>
         <button type="submit" class="btn btn-success btn-sm font-weight-bold">Submit</button></form>

控制器:

public function tambah()
    {
      return view('siswa.create');
    }

    public function store(Request $request)
      {

        $siswa = new \App\Siswa;
        $siswa->nisn = $request->nisn;
        $siswa->nama_siswa = $request->nama_siswa;
        $siswa->tanggal_lahir = $request->tanggal_lahir;
        $siswa->jenis_kelamin = $request->jenis_kelamin;
        $siswa->save();
        return redirect('siswa');
      }

路线:

Route::get('/siswa/create', [
    'uses' => 'SiswaController@tambah',
    'as' => 'tambah_siswa'
]);

Route::get('/siswa', [
    'uses' => 'SiswaController@store',
    'as' => 'simpan_siswa'
]);

【问题讨论】:

  • 您只有get 路由,但您的表单正在尝试POST
  • 我改了,但现在系统显示错误419 Sorry, your session has expired. Please refresh and try again.

标签: php laravel laravel-5


【解决方案1】:

将您的 store 函数路由从 get 更改为 post

Route::post('/siswa', [
'uses' => 'SiswaController@store',
'as' => 'simpan_siswa'
]);

在表单中使用 Csrf 保护字段来处理会话超时错误

{{ csrf_field() }}

<input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" />

或者如果您使用的是表单生成器

{!! Form::token() !!}

【讨论】:

  • 我更改了它,但现在系统显示错误 419 抱歉,您的会话已过期。请刷新并重试。
  • 您需要刷新表单并重试,因为 csrf 保护不允许通过单击 f5 刷新表单本身
  • 是的,通过在表单中​​添加“{{ csrf_field() }}”来修复它。
【解决方案2】:

在路由中请使用post 而不是get

Route::post('/siswa','SiswaController@store');

并在表单中包含{{ csrf_field() }}

【讨论】:

    【解决方案3】:

    您在表单上使用method="POST",但在您的路线上您使用Route::get

    使用Route::post 作为您的路线

    【讨论】:

      【解决方案4】:

      在您的表单中,您提供了 POST 方法,但您的路由器没有任何 POST 处理程序。所以你所要做的就是,当你试图将数据从表单存储到数据库时,你必须发布数据,路由器应该处理它。

      试试这个

      Route::post('/siswa', [
      'uses' => 'SiswaController@store',
      'as' => 'simpan_siswa'
      ]);
      

      【讨论】:

        【解决方案5】:

        您在表单中使用 POST 方法并在路由中使用 GET。

        试试这个

        Route::post( '/siswa', [
            'uses' => 'SiswaController@store',
            'as'   => 'simpan_siswa'
        ] );
        

        【讨论】:

          猜你喜欢
          • 2018-08-06
          • 2016-03-19
          • 1970-01-01
          • 2023-03-27
          • 2016-08-16
          • 1970-01-01
          • 1970-01-01
          • 2014-04-11
          • 2020-03-31
          相关资源
          最近更新 更多