将复选框值保存到数据库中

时间:2017-10-26 08:07:44

标签: php database laravel checkbox

我正在设计一个表格,用户可以在其中填写详细信息并将其提交到数据库。在大多数情况下,它的工作原理。关于驾驶执照类的表格中有一部分,它不起作用。一个人可以有多个驾驶执照,所以我把它变成了一个复选框字段。但是,当用户选择两个或更多驾驶执照时,只有最后选择的驾驶执照出现在数据库中。因此,如果一个人首先选择Class1然后选择Class2,则只有Class2出现在数据库中。

如何将用户选择的所有驾驶执照包含在一个数据库列中? 我附上了以下代码。

form.blade.php

@extends('layout.basiclayout')
@section('content')

<p>page 1/7</p>
        {!! Form::open(['url' => 'form/submit']) !!}

             <h3 style= 'text-decoration: underline'>PERSONAL PARTICULARS - </h3>
             <div class="form-group">
                  {{Form::label('Name/NRIC', 'Name AS PER NRIC/PASSPORT: ')}}
                  {{Form::text('Name/NRIC', '', ['class' => 'form-control', 'placeholder' => 'eg: John Smith'])}}
            </div>

            {{-- start of Driver`s License --}}
            <p>
            <div class="editfield">
              <div class="radio">
                <span><b>Do you have a Driver`s license?</b></span>
                <div id="Driver_licenseID">
                   <label><input type="radio" name="Driver_license" id="yesid" value="Yes" onclick="document.getElementById('Driver_license').style.display='block'">Yes</label>
                  <label><input type="radio" name="Driver_license" id="noid" value="No" onclick="document.getElementById('Driver_license').style.display='none'">No</label></div>
                </div>
            </div>

            <div class="editfield" id="Driver_license" style="display:none">
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class1" value="Class1">Class 1 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class2" value="Class2">Class 2 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class2A" value="Class2A">Class 2A 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class2B" value="Class2B">Class 2B <br>
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class3" value="Class3">Class 3 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class3A" value="Class3A">Class 3A 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class3C" value="Class3C">Class 3C 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class3CA" value="Class3CA">Class 3CA <br>
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class4" value="Class4">Class 4 
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class4A" value="Class4A">Class 4A
              <input type="checkbox" name="Driver_license_class" id="Driver_license_class5" value="Class5">Class 5 
            </div>
            </p>
            {{-- End of Driver`s License --}}

            <div class="form-group">
                  {{Form::submit('Next Page', ['class' => 'btn btn-primary'])}}
            </div>

{!! Form::close() !!}

@endsection

迁移文件

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePersonalInfosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('personal_infos', function (Blueprint $table) {
            $table->increments('id');
            $table->String('Name');
            $table->String('Driver_license');
            $table->String('Driver_license_class');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('personal_infos');
    }
}

控制器

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\PersonalInfo;

class PersonalInfoController extends Controller
{
          public function submit(Request $request){
        $this->validate($request,[
            'Name/NRIC' => 'required',
        ]);

        $PersonalParticulars = new PersonalInfo;
        $PersonalParticulars->Name = $request->input('Name/NRIC');
        $PersonalParticulars->Driver_license = $request->input('Driver_license');
        $PersonalParticulars->Driver_license_class = $request->input('Driver_license_class');

        $PersonalParticulars->save();
    return redirect('http://formapplication.dev/page2');
    }
}

2 个答案:

答案 0 :(得分:0)

您必须在复选框的名称中添加[],将其设置为数组。

将所有<input type="checkbox" name="Driver_license_class"更改为:

<input type="checkbox" name="Driver_license_class[]"

现在,您将收到结果作为数组,而不仅仅是单个值。要将值处理到数据库中,您可以根据您希望的方式进行多项处理。

您可以使用以下代码循环播放值:

if(isset($_POST['Driver_license_class'])){
    foreach($_POST['Driver_license_class'] as $license){
        echo $license; // Outputs the selected license
    }
}

或者您可以使用所需的分隔符破坏值:

implode(", ", $_POST['Driver_license_class'])

这将以逗号分隔的值返回所选结果。

修改

根据要求,您需要在添加[]后更改代码:

$PersonalParticulars->Driver_license_class = implode(", ", $request->input('Driver_license_class'));

答案 1 :(得分:0)

将刀片中的复选框名称更改为

  

名称= “Driver_license_class []”

这样您就可以在PHP代码中将选定的许可证作为数组。

要将数组保存到数据库中的字段,您需要将其保存为CSV格式:

  

$ PersonalParticulars-&gt; Driver_license = implode(',',$ request-&gt; input('Driver_license'));

或者,您可以以JSON格式保存数据

  

$ PersonalParticulars-&gt; Driver_license = json_encode($ request-&gt; input('Driver_license'));