2016-04-15 16 views
0

Ich habe ein Formular, das eine Liste von Kontrollkästchen hat, die beim Einfügen in die Datenbank sowie beim Bearbeiten ausgefüllt werden. Beim Editieren versuche ich die Felder mit einer Liste von Feldern aus der Datenbank zu füllen, die in der $groups Variable liegt und der geprüfte Wert wird gegen die group_id von Gruppen mit der group_id von der $user geprüft. Es funktioniert, außer dass es nur ein Kontrollkästchen ausfüllt und einige Benutzer zu mehreren Gruppen gehören. Irgendwelche Ideen oder effizientere Wege, dies zu tun.Hinzufügen von checked Variablen aus der Datenbank mit Feldern aus der Datenbank sowie

Heres mein Code so weit

<?php foreach($groups as $group) : ?> 
    <?php foreach ($user['groups'] as $uG) { 
     if ($uG['group_id'] == $group['id']) { 
      $checked = "checked"; 
     } else { 
      $checked = ''; 
     }    
    }?> 

    <div class="checkbox"> 
     <label for="group_id-<?php echo $group['id']; ?>"> 
      <input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>"> 
      <?php echo $group['name']; ?> 
     </label> 
    </div>   
<? endforeach; ?> 

Antwort

2

Dieses Problem ist, dass Sie alle $users['group'] Array suchen und nicht zu stoppen, wenn Sie ein Spiel finden, so es sei denn letzten $uG['group_id'] Matches $group['id'] Sie weiter und daher klar $checked nach potenziell es einstellen.

Fügen Sie einfach eine break hinzu, wenn Sie eine Übereinstimmung finden.

Auch offiziell der richtige Weg, die überprüft Status der Einstellung ist checked="checked" obwohl die meisten modernen Browsern nicht so pedantisch sind, ihre möglicherweise besser an die HTML-Spezifikation zu halten

<?php foreach($groups as $group) : ?> 
    <?php 
    $checked = ''; 
    foreach ($user['groups'] as $uG) { 
     if ($uG['group_id'] == $group['id']) { 
      $checked = 'checked="checked"'; 
      break; 
     }    
    }?> 

    <div class="checkbox"> 
     <label for="group_id-<?php echo $group['id']; ?>"> 
      <input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>"> 
      <?php echo $group['name']; ?> 
     </label> 
    </div>   
<? endforeach; ?> 

Sie auch einen ternären Operator verwenden könnte und in_array() das alles

in einer einfachen Aussage tun
<?php 
    foreach($groups as $group) : 
     $checked = in_array($group['id'], $user['groups']) ? 'checked="checked"' : ''; 
?>  
    <div class="checkbox"> 
     <label for="group_id-<?php echo $group['id']; ?>"> 
      <input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>"> 
      <?php echo $group['name']; ?> 
     </label> 
    </div>   
<? endforeach; ?> 
1

$checked = ''; zuerst, dann Schleife definieren und ändern Sie den Wert, wenn Spiel

gefunden
<?php foreach($groups as $group) : ?> 
    <?php 
    $checked = ''; 
    foreach ($user['groups'] as $uG) { 
     if ($uG['group_id'] == $group['id']) { 
      $checked = "checked"; 
     }    
    }?> 

    <div class="checkbox"> 
     <label for="group_id-<?php echo $group['id']; ?>"> 
      <input <?php echo $checked; ?> type="checkbox" name="group_id[]" id="group_id-<?php echo $group['id']; ?>" value="<?php echo $group['id']; ?>"> 
      <?php echo $group['name']; ?> 
     </label> 
    </div>   
<? endforeach; ?>