laravel 中的值未保存到数据库中
values are not saving into database in laravel
我正在尝试保存我的复选框值,但我不知道我哪里错了我被困在这个问题上
我正在执行操作的控制器:
控制器:
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'];
}
我不知道为什么数据没有插入数据库我点击提交按钮和页面刷新就是这样,我没有收到任何错误,但数据没有保存到数据库中。
非常感谢您的帮助!
编辑 1:同时考虑 Marcin 的 Nabiałek 回答! Csrf 令牌丢失..
为了了解发生了什么并实际学习,请在进行任何更改之前检查您从请求中获得的输入。在函数 preferences()
的第一行添加命令 dd($request->all());
以查看 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;
*如果未设置复选框值,但用户已选中该复选框,是的,它将 return 值 on
关于案例 (1) 的额外信息:
你不应该有两个相同的元素 name
。实际问题是您检查了 on
的值,但输入的值为 1
。即使同名元素存在两次,请求也将被最后一个覆盖(在您的情况下,它被输入类型复选框覆盖)。但是,在您的情况下,应删除隐藏的输入类型。
我认为这里的问题可能是缺少 CSRF 令牌。你应该添加
{{ csrf_field() }}
之后
<form id="preferences_form" role="form" method="POST" novalidate action="{{ url('/preference') }}" class="mujucet-registration">
行
我正在尝试保存我的复选框值,但我不知道我哪里错了我被困在这个问题上 我正在执行操作的控制器:
控制器:
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'];
}
我不知道为什么数据没有插入数据库我点击提交按钮和页面刷新就是这样,我没有收到任何错误,但数据没有保存到数据库中。
非常感谢您的帮助!
编辑 1:同时考虑 Marcin 的 Nabiałek 回答! Csrf 令牌丢失..
为了了解发生了什么并实际学习,请在进行任何更改之前检查您从请求中获得的输入。在函数 preferences()
的第一行添加命令 dd($request->all());
以查看 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;
*如果未设置复选框值,但用户已选中该复选框,是的,它将 return 值 on
关于案例 (1) 的额外信息:
你不应该有两个相同的元素 name
。实际问题是您检查了 on
的值,但输入的值为 1
。即使同名元素存在两次,请求也将被最后一个覆盖(在您的情况下,它被输入类型复选框覆盖)。但是,在您的情况下,应删除隐藏的输入类型。
我认为这里的问题可能是缺少 CSRF 令牌。你应该添加
{{ csrf_field() }}
之后
<form id="preferences_form" role="form" method="POST" novalidate action="{{ url('/preference') }}" class="mujucet-registration">
行