Форма Laravel не отправляет данные в базу данных

#php #forms #laravel-5 #models

#php #формы #laravel-5 #Модели

Вопрос:

По какой-то причине моя форма не отправляет никаких данных в базу данных, но с того места, где я стою, все выглядит нормально, и база данных может нормально передавать информацию в форму.

Поскольку людям нужно предоставить много информации, я делаю данные профиля не частью процесса входа в систему. Все еще не знаком с тем, как Laravel это делает, но теперь я примерно понимаю процесс, с которым я возился.

Одна вещь, которую мне интересно, существует ли определенный синтаксис для записи форм в базу данных, должен ли я указывать соответствующие имена таблиц базы данных в форме? Или это часть контроллера?

Должен ли я использовать привязку модели формы? Однако немного сложно найти информацию об этом для текущей версии Laravel.

Чего мне не хватает?

 //Route::get('NewUser', 'UserEntryController@create');
Route::post('NewUser', 'UserEntryController@UserForm');
//Route::get('NewUser', 'UserEntryController@create')->name('NewUser');
Route::post('NewUser', 'UserEntryController@UserForm')->name('submit');
 

Контроллер:

 <?php

namespace AppHttpControllers;

use AppUserEdit;
use IlluminateHttpRequest;
use DB;
use AppHttpRequests;

class UserEntryController extends Controller
{

   protected function create()
    {
        $id = UserEdit::find(715)->toArray();
        return view('NewUser', compact('id'));
        //return $array;
    }

    public function UserForm(Request $request) {
        $email = $request['email'];
        $first_name = $request['first_name'];
        $password_hint = $request['password_hint'];
        $last_name = $request['last_name'];

        $user = UserEdit::find(715)->first();
        $user->email = $email;
        $user->First_Name = $first_name;
        $user->Last_Name = $last_name;
        $user->Password_Hint = $password_hint;

        $user->save();

        $id = UserEdit::find(715)->toArray();
        return view('NewUser', compact('id'));
    }

}
 

Блейд:

 @extends('layout')


@section('content')
    <h1> Add Your Information {{ $id['name'] }}</h1>
    <div class="row">
        <div class="col-md-6">
            <h3>Edit</h3>
            <form action="{{ route('submit') }}" method="post">
                <div class="form-group">
                {{ csrf_field() }}
                    <label for="email">Your E-Mail</label>
                    <input class="form-control" type="text" name="email" id="email">
                </div>
                <div class="form-group">
                {{ csrf_field() }}
                    <label for="first_name">Your First Name</label>
                    <input class="form-control" type="text" name="first_name" id="first_name">
                </div>
                <div class="form-group">
                {{ csrf_field() }}
                    <label for="last_name">Your Last Name</label>
                    <input class="form-control" type="text" name="last_name" id="last_name">
                </div>
                <div class="form-group">
                {{ csrf_field() }}
                    <label for="password_hint">Your Password Hint</label>
                    <input class="form-control" type="text" name="password_hint" id="password_hint">
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
                <input type="hidden" name="_token" value="{{ Session::token() }}">
            </form>
        </div>
    </div>

    @foreach ($id as $key=>$value)
        {{ $value }}<br>
    @endforeach
@stop
 

Ответ №1:

Вы должны использовать $request->get('email') вместо $request['email'] и то же самое для всего остального, что вы хотите от запроса, и я не думаю, что вам нужно использовать ->first() при использовании ->find

Ответ №2:

Возможно, что-то не так с полем _token, поскольку в форме есть пять полей csrf.

Попробуйте удалить эту строку

 <input type="hidden" name="_token" value="{{ Session::token() }}">
 

и просто оставьте один {{ csrf_field() }} в форме.