anibabbar's avatar

404 error on form update

Once I submit form I receive 404 error. I couldn't figure out error !! Hope someone could help.

Controller :

public function update(Request $request, $id)
    {
        // return $request;

        $bank = Bankaccounts::find($id);

        // return $bank;
        $user = Auth::user()->id;

        if($bank->user_id !== $user) {
           return  redirect('bank');
         } else { 
        $bank->name = $request->name;
        $bank->account_no = $request->account_no;
        $bank->code = $request->code;
        $bank->credit_limit = $request->credit_limit;
        $bank->currency = $request->currency;
        $bank->user_id = $parent_id;
        $bank->emp_id = $user_id;

        $bank->save();

        $redirect = $_SERVER['HTTP_REFERER'];
   
        return redirect($redirect);
         }
    }

View :

@extends('layouts.dashboard')
@section('title', 'Update Bank')

@section('content')
<form action="/bank/{{$bank->id}}" method="POST">
@csrf
@method('put')
<div class="col-md-6">
<div class="card">
    <div class="card-header">
        <h4 class="card-title">Update Details</h4>
    </div>
    <div class="card-body">
  <div class="form-group row">
    <label for="name" class="col-4 col-form-label">Bank name</label> 
    <div class="col-8">
      <input id="name" name="name" type="text" class="form-control" value="{{$bank->name}}">
    </div>
  </div>
  <div class="form-group row">
    <label for="Account No" class="col-4 col-form-label">Account No</label> 
    <div class="col-8">
      <input id="Account No" name="account_no" type="text" class="form-control" aria-describedby="Account NoHelpBlock" value="{{$bank->account_no}}"> 
      <span id="account_noHelpBlock" class="form-text text-muted">optional</span>
    </div>
  </div>
  <div class="form-group row">
    <label for="code" class="col-4 col-form-label">Code</label> 
    <div class="col-8">
      <input id="code" name="code" type="text" class="form-control" aria-describedby="codeHelpBlock" value="{{$bank->code}}"> 
      <span id="codeHelpBlock" class="form-text text-muted">optional</span>
    </div>
  </div>
  <div class="form-group row">
    <label for="Credit Limit" class="col-4 col-form-label">Credit Limit</label> 
    <div class="col-8">
      <input id="credit_limit" name="credit_limit" type="text" class="form-control" aria-describedby="Credit LimitHelpBlock" value="{{$bank->credit_limit}}"> 
      <span id="credit_limitHelpBlock" class="form-text text-muted">optional</span>
    </div>
  </div>
  <div class="form-group row">
    <label for="currency" class="col-4 col-form-label">Currency</label> 
    <div class="col-8">
      <input id="currency" name="currency" type="text" class="form-control" value="{{$bank->currency}}">
    </div>
  </div> 


    </div>
    <!-- card-body -->
        <div class="border-top">
            <div class="card-body">
<input type="submit" value="Update Bank" class="btn btn-primary">              </div>
        </div>
       
  
</div>

</div>
<!-- col-md-6 -->
</form>
@endsection

Route:

 Route::put('/bank/{$id}', 'BankaccountsController@update');
0 likes
16 replies
anibabbar's avatar

almost doing same code for other Controller and things running fine. I believe there could be an error while setting up laravel routes or routes order. Not sure at all.

Snapey's avatar

make more robust

        $bank = Bankaccounts::where('user_id', Auth::id())->findOrFail($id);

        
        //$user = Auth::user()->id;

        //if($bank->user_id !== $user) {
           //return  redirect('bank');
         //} else {

        $bank->name = $request->name;
        $bank->account_no = $request->account_no;
        $bank->code = $request->code;
        $bank->credit_limit = $request->credit_limit;
        $bank->currency = $request->currency;
        //$bank->user_id = $parent_id;
        //$bank->emp_id = $user_id;

        $bank->save();

        //$redirect = $_SERVER['HTTP_REFERER'];
   
        //return redirect($redirect);

        return redirect('bank')
         }

You might consider using named routes to make things clearer

anibabbar's avatar

@snapey thanks for improving controller code. I am really thankful for this.

I couldn't understand this - " You might consider using named routes to make things clearer "

how could this help !! Its my first project with laravel. But I have good experience with MVC patterns. Everything is working fine. One of the crud is working fine in the same project.

But when I am creating new routes for new CRUD operations, I am stuck with Update. It just give me 404 error. I am pasting my complete web.php, There might be an error there. I hope this might help solving issue.


