DevTaabi
DevTaabi

Reputation: 77

Redirect to wrong action when validation fails after form submission in laravel 5.0

I have two form in one view when I leave the text field empty it redirects to wrong action. I am looking forwrad for the solution of this problem. Thanks in hope. Form one works fine when I enter data in ll the input fields. /inquiry/store also contains http request validation.

View code which contains two forms.

 <div class="col-lg-6">

        {!! Form::open(['role' => 'form', 'url' => '/inquiry/store', 'class' => 'form-horizontal', 'method'=>'POST']) !!}
        <div class='form-group'>
            {!! Form::label('name', 'Student Name *', ['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8">
                {!! Form::text('name', $student->name,['autocomplete'=>'off' , 'placeholder' => 'Student Name', 'class' => 'form-control']) !!}
            </div>
        </div>
        <div class='form-group'>
            {!! Form::label('father_name', 'Father Name *', ['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8">
                {!! Form::text('father_name',$student->father_name, ['autocomplete'=>'off' , 'placeholder' => 'Father Name', 'class' => 'form-control']) !!}
            </div>
        </div>
        <div class="form-group">
            {!! Form::label('class', 'Class', ['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8">
                {!! Form::text('class', $student->admission_class,['autocomplete'=>'off' , 'placeholder' => 'Class', 'class' => 'form-control']) !!}
            </div>
        </div>
        <div class="form-group">
            {!! Form::label('roll_no', 'Roll Number', ['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8">
                {!! Form::text('roll_no', $student->roll_no,['autocomplete'=>'off' , 'placeholder' => 'Roll Number', 'class' => 'form-control']) !!}
            </div>
        </div>
        <div class="form-group">
            {!! Form::label('date', 'Date',['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8 date">
                <div class="input-group input-append date" id="dateRangePicker">
                    {!! Form::input('date', 'date', null, ['autocomplete'=>'off' , 'placeholder' => 'Date of Birth', 'class'=>'form-control col-height datepicker']) !!}
                    <span class="input-group-addon add-on"><span class="glyphicon glyphicon-calendar"></span></span>
                </div>
            </div>
        </div>
        <div class="form-group">
            {!! Form::label('teacher_name', 'Teacher Name', ['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8">
                {!! Form::select('teacher_name', $teacher, ['autocomplete'=>'off' , 'placeholder' => 'Teacher Name', 'class' => 'form-control']) !!}
            </div>
        </div>
        <div class="form-group">
            {!! Form::label('remarks', 'Remarks', ['class' => 'control-label col-md-4']) !!}
            <div class="col-md-8">
                {!! Form::textarea('remarks', null, ['autocomplete'=>'off' ,
                'placeholder' => 'Remarks',
                'class' => 'form-control']) !!}
            </div>
        </div>
        <div class="form-group">
            <div class="col-xs-offset-3 col-md-12">
                {!! Form::submit('Save', ['class' => 'btn btn-primary']) !!}
                <input type="reset" class="btn btn-default" value="Reset">
            </div>
        </div>
        {!! Form::close() !!}

second form for searching the student. When I submit the first form with out some empty field it redirect to /inquiry/search_stu. and displays MethodNotAllowedHttpException .

<form role="form" id="search_form" action="/inquiry/search_stu" method="post"  class="form-inline">
            <div class='form-group'>
                <label class="control-label col-md-4">Search Student *</label>
                <input class="form-control" type="text" name="search" placeholder="Admission No" required>
            </div>
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <div class='form-group'>
                <input type="submit"  form="search_form" class="btn btn-primary" name="submit">
                <input type="reset" class="btn btn-default">
            </div>

        </form>

Controller function for search student.

 public function search_student(Request $request)
{
    $teacher = \App\Teacher::lists('name', 'name');
   $adminid = $request['search'];
    $student = Admission::where('admission_no',$adminid)->first();
    return View::make('/inquiry/create', ['student'=> $student,'teacher' => $teacher]);
}

When I submit the store form it redirects to search student.

store function .

public function store(Requests\StoreInquiryRequest $request) {

    $input = Input::all();
    $inquiry = new Inquiry();
    $inquiry->name = $input['name'];
    $inquiry->father_name = $input['father_name'];
    $inquiry->date = $input['date'];
    $inquiry->class = $input['class'];        
    $inquiry->teacher_name = $input['teacher_name'];
    $inquiry->roll_no = $input['roll_no'];
    $inquiry->remarks = $input['remarks'];        

    try {
        $inquiry->save();
        return redirect()->to('inquiry')->with('message', 'success| Student details have been saved.');
    } catch (Exception $ex) {
        \Log::error($ex);
        return redirect()->to('inquiry')->with('message', 'error| There was an error adding new student, please try again later.');
    }
}

Http request for validation when wants to store data

  public function rules()
{
    $cid = \Route::input('id');
    $isEdit = isset($cid) ? true : false;
    $rules = array(
        'name' => 'required|string|Max:50',
        'father_name' => 'required|string|Max:50',
        'class' => 'required|string|Max:50',
        'date' => 'required|date|Max:50',
        'teacher_name' => 'required|string|Max:50',
        'remarks' => 'required',
        'roll_no' => 'required',
    );
    return $rules;
}

Upvotes: 0

Views: 566

Answers (1)

Adam Kozlowski
Adam Kozlowski

Reputation: 5896

You can performe as many forms on one page as you wish. As far as I see you should have proper validtion in your controller - different validation for each form.

You need to use proper Laravel Validation. Reading this will make your coding process easier and faster: https://laravel.com/docs/5.0/validation

Example of validation in controller in Laravel 5.0:

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required|unique|max:255',
        'body' => 'required',
    ]);
}

Laravel Valiation also let you perform validations with query to database qithout writing whole SQL query: https://laravel.com/docs/5.0/validation#available-validation-rules

To display errors in view use:

@if($errors->has())
    @foreach ($errors->all() as $error)
        <div>{{ $error }}</div>
    @endforeach
@endif

Good luck!

Upvotes: 0

Related Questions