значения не сохраняются в базе данных в laravel - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь сохранить значение своего флажка, но я не знаю, где я ошибаюсь. Я застрял в этой проблеме, мой контроллер, где я выполняю свое действие:

Контроллер:

public function preferences(Request $request)
{
    $user = Auth::guard()->user();

    $preference = new Preference();

    $preference->userID = $user;
    $preference->monthly = Input::get('monthly') == 'on' ? 1 : 0;
    $preference->weekly = Input::get('weekly') == 'on' ? 1 : 0;
    $preference->tax_reviews = Input::get('tax_reviews') == 'on' ? 1 : 0;
    $preference->quarterly = Input::get('quarterly') == 'on' ? 1 : 0;
    $preference->quarterly = Input::get('quarterly') == 'on' ? 1 : 0;
    $preference->annually = Input::get('annually') == 'on' ? 1 : 0;
    $preference->newsletter = Input::get('newsletter') == 'on' ? 1 : 0;
    $preference->direct_mail_reviews = Input::get('direct_mail_reviews') == 'on' ? 1 : 0;
    $preference->email = Input::get('email') == 'on' ? 1 : 0;
    $preference->sms = Input::get('sms') == 'on' ? 1 : 0;
    $preference->save();

    return back();

}

Моя форма:

<form id="preferences_form" role="form" method="POST" novalidate action="{{ url('/preference') }}" class="mujucet-registration">
                                <h5>Nastavení zpráv</h5>
                                <div class="row">
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label  for="ch1">
                        <input type='hidden' name='monthly' value='0'>
                                                <input type="checkbox" name="monthly" value="1" id="ch1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Měsíční výpisy
                                            </label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='monthly' value='0'>
                                                <input type="checkbox" name="weekly" value="1" ><span class="cr"><i class="cr-icon fa fa-check"></i></span>Týdenní přehled
                                            </label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='tax_reviews' value='0'>
                                                <input type="checkbox" name="tax_reviews" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Daňové výpisy
                                            </label>
                                        </div>
                                    </div>

                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='quarterly' value='0'>
                                                <input type="checkbox" name="quarterly" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Čtvrtletní výpisy
                                            </label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='annually' value='0'>
                                                <input type="checkbox" name="annually" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Roční výpisy
                                            </label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='newsletter' value='0'>
                                                <input type="checkbox" name="newsletter" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Novinky
                                            </label>
                                        </div>
                                    </div>

                                    <div class="col-md-12">
                                        <div class="checkbox">
                                            <label class="border">
                        <input type='hidden' name='direct_mail_reviews' value='0'>
                                                <input type="checkbox" name="direct_mail_reviews" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span> Chci výpisy zasílat také Poštou <span class="light">20 kč za výpis</span>
                                            </label>
                                        </div>
                                    </div>

                                </div><h5>Kontaktní preference</h5>
                                <div class="row">
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='email' value='0'>
                                                <input type="checkbox" name="email" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Email
                                            </label>
                                        </div>
                                    </div>
                                    <div class="col-md-4">
                                        <div class="checkbox">
                                            <label>
                        <input type='hidden' name='sms' value='0'>
                                                <input type="checkbox" name="sms" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>SMS
                                            </label>
                                        </div>
                                    </div>
                                </div>
                            </form>                        </div>

Мои маршруты

Route::post('preference','HomeController@preferences');

Моя модель, в которой у меня имя базы данных

class Preference extends Model
{
    protected $table = 'db_preferences';

    protected $fillable = ['userID','monthly','weekly','tax_reviews','quarterly','annually','newsletter','direct_mail_reviews','email','sms'];
}

Я не знаю, почему данные не вставляютсяв базу данных я нажимаю кнопку отправки и обновляю страницу, вот и все, и я не получаю ошибок, но данные не сохраняются в БД.

Ваша помощь будет высоко оценена!

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Я полагаю, что проблема здесь может отсутствовать CSRF токен.Вы должны добавить

{{ csrf_field() }}

после

<form id="preferences_form" role="form" method="POST" novalidate action="{{ url('/preference') }}" class="mujucet-registration">

line

0 голосов
/ 30 сентября 2018

РЕДАКТИРОВАТЬ 1: Рассмотрим ответ Marcin's Nabiałek также!Токен Csrf отсутствует ..

Чтобы понять, что происходит, и узнать, проверить входные данные, полученные из запросов, прежде чем вносить какие-либо изменения.Добавьте команду dd($request->all()); в первую строку функции preferences(), чтобы увидеть, что inputs содержит $request.

Есть две проблемы.

1) HTML.Поскольку у вас есть

<input type='checkbox'>

Вам не нужны скрытые типы:

<input type='hidden'>

Например, вместо:

 <input type='hidden' name='newsletter' value='0'>
 <input type="checkbox" name="newsletter" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Novinky

Измените его на ( без типа ввода, поскольку он не нужен ):

 <input type="checkbox" name="newsletter" value="1"><span class="cr"><i class="cr-icon fa fa-check"></i></span>Novinky

2) Во-вторых, контроллер проверяет значение onно значение, установленное для этого флажка, равно 1, поэтому его следует изменить на:

$preference->newsletter = Input::get('newsletter') == 1 ? 1 : 0;

* Если значение флажка не установлено, но пользователь установил флажок, то да, он вернетзначение on

Дополнительная информация о case (1):

У вас не должно быть двух элементов с одинаковым name.Фактическая проблема заключается в том, что вы проверяете значение on, но входные данные имеют значение 1.Даже если элемент с одинаковым именем существует дважды, запрос будет перезаписан последним (в вашем случае он перезаписывается флажком типа ввода).Однако в вашем случае скрытый тип ввода (ов) должен быть удален.

...