Search code examples
laravellaravel-8laravel-9laravel-authenticationlaravel-authorization

Too few arguments to function App\Http\Controllers\Update::update(), 0 passed nd exactly 7 expected


I want to update datas in database in Laravel, but I get error. Here is my Route:

Route::post('/resetPOST', [App\Http\Controllers\Update::class, 'Update'])->name('id');

Here is my page:

<form method="POST" action="/resetPOST">
@csrf
<input type="hidden" name="id" value="{{ Auth::user()->id }}">
<input type="text" name="name" class="form-control" required value="{{ Auth::user()->name }}">  
<input type="text" name="surname" class="form-control" required value="{{ Auth::user()->surname }}">  
<input type="text" name="middlename" class="form-control" required value="{{ Auth::user()->middlename }}">  
<input type="email" name="email" class="form-control" autocomplete="off" required value="{{ Auth::user()->email }}">  
<input type="date" name="dateofbirth" class="form-control" required value="{{ Auth::user()->dateofbirth }}">  
<input type="text" name="idnumber" class="form-control" required value="{{ Auth::user()->idnumber }}">  
<button type="submit" class="btn btn-outline-primary" >Изменить</button>

</form>

Here is my App\Http\Controllers\Update code:

<?php

namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;

class Update extends Controller
{
    function update($id, $name, $surname, $middlename, $email, $datebirth, $idnumber){
        echo $id;
        // DB::table('users')-->where('id', '=', $id ->update(['name' => $name,'surname' => $surname,'middlename' => $middlename,'email' => $email,'datebirth' => $datebirth, 'idnumber' => $idnumber]));
    }
    
}

This is my error:

ArgumentCountError
Too few arguments to function App\Http\Controllers\Update::update(), 0 passed in D:\openserver\OpenServer\domains\localhost\laravel\right-univercity\vendor\laravel\framework\src\Illuminate\Routing\Controller.php on line 54 and exactly 7 expected

Solution

  • You definitely should not have id in your form. A user would be able to manipulate that and update anyones profile. id should just be taken from Auth::user()->id (within your update method) without ever appearing in your form.

    Try changing to this:

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Models\User;
    use Illuminate\Http\Request;
    
    class Update extends Controller
    {
        public function update(Request $request)
        {
            $name = $request->input('name');
            // do the same for everything else.. 
            // echo $name;
    
            DB::table('users')
                ->where('id', '=', Auth::user()->id)
                ->update([
                    'name' => $name
                ]);
    
            redirect()->back();
        }
    }