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