【问题标题】:Can't update user in laravellaravel 无法更新用户
【发布时间】:2019-09-12 12:06:47
【问题描述】:

我需要一些关于我的代码的帮助。

我尝试更新用户数据,但没有更新任何内容。

用户名、电子邮件、Posisson、图像。

请帮忙。

我的路线: 我使用 URL 因为路由不起作用。

Route::get('editusers/{id}','UsersController@update');

我的控制者:

public function edit($id)
{
    $editusers=User::findOrFail($id);
    return view('admin.users.EditUser', compact('editusers'));
}

public function update(Request $request, $id)
{
   $this->validate($request, [
        'name' => 'required',
        'email' => 'required',
        'posission' => 'required',
    ]);
    $useredit = User::find($id);
    $useredit->name = $request->input('name');
    $useredit->email = $request->input('email');
    $useredit->posission = $request->input('posission');
    if($request->hasFile('file'))
    {
        $file = $request->file('file');
        $filename = time().'.'.$file->getClientOriginalExtension();
        Image::make($file)->resize(150, 150)->save(public_path('/admin/images/'.$filename));
        $useredit->UserImg = $filename;
    }

    $useredit->save();
    return redirect()->back();
}

HTML:

<form class=""  action="{{url('editusers',Auth::user()->id)}}"  role="form" enctype="multipart/form-data">
     {!! csrf_field() !!}
     <input type="hidden" name="_method" value="PUT">

     <label>Edit Your Profile :</label>
     <div class="form-group">
         <label>Name :</label> 
         <input class="form-control" value="{{$editusers->name}}" name="Name">
     </div>

      <div class="form-group">
         <label>Email :</label>
         <input class="form-control" value="{{$editusers->email}}" name="email">
      </div>
      <div class="form-group">
          <label>Posisson :</label>
          <input class="form-control" value="{{$editusers->posission}}" name="posission">
      </div>
      <div class="form-group">
          <label>Image :</label>
          <img src="{{ asset('admin') }}/images/{{$editusers->UserImg}}" alt="avatar" class="img-circle" style="max-height: 100px;">
          <input type="file" id="file" name="file"/> 
      </div>
  <input class="btn btn-success btn-mini deleteRecord" type="submit"   name="submit" value="Update">

我期望它更新我的数据库。

【问题讨论】:

  • 到底发生了什么?你有什么错误吗?\
  • 不只是不更新​​
  • 您定义为get 并尝试使用put
  • 是的给我错误这条路线不支持 GET 方法。支持的方法:PUT。
  • 您是刚刚替换了路线还是创建了另一条路线?

标签: php laravel laravel-5 laravel-blade laravel-form


【解决方案1】:

正如你的表单所拥有的

<form class=""  action="{{url('editusers',Auth::user()->id)}}"  role="form" enctype="multipart/form-data" method="POST">
    {!! csrf_field() !!}
     <input type="hidden" name="_method" value="PUT">

所以你的路由必须有 put(),

so it should be Route::put('editusers/{id}','UsersController@update');

您也可以使用@method('PUT') 代替&lt;input type="hidden" name="_method" value="PUT"&gt;@csrf 代替{!! csrf_field() !!}

$useredit-&gt;name = $request-&gt;input('name'); 更改为$useredit-&gt;name = $request-&gt;input('Name'); 或在表单中

&lt;input class="form-control" value="{{$editusers-&gt;name}}" name="Name"&gt;

<input class="form-control" value="{{$editusers->name}}" name="name"> 

【讨论】:

  • 给我一个错误这条路线不支持 GET 方法。支持的方法:PUT。
  • @HimaHima 您还需要指定表单method="POST" 检查我已经更新了我的答案。
  • 谢谢,但它不更新也不给我任何错误
  • @HimaHima 你能var_dump ( $request-&gt;all() ); 并检查你是否得到正确的数据,如果是,请转到storage/log/laravel.log 并检查那里记录的错误
  • array(6) { ["_token"]=> string(40) "QX2lWpU2pt9SdIO7LtmK00UT47r5of5TGG0HaOmP" ["_method"]=> string(3) "PUT" ["Name"]=> string( 9) "admin new" ["email"]=> string(15) "admin@gmail.com" ["posission"]=> string(12) "Web Designer" ["submit"]=> string(6) “更新”}
【解决方案2】:

您的路线错误 Route::get('editusers/{id}','UsersController@update');

应该是PUT

Route::put('editusers/{id}','UsersController@update');

【讨论】:

  • Give me error 此路由不支持 GET 方法。支持的方法:PUT。
【解决方案3】:

问题是因为您在路线上使用了错误的方法。改变它

// From 
Route::get('editusers/{id}', 'UsersController@update')
// To
Route::put('editusers/{id}', 'UsersController@update')

无论如何,您应该将路线更改为标准路线。应该是:

//To show data you should use: 
Route::get('users/edit/{id}', 'UsersController@show');

//To update user data. 
Route::put('users/edit', 'UsersController@update');

【讨论】:

    【解决方案4】:

    我认为你应该使用资源路由来解决这个问题:

    Route::resource('editusers','UserController');
    but first you need to run this command
    php artisan make:controller UserController --resource
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2014-04-21
    相关资源
    最近更新 更多