'The post method is not supported for this route

I'm new to laravel and I want to submit a form which have three attachments plus some arrays

but when I click submit button laravel says

"The POST method is not supported for this route. Supported methods: GET, HEAD."

I've searched a lot but couldn't find any errors

My View

<div>
    <form action="insertquotation" method="post" enctype="multipart/form-data">
        @csrf
        <table border="1" id="formTable">
            <thead>
            <tr>
                <td>procurment_request_number</td>
                <td>quotationer</td>
                <td>shop_name</td>
                <td>shop_account_number</td>
                <td>shop_permit</td>
                <td>shop_quatation</td>
            </tr>
            </thead>

            <tbody>
            <tr>
                <td>
                    <input type="text" name="procurment_request_number" id="procurment_request_number" value="{{$result->first()->request_number}}">
                    {{--<select name="procurment_request_number[]" id="procurment_request_number">--}}
                        {{--@foreach($result as $results)--}}
                            {{--<option value="{{$results->request_number}}">{{$results->request_number}}</option>--}}
                            {{--@endforeach--}}
                    {{--</select>--}}
                </td>
                <td><input type="text" id="quotationer1" name="quotationer1"></td>
                <td><input type="text" name="shop_name1" id="shop1_name"></td>
                <td><input type="text" name="shop_account_number1" id="shop1_account_number"></td>
                <td><input type="text" name="shop_permit1" id="shop1_permit"></td>
                <td><input type="file" accept="application/pdf" name="shop_quatation1" id="shop_quatation"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="text" id="quotationer" name="quotationer2"></td>
                <td><input type="text" name="shop_name2" id="shop1_name"></td>
                <td><input type="text" name="shop_account_number2" id="shop1_account_number"></td>
                <td><input type="text" name="shop_permit2" id="shop1_permit"></td>
                <td><input type="file" accept="application/pdf" name="shop_quatation2" id="shop_quatation"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="text" id="quotationer" name="quotationer3"></td>
                <td><input type="text" name="shop_name3" id="shop1_name"></td>
                <td><input type="text" name="shop_account_number3" id="shop1_account_number"></td>
                <td><input type="text" name="shop_permit3" id="shop1_permit"></td>
                <td><input type="file" accept="application/pdf" name="shop_quatation3" id="shop_quatation"></td>
            </tr>
                <tr>
                    <td>Item_ID</td>
                    <td>Quantity</td>
                    <td>Unit_ID</td>
                    <td>description</td>
                    <td>Shop1_price</td>
                    <td>Shop2_price</td>
                    <td>Shop3_price</td>
                </tr>
                @foreach($result as $results)
                <tr>
                    <td><input type="text" name="itemid[]" id="itemid" value="{{$results->id}}"></td>
                    <td><input type="text" name="quantity[]" id="quantity" value="{{$results->quantity}}"></td>
                    <td><input type="text" name="units_id[]" id="units_id" value="{{$results->units_id}}"></td>
                    <td><input type="text" name="description[]" id="description" value="{{$results->description}}"></td>
                    <td><input type="text" name="shop1_price[]" id="shop1_price"></td>
                    <td><input type="text" name="shop2_price[]" id="shop2_price"></td>
                    <td><input type="text" name="shop3_price[]" id="shop3_price"></td>
                </tr>
                </tbody>
            @endforeach
        </table>
        {{--<input value="addrow" type="button" id="addrow"  onclick="javascript: addRow();">--}}
        <input type="submit" value="submit">
    </form>
</div>

My Controller


public function insertquotation(request $request)
{
    if ($file = $request->file('shop1_quatation')) {
        $name = $file->getClientOriginalName();
        $file->move('procurement_files', $name);
        $file2 = $request->file('shop2_quatation');
        $name2 = $file2->getClientOriginalName();
        $file2->move('procurement_files', $name2);
        $file3 = $request->file('shop2_quatation');
        $name3 = $file2->getClientOriginalName();
        $file3->move('procurement_files', $name3);
        $procurment_request_number = $request->input('procurment_request_number');
        $quotationer1 = $request->input('quotationer1');
        $quotationer2 = $request->input('quotationer2');
        $quotationer3 = $request->input('quotationer3');
        $shop_name1 = $request->input('shop_name1');
        $shop_account_number1 = $request->input('shop_account_number1');
        $shop_permit1 = $request->input('shop_permit1');
        $shop_name2 = $request->input('shop_name2');
        $shop_account_number2 = $request->input('shop_account_number2');
        $shop_permit2 = $request->input('shop_permit2');
        $shop_name3 = $request->input('shop_name3');
        $shop_account_number3 = $request->input('shop_account_number3');
        $shop_permit3 = $request->input('shop_permit3');
        $numbers = $request->input('itemid');
        for ($i = 0; $i < count($numbers); $i++) {
            $itemid = $request->input('itemid');
            $shop1_price = $request->input('shop1_price');
            $shop2_price = $request->input('shop2_price');
            $shop3_price = $request->input('shop3_price');
            DB::insert("INSERT INTO procurment_quotations (`procurment_request_number`, `itemid`, `quotationer1`, `quotationer2`, `quotationer3`, `shop1_name`, `shop1_account_number`, `shop1_permit`, `shop1_quatation`, `shop1_price`, `shop2_name`, `shop2_account_number`, `shop2_permit`, `shop2_quatation`, `shop2_price`, `shop3_name`, `shop3_account_number`, `shop3_permit`, `shop3_quatation`, `shop3_price`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,)", [$procurment_request_number, $itemid[$i],$quotationer1,$quotationer2,$quotationer3,$shop_name1,$shop_account_number1,$shop_permit1,$name,$shop1_price,$shop_name2,$shop_account_number2,$shop_permit2,$name2,$shop2_price,$shop_name3,$shop_account_number3,$shop_permit3,$name3,$shop3_price]);
        }
    }
}

and my route

Route::Post('insertquotation','Home@insertquotation');

The error is

"The POST method is not supported for this route. Supported methods: GET, HEAD."



Solution 1:[1]

Give the route a name in your routes/web.php file:

Route::post('insertquotation','Controllername@methodname')
    ->name('insertquotation');

And then change the form action in your blade file to point to that route:

<form action="{{ route('insertquotation') }}" method="post" enctype="multipart/form-data">

Solution 2:[2]

Couple of things which I need to point out on your code

It is always better to use route names while creating routes so that when you need to change the route URL to something else, you only need to change it inside routes file (not view files)

Route::post('insertquotation','Home@insertquotation')->name('insertquotation');

Now inside your view, you need to do this

<form method="POST" enctype="multipart/form-data" action="{{ route('insertquotation') }}"> ... </form>

In the future when you want (maybe not) to change the URL to /quotation/insert, all you have to do is to change it inside the routes file.

Now, inside your controller,

There is a function to check whether the file exists $request->hasFile('shop1_quatation') which more correct to use inside an if condition rather passes in the file.

Also, it is much better to use Laravel eloquent for inserting data into the database. Learn more here

Solution 3:[3]

I think from action="insertquotation", you should make it into action="{{url('insertquotation')}}"

And may I see the codes in your routes/web.php file? you should declare the route insertquotation there

For example:

Route::post('insertquotation', 'YourController@yourMethod');

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 miken32
Solution 2 Advaith
Solution 3 Md.Sukel Ali