简体   繁体   中英

ERR_TOO_MANY_REDIRECTS - Laravel

Hopefully I can get some help... Been searching for an answer on this for 24hrs now... I cannot seem to find why it is occurring. It only happens on one page (POST METHOD)... every other page is fine.

I am not an expert with Laravel, but i thoght i had it all sorted as it is working fine on my local server. Once deployed, all is good but that one page that does not insert into the DB and returns a ERR_TOO_MANY_REDIRECTS.

Using Laravel Framework 5.6.12

Route:

Route::get('/requests/new', 'RequestsController@newRequest')->name('new_request');    
Route::post('/requests/new', 'RequestsController@newRequest')->name('new_request');

Controller:

 public function newRequest(Request $request){

            $service = new Service();

            $title = $request->input('title');
            $name = $request->input('name');
            $last_name = $request->input('last_name');
            $address = $request->input('address');
            $postcode = $request->input('postcode');
            $city = $request->input('city');
            $county = $request->input('county');
            $email = $request->input('email');
            $date = $request->input('date');
            $service_id = $request->input('service_id');

            if( $request->isMethod('post') )
                {
                    // dd($data);
                    $this->validate(
                        $request,
                        [
                            'name' => 'required|min:3',
                            'last_name' => 'required',
                            'address' => 'required',
                            'postcode' => 'required',
                            'city' => 'required',
                            'county' => 'required',
                            'email' => 'required',

                        ]
                    );

                }

            $data = array("title"=>$title,"name"=>$name,"last_name"=>$last_name,"address"=>$address,"postcode"=>$postcode,"city"=>$city,"county"=>$county,"email"=>$email,"date"=>$date,"service_id"=>$service_id);

            DB::table('requests')->insert(($data));

            $data_r['requests']= $service->getRequests(); 

            return view('requests/new', $data_r);
       }

Service Model:

public function getRequests()
    {

        $latest_request = DB::table('requests as r')
                                        ->select('r.request_id')
                                        ->orderBy('r.request_id', 'desc')
                                        ->get()
        ;

        return $latest_request;
    }

And my view:

@extends('layouts.app')

@section('content')
<div class="cont_client">
<div class="row">
      <div class="medium-12 large-12 columns " >
        <h4>STEP 2: Enter booking information</h4>
        <div class="form_cont">
        <form action="/requests/new" method="post">
         {{ csrf_field() }}
            <input name="service_id" type="hidden" value="{{ $service_id }}" readonly >
          <div class="medium-4  columns">
            <label>Title</label>
            <select name="title">
                         @foreach ($titles as $title )
                              <option value="{{ $title }}" >{{ $title }}.</option>
                        @endforeach 
                        </select>
          </div>
          <div class="medium-4  columns">
            <label>Name</label>
            <input name="name" type="text">
          </div>
          <div class="medium-4  columns">
            <label>Last Name</label>
            <input name="last_name" type="text">
          </div>

           <div class="medium-4  columns">
            <label>Date</label>
            <input name="date" type="date" value="{{ $date }}" readonly>
          </div>
          <div class="medium-8  columns">
            <label>Address</label>
            <input name="address" type="text">
          </div>
          <div class="medium-4  columns">
            <label>Post Code</label>
            <input name="postcode" type="text">
          </div>
          <div class="medium-4  columns">
            <label>City</label>
            <input name="city" type="text">
          </div>
          <div class="medium-4  columns">
            <label>County</label>
            <input name="county" type="text">
          </div>
          <div class="medium-12  columns">
            <label>Email</label>
            <input name="email" type="text" value="{{{ isset(Auth::user()->email) ? Auth::user()->email : Auth::user()->email }}}" readonly>
          </div>
          <div class="medium-12  columns">
            <input value="CONFIRM" class="button success btn_right" type="submit" >
          </div>
        </form>
        </div>
      </div>
    </div>
@endsection

It is without saying that it works fine on a local server (XAMPP).

  • I tried several browsers as I found out the issue could be related to that, but even clearing all cache, data, cookies, no change and still not working.
  • I have another page that does something very similar (insert into database and validate - returns view and data) and it is working fine.
  • Using shared hosting. But everything else, including the 'similar' page works fine. Only this one is looking like an issue.

Cookies for whoever can help me here!

尝试将get和post放在不同的函数中...看起来像循环进入的浏览器会引起路由。

You'll have to split the GET and POST request into 2 different functions.

    Route::get('/requests/new', 'RequestsController@newRequest')->name('request.new');    
Route::post('/requests/new', 'RequestsController@newRequestPost')->name('request.post');

To simplify the code you could simply use $service = new Service($request->all()); as long as your Service model fields are fillable. Run $service->save(); and done. The id is added automatically.

Finally you need to redirect the POST request to a GET request return redirect()->route('request.show', [$service->id])->with(['success' => 'Your request has been added']);

Create the route Route::get('/request/{id}', 'RequestsController@requestShow')->name('request.show'); and handle the view from there.

It is not laravel that loops. It's your browser.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM