2016-05-04 12 views
0

Ich habe ein Checkbox-Array, dessen Werte als JSON in einer Datenbank gespeichert sind. Ich möchte den alten Wert oder den gespeicherten Wert in der Datenbank abrufen. Hier ist der Code, den ich geschrieben habe.Altes Checkbox-Array abrufen

Es hat nicht wie erwartet funktioniert, gibt es eine Best Practice, um mit diesem Problem umzugehen?

<?php $savedDevices = json_decode(Auth::user()->devices, true);?> 
<input type="checkbox" name="devices[Android Phone]" value="1" {{(old('devices') !== null && array_key_exists("Android Tablet", old('devices')) ||array_key_exists("Android Tablet", $savedDevices))?"checked":""}}> Android Phone </label> 
<input type="checkbox" name="devices[Android Tablet]" value="1" {{(old('devices') !== null && array_key_exists("Android Tablet", old('devices')) ||array_key_exists("Android Tablet", $savedDevices))?"checked":""}}> Android Tablet </label> 
<input type="checkbox" name="devices[iPhone]" value="1" {{(old('devices') !== null && array_key_exists("iPhone", old('devices')) ||array_key_exists("iPhone", $savedDevices))?"checked":""}}> iPhone </label> 
<input type="checkbox" name="devices[iPad]" value="1" {{(old('devices') !== null && array_key_exists("iPad", old('devices')) ||array_key_exists("iPad", $savedDevices))?"checked":""}}> iPad </label> 

Antwort

-1

Versuchen Sie, diese

<?php $old_devices = old('devices', []); ?> 

<input type="checkbox" name="devices[Android Phone]" value="1" {{array_key_exists("Android Tablet", $old_devices) || array_key_exists("Android Tablet", $savedDevices) ? "checked":""}}> Android Phone </label> 
+0

ich habe versucht, es eine Ausnahme auslösen, wenn alte diese nicht existiert, warum ich mich überprüfen f es existiert –

+0

seltsam der alte Helfer nie Ausnahme werfen, wenn eine Eingabe nicht existiert, wird es Null https://laravel.com/docs/5.2/requests#old-input –

+0

was ist die Version von Laravel, die Sie verwenden ? –

0

Wenn Ihr entschlüsselten json unten sein kann, wie dann

$savedDevices = [ 
    'phone' =>'yes', 
    'tablet' => 'yes', 
    'iphone' => 'no' 
        ] 

<label> 
      Phone :<input type="checkbox" 
     {{($savedDevices->phone == "yes") ? "checked":"" }} name="phone"> 
    Tablet :<input type="checkbox" 
      {{($savedDevices->tablet == "yes") ? "checked":"" }} name="tablet"> 
Iphone :<input type="checkbox" 
      {{($savedDevices->iphone == "yes") ? "checked":"" }} name="iphone"> 
    </label> 

Nach oben $ savedDevices Daten ersten beiden Kontrollkästchen aktiviert werden, weil der Wert = yes und Das Kontrollkästchen "iphone" ist deaktiviert, da sein Wert ungleich "ja" ist.

jetzt, wenn Sie die Werte von Smartphone und Tablet zu ändern, die Boxen deaktivieren und die Werte

+0

Danke, das Problem wie Um den alten Wert während der Validierung beizubehalten, zeigt diese Lösung nicht den alten Wert an –

+0

Erstellen Sie das Formular oder aktualisieren Sie das Formular –

+0

wenn (! $ validator-> passes()) { return redirect() -> zurück() - > withInput ($ request-> all()) -> withErrors ($ validator-> errors()); } –

0

einreichen, wenn Sie withInput ($ request-> alle()) verwenden, dann alt können in Formen verwendet werden. In Ihrem Controller

$validator = \Validator::make($data, Distributors::rules($request->id)); 
if (!$validator->passes()) { 
      return redirect()->back()->withInput($request->all())->withErrors($validator->errors()); 
    } 

in Formen

$savedDevices = [ 
    'phone' =>'yes', 
    'tablet' => 'yes', 
    'iphone' => 'no' 
        ] 

<label> 
      Phone :<input type="checkbox" 
     {{(old('phone') == 'yes') ? "checked":"" }} name="phone"> 
    Tablet :<input type="checkbox" 
      {{(old('tablet') == "yes") ? "checked":"" }} name="tablet"> 
Iphone :<input type="checkbox" 
      {{(old('iphone') == "yes") ? "checked":"" }} name="iphone"> 
    </label> 

Hinweis: in alten ('Namen Sie das Kontrollkästchen verwenden müssen')

0
  1. -> Erst wenn Sie bearbeiten Update klicken Sie auf Lasten formulieren.
  2. -> Dann, nachdem die Form, alter Eingang Laden ist null, so Datenbankwert geprüft
  3. -> nach dem Absenden des Formulars, wenn die Validierung damals Umleitung nicht mit altem Eingang
Phone :<input type="checkbox" 
       @if(old('phone') !=null) 
      {{(old('phone') == 'on') ? "checked":"" }} 
       @else 
      {{($savedDevices->tablet == "on") ? "checked":"" }} 
    @endif 
    name="phone"> 
zu bilden
+0

Diese Lösung funktioniert sicher, mein Punkt ist, können wir Array-Geräte [Android Phone] statt jedes Element allein verwenden. Ich möchte nicht viel Zeit damit verbringen, aber ich frage mich nur –

0

Hier ist, was für mich gearbeitet

<?php $savedDevices = json_decode(Auth::user()->devices, true);?> 
          {{$checked = ""}} 
          <!-- Check if it is a post back--> 
          <?php $postBack = old()?> 
          @if(empty($postBack)) 
           <!-- First Request, get data from the DB --> 
           @if(array_key_exists('Android Phone',$savedDevices)) 
            <?php $checked = "checked";?> 
           @endif 
          @else 
           <!-- Update attempt has happend --> 
           @if(array_key_exists('Android Phone',old('devices',[]))) 
            <?php $checked = "checked";?> 
           @else 
            <?php $checked = "";?> 
           @endif 
          @endif 
         <label> 
          <input type="checkbox" name="devices[Android Phone]" value="1" {{$checked}} > Android Phone </label> 
Verwandte Themen