2017-01-31 4 views
2

У меня есть это на мой взгляд:Как сохранить несколько флажков как целое число в БД

enter image description here

И у меня есть только одно поле в моей БД, и это driverslicensetype

, как сохранить это БД, так что выбирает независимо пользователь сохранит отборные из них, как это:

 /* ABCD 
     * 
     * A: 0 No 1 AM 2 A1 3 A2 4 A; 
     * B: 0 No 1 B1 2 B 3 BE 
     * C: 0 No 1 C1 2 C1E 3 C 4 CE 
     * D: 0 No 1 D1 2 D1E 3 D 4 DE 
     */ 

так, если пользователь выбирает и B только сохраненную Numbe г должен быть 3300

A B и C будет 3230

A B C D будет 3233

B C1 будет 0210

и так далее, я надеюсь, вы понимаете.

Так я сделал это, на мой взгляд:

<div class="col"> 
    <?php 
    $driverslicense_types = [ 
     'AM', 
     'A1', 
     'A2', 
     'A', 
     'B1', 
     'B', 
     'BE', 
     'C1', 
     'C1E', 
     'C', 
     'CE', 
     'D1', 
     'D1E', 
     'D', 
     'DE' 
    ] 
    ?> 
    @foreach($driverslicense_types as $type) 
     <div class="col-md-3"> 
      {!! Form::checkbox('driverslicense_type'.$type,'1', false, ['id'=>'driverslicense_type'.$type, 'class' => 'checkbox-style']) !!} 
      {!! Form::label('driverslicense_type'.$type, $type, ['id'=>'driverslicense_type'.$type, 'class'=>'checkbox-style-3-label']) !!} 
     </div> 
    @endforeach 
</div> 

Так что теперь я не знаю, как сохранить это в мой контроллер, кто может помочь?

+0

Вы можете выбрать только одну строку? – Samsquanch

+0

Нет ...вы можете выбрать все, что хотите – lewis4u

+0

Я бы предложил вам узнать о бинарных операциях и использовать их для сохранения ваших данных. Вы можете использовать 15 бит для представления выбранных значений: '0001' для первой строки в качестве примера может быть A, а' 1010' - 'AM' и' A2'. – Antony

ответ

1

Первое, что нужно помнить, это то, что флажки, которые не отмечены в форме, НЕ отправляются в скрипт.

Во-вторых, если поставить требуемое значение в атрибуте value="", а не по умолчанию в 1, которые вы используете, вы получите некоторые полезные данные от формы

Start с множеством типов и дать каждому типу введите правильное значение.

/* ABCD 
* 
* A: 0 No 1 AM 2 A1 3 A2 4 A; 
* B: 0 No 1 B1 2 B 3 BE 
* C: 0 No 1 C1 2 C1E 3 C 4 CE 
* D: 0 No 1 D1 2 D1E 3 D 4 DE 
*/ 

$dl_types = [ 
    'aaas' => ['AM'=>1, 'A1'=>2, 'A2'=>3, 'A'=>4], 
    'bees' => ['B1'=>1, 'B'=>2, 'BE'=>3], 
    'cees' => ['C1'=>1, 'C1E'=>2, 'C'=>3, 'CE'=>4], 
    'dees' => ['D1'=>1, 'D1E'=>2, 'D'=>,3 'DE'=>4] 
] 

Теперь использовать это, чтобы загрузить значение в атрибуте на форме для каждого из флажков value="".

Моей Laravel очень ржавая, поэтому, пожалуйста, проверьте это И не бейте меня, если я сделал ошибку синтаксиса здесь

@foreach($dl_types as $name => $subarray) 
    @foreach ($subarray as $type => $value) 
     <div class="col-md-3"> 
     {!! Form::checkbox($name.'[]',$value, false, ['id'=>'driverslicense_type'.$type, 'class' => 'checkbox-style']) !!} 
     {!! Form::label('driverslicense_type'.$type, $type, ['id'=>'driverslicense_type'.$type, 'class'=>'checkbox-style-3-label']) !!} 
     </div> 
    @endforeach 
@endforeach 

Теперь, когда форма размещена вы должны получить 4 массивы, как это в $_POST

Подразделения каждого из них будут содержать значения отмеченных флажков, которые вы поместили в атрибут value="" для каждого из них.

Так как вы говорите под другой ответ, вам нужно только самый большой из каждой категории, чтобы получить ответ, который вы хотите, независимо от того, сколько aaas, например, были проверены, вы можете сделать это для каждой категории

$result_string = '';  // init the string 

if (!isset($_POST['aaas']) { 
    // nothing in the A set was checked 
    $result_string .= '0'; 
} else { 
    $result_string .= $_POST['aaas'][count($_POST['aaas']-1); 
} 

if (!isset($_POST['bees']) { 
    $result_string .= '0'; 
} else { 
    $result_string .= $_POST['bees'][count($_POST['bees']-1); 
} 

if (!isset($_POST['cees']) { 
    $result_string .= '0'; 
} else { 
    $result_string .= $_POST['cees'][count($_POST['cees']-1); 
} 

if (!isset($_POST['dees']) { 
    $result_string .= '0'; 
} else { 
    $result_string .= $_POST['dees'][count($_POST['dees']-1); 
} 

Вы должны получить строку результата, содержащую 4 числовых символа, которые вы можете сохранить в своей базе данных.

+0

Неплохо неплохо ... Мне нужно некоторое время, чтобы проверить это, но вы проголосуйте от меня! – lewis4u

+0

Я ожидал, что вам, возможно, потребуется провести некоторое тестирование. Просто прокомментируйте здесь, если что-то не так, или вам нужно что-то еще выяснить – RiggsFolly

+0

были небольшие ошибки, но я исправил это ... и все еще работаю над этим ... Мне нравится, как вы думаете! – lewis4u

Смежные вопросы