【问题标题】:Check box value is not saving into database in laravel复选框值未保存到 laravel 中的数据库中
【发布时间】:2018-09-30 08:07:28
【问题描述】:

如果复选框选择值为 1,我将尝试保存我的复选框值,否则将为 0。

但我不知道我的错误值没有保存到我的数据库中,请查看我的表单。

我的表格:

                <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="checkbox" name="monthly" 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="checkbox" name="weekly"><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="checkbox" name="tax_reviews"><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="checkbox" name="quarterly"><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="checkbox" name="annually"><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="checkbox" name="newsletter"><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="checkbox" name="direct_mail_reviews"><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="checkbox" name="email"><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="checkbox" name="sms"><span class="cr"><i class="cr-icon fa fa-check"></i></span>SMS
                                        </label>
                                    </div>
                                </div>
                            </div>
                        </form>

我保存我的值的控制器操作:

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

    $preferences = new Preference();

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

    return back();

}

我正在使用 javascript 代码通过按钮保存值:

submitForms = function(){
  document.getElementById("preferences_form").submit();
}

还有我的模特:

class Preference extends Model
   {
protected $table = 'db_preferences';
protected $fillable = ['userID','monthly','weekly','tax_reviews','quarterly','annually','newsletter','direct_mail_reviews','email','sms'];
   }

如果我错了,请通知我您的帮助将不胜感激。 提前致谢

【问题讨论】:

  • 错误是什么?
  • 我没有看到任何错误
  • 在您调用控制器中的$preferences-&gt;save(); 之前,您是否已验证所有值都是您期望的值?该问题还可能与您对数据库列的任何限制有关,因此如果您也可以发布这些限制,那将有所帮助。作为旁注,我不确定为什么你会使用 javascript 来发布表单,而这可能可以直接在 HTML 中实现,但话虽如此,我不是 PHP 或 laravel 方面的专家
  • 我需要用相同的按钮再保存一个表单,这就是我使用 javascript 的原因
  • 我已将我的类型设置为 int,因为我想保存值 1 或 0

标签: php laravel forms


【解决方案1】:

您可以检查复选框是否已选中,如下所示。

$preferences->monthly = Input::get('monthly') == 'on' ? 1 : 0;

更简化的代码

$preferences->monthly = Input::get('monthly') == 'on' ?;

【讨论】:

    【解决方案2】:
    • 在所有输入字段中添加value 属性(无论字段类型是什么)。因为它很安全。
    • 不要使用 int 在数据库中存储 1/0。因为它浪费了额外的内存。使用 tinyInt。

    如果您使用 tinyInt,此代码可能会对您有所帮助。

    `$preferences->monthly = $request->has('monthly');
     $preferences->weekly = $request->has('weekly');`
    

    【讨论】:

    • 您好,我使用了您上面的代码并将类型更改为 tiny int 但没有工作我无法将我的值保存到数据库中
    • 你能进一步帮助我吗?
    • 能否请您发布dd($request-&gt;all())的输出
    • 我试过了,但它没有显示任何响应它刷新页面不添加值
    • 你能来聊天或任何其他我们可以聊天的来源
    【解决方案3】:

    问题是$request 不返回空的表单元素值,因此您的复选框甚至不会出现在提交的表单输入值数组中。因此没有什么可以写入数据库。

    在保存或更新$request 数据之前将此行添加到控制器update 函数中,如果未选中或选中,则会设置0 或1 值。它查看$request 数组中是否有返回的元素。如果有,则应检查该值,否则不检查。

    !$request->monthly ? $request["monthly"] = 0 : $request["monthly"] = 1;
    

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2020-03-15
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多