2

I want some help with my code.

I try to update user data but it's not update anything.

User Name, Email, Posisson, Image.

Any help please.

My Route : I used URL because route didn't work.

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

My Controller:

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">

What I expect is that it updates my database.

Prafulla Kumar Sahu
  • 9,321
  • 11
  • 68
  • 105
Hima Hima
  • 123
  • 16

4 Answers4

2

As your form has

<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">

so your route must have put(),

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

also you can use @method('PUT') instead of <input type="hidden" name="_method" value="PUT"> and @csrf instead of {!! csrf_field() !!}

either change $useredit->name = $request->input('name'); to $useredit->name = $request->input('Name'); or in form

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

<input class="form-control" value="{{$editusers->name}}" name="name"> 
Prafulla Kumar Sahu
  • 9,321
  • 11
  • 68
  • 105
  • Give me an error The GET method is not supported for this route. Supported methods: PUT. – Hima Hima Apr 23 '19 at 10:32
  • @HimaHima also you need to specify form `method="POST"` check I have updated my answer. – Prafulla Kumar Sahu Apr 23 '19 at 10:33
  • Thank you, but it's don't update and don't give me any errors – Hima Hima Apr 23 '19 at 10:38
  • @HimaHima can you `var_dump ( $request->all() );` and check if you are getting correct data, and if yes go to `storage/log/laravel.log` and check what error is logged there – Prafulla Kumar Sahu Apr 23 '19 at 10:40
  • 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) "Update" } – Hima Hima Apr 23 '19 at 10:43
  • @HimaHima for now remove the code for valdiation and test if it is working fine? – Prafulla Kumar Sahu Apr 23 '19 at 10:45
  • I did, give me this error , SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: update `users` set `name` = , `email` = admin@gmail.com, `posission` = Web Designer, `users`.`updated_at` = 2019-04-23 10:45:40 where `id` = 1) – Hima Hima Apr 23 '19 at 10:46
0

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

it supposed to be PUT

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

Sethu
  • 1,299
  • 10
  • 13
0

The problem because you put wrong method at your route. Change it

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

Anyways, you should change your route to be standard. It should be:

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

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

Sok Chanty
  • 1,678
  • 2
  • 12
  • 22
0

i think you should use resources route to solve this:

Route::resource('editusers','UserController');
but first you need to run this command
php artisan make:controller UserController --resource
  • It should be noted that `Route::resource` can be partially used to avoid creating unnecessary routes by [partial resource routes](https://laravel.com/docs/8.x/controllers#restful-partial-resource-routes) – SEYED BABAK ASHRAFI Mar 22 '21 at 15:22