Route::get('/', function () {
    // return view('dashboard.index');
    // return view('layouts.dashboard');
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::get('/client', 'ClientController@index')->name('client');
Route::get('/client/create', 'ClientController@create')->name('clientCreate');
Route::post('/client', 'ClientController@store');
Route::get('/client/{id}/edit', 'ClientController@edit');
Route::put('/client/{id}', 'ClientController@update');

Route::delete('/client/{id}/destroy', 'ClientController@destroy');


Route::get('/business', 'BusinessController@index')->name('business');
Route::get('/business/create', 'BusinessController@create')->name('businessCreate');

Route::get('/bank', 'BankaccountsController@index')->name('bank');
Route::get('/bank/create', 'BankaccountsController@create')->name('bankCreate');
Route::post('/bank', 'BankaccountsController@store');
Route::get('/bank/{id}/edit', 'BankaccountsController@edit');
Route::put('/bank/{$id}', 'BankaccountsController@update')->name('updatebank');

Route::delete('/bank/{$id}/destroy', 'BankaccountsController@destroy');

Route::get('/cash', 'CashaccountsController@index')->name('cash');
Route::get('/cash/create', 'CashaccountsController@create')->name('cashCreate');
Route::post('/cash', 'CashaccountsController@store');
Route::get('/cash/{id}/edit', 'CashaccountsController@edit');
Route::put('/cash/{$id}', 'CashaccountsController@update');



Route::get('/supplier', 'Suppliercontroller@index')->name('supplier');
Route::get('/supplier/create', 'Suppliercontroller@create')->name('supplierCreate');

Route::get('/inventory', 'InventoryController@index')->name('inventory');
Route::get('/inventory/create', 'InventoryController@create')->name('inventoryCreate');
Snapey's avatar

when you see the 404 error, what does the browser address bar say?

Snapey's avatar

you are using named routes,

Route::get('/bank', 'BankaccountsController@index')->name('bank');

So instead of

return redirect('bank')

I would get in the habit of using

return redirect(route('bank'))

then your code is not linked to the external appearance. You could change your routes to

Route::get('/my-bank-details', 'BankaccountsController@index')->name('bank');

and your code would still work because you are referring to the route by its internal name.

1 like
anibabbar's avatar

@snapey my browser bar says : Not Found url = http://127.0.0.1:8000/bank/1

This happens when i am Updating a bank record.

On my web.php I have setup Client crud, thats working fine.

Later I added Bank & Cash crud. In bank and cash crud update and delete return Not Found, 404 error.

My routes list shows all routes - php artisan route:list

anibabbar's avatar

I believe it will be a very very small error that is just not passing my eyes or may be I am doing something really stupid.

Snapey's avatar

and you have a bank with id of 1 ?

Snapey's avatar

You don't have a get route for bank/1

anibabbar's avatar

I have bank with id of 1, & error is same with all ids

anibabbar's avatar

@snapey, why do I need a get route for bank/1, I am submitting a put request to /bank/{{$id}}

Route::put('/bank/{$id}', 'BankaccountsController@update')->name('bankUpdate');

Instead of running update method on submit, it just redirects to 404 page, it isnt able to find update method,

Snapey's avatar

Just check, all your put and post routes, do you always exit with a redirect? Particularly look at the route that leads to the display of the form.

anibabbar's avatar

I am just simply returning $request to test. But it still dont work. Let me again share controller method and view and route

get route for edit is working fine. When I submit form... it should redirect to update method and it just breaks there.

Let me explain this again: I am just simply submitting a form to update route and instead of routing to update method, laravel gives me a 404 error.

I am developing an app with 40+ Different CRUD operations. Some of the CRUD's are working fine and some aren't working. I am adopting exact same system to all of CRUD's.

In Bank case, when I submit the form, laravel just return 404 instead of update method.

Route

Route::get('/bank/{id}/edit', 'BankaccountsController@edit');
Route::put('/bank/{$id}', 'BankaccountsController@update')->name('bankUpdate');

Controller

 public function update(Request $request, $id)
    {   
        return $request; 
    }

View

@extends('layouts.dashboard')
@section('title', 'Update Bank')

@section('content')

<form action="/bank/{{$bank->id}}" method="POST">

@csrf
@method('put')
<div class="col-md-6">

  <div class="card">
   
  <div class="card-header">
        <h4 class="card-title">Update Details</h4>
    </div>

    <div class="card-body">
  
    <div class="form-group row">
    <label for="name" class="col-4 col-form-label">Bank name</label> 
    <div class="col-8">
      <input id="name" name="name" type="text" class="form-control" value="{{$bank->name}}">
    </div>
  </div>

  <div class="form-group row">
    <label for="Account No" class="col-4 col-form-label">Account No</label> 
    <div class="col-8">
      <input id="Account No" name="account_no" type="text" class="form-control" aria-describedby="Account NoHelpBlock" value="{{$bank->account_no}}"> 
      <span id="account_noHelpBlock" class="form-text text-muted">optional</span>
    </div>
  </div>

  <div class="form-group row">
    <label for="code" class="col-4 col-form-label">Code</label> 
    <div class="col-8">
      <input id="code" name="code" type="text" class="form-control" aria-describedby="codeHelpBlock" value="{{$bank->code}}"> 
      <span id="codeHelpBlock" class="form-text text-muted">optional</span>
    </div>
  </div>

  <div class="form-group row">
    <label for="Credit Limit" class="col-4 col-form-label">Credit Limit</label> 
    <div class="col-8">
      <input id="credit_limit" name="credit_limit" type="text" class="form-control" aria-describedby="Credit LimitHelpBlock" value="{{$bank->credit_limit}}"> 
      <span id="credit_limitHelpBlock" class="form-text text-muted">optional</span>
    </div>
  </div>

  <div class="form-group row">
    <label for="currency" class="col-4 col-form-label">Currency</label> 
    <div class="col-8">
      <input id="currency" name="currency" type="text" class="form-control" value="{{$bank->currency}}">
    </div>
  </div> 


    </div>
    <!-- card-body -->
        <div class="border-top">
            <div class="card-body">
<input type="submit" value="Update Bank" class="btn btn-primary">   
           </div>
        </div>
       
  
</div>

</div>
<!-- col-md-6 -->
</form>
@endsection
anibabbar's avatar

@mkshingrakhiya thanks a lot bro !! these are simple typos that waste hours and hours...

I am just laughing over myself ... like hell ... silly mistake ... wasted my day.

and @snapey, thanks a lot bro to you too... you simply helped me lot.. and gave me several great tricks in this thread.

Regards Anirudh

Please or to participate in this conversation.