2017-10-26 33 views
0

私はユーザーが自分の詳細を記入してデータベースに提出できるフォームを設計しています。ほとんどの場合、それは動作します。運転免許証クラスに関する書式の一部がありますが、動作しません。人は複数の運転免許証を持っているので、私はそれをチェックボックス欄に入れました。しかし、ユーザが2つ以上の運転免許証を選択すると、最後に選択された運転免許証のみがデータベースに現れる。したがって、Class1を最初に選択してからClass2を選択すると、データベースにClass2のみが表示されます。チェックボックスの値をデータベースに保存する

ユーザーが選択したすべての運転免許証を1つのデータベース列に含めるにはどうすればよいですか? 以下のコードを添付しました。

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'); 
    } 
} 

あなたはそれuを設定する必要がコントローラ

<?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

pを配列として配列し、チェックボックスの名前に[]を追加します。

変更し、すべての<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')); 
+0

foreachループまたはimplodeのコードはどこに置く必要がありますか? – Neal23

+0

更新された回答を参照 – Boratzan

+1

はい!できます。 ありがとうございました! – Neal23

0

変更ブレード内のチェックボックスの名前

には、 name = "Driver_license_class []"

PHPコードでは、選択したライセンスを配列として取得できます。データベース内のフィールドに配列を保存するには

、あなたはCSV形式で保存する必要があります。

$ PersonalParticulars-> Driver_license =破( ' ' $要求 - >入力(' Driver_license' ));

別の方法としては、JSON形式でデータを保存することが

$ PersonalParticulars-> Driver_license = json_encode($要求 - >入力( 'Driver_license'));

+0

しかし、私はそれを変更するとエラーが発生します - > ErrorException(E_NOTICE)配列を文字列に変換する – Neal23

+0

json_encodeメソッドも機能します。ありがとうございました! – Neal23

+0

正しい答えを後で投稿して編集した別のものへの正解を変更する点は、私の「完全な」答えの後であり、同じ問題を抱えている他のユーザーには役に立ちません。 – Boratzan

関連する問題