Maison  >  Questions et réponses  >  le corps du texte

Vous recherchez une manière plus élégante d'attribuer l'attribut "selected" à un élément <input> précédemment sélectionné

Je crée une application CRUD simple en utilisant PHP. Sur la page de création, il existe un menu déroulant qui permet à l'utilisateur de sélectionner le type d'autoroute pour lequel il souhaite saisir des informations. Sur la page de mise à jour, je souhaite conserver les sélections effectuées par l'utilisateur sur la page de création. La valeur sélectionnée par l'utilisateur est stockée dans un objet JSON local. J'ai trouvé la solution suivante :

<select name="route-type" id="route-type" required>

<option value="" selected="true" disabled>What type of route is this?</option>

<?php if( $highway['type'] == 'interstate') { ?>

<option value="interstate" selected>Interstate</option>
<option value="us-route">US Route</option>
<option value="state-route">State Route</option>

<?php } elseif ( $highway['type'] == 'us-route') { ?>
                
<option value="interstate">Interstate</option>
<option value="us-route" selected>US Route</option>
<option value="state-route">State Route</option>

<?php } elseif ( $highway['type'] == 'state-route') { ?>

<option value="interstate">Interstate</option>
<option value="us-route">US Route</option>
<option value="state-route" selected>State Route</option>

<?php } ?>

Le problème est que cela semble plutôt répétitif et doit être refactorisé ou réécrit d'une manière ou d'une autre. Aucune suggestion? Évidemment, s'il y a 30 choix dans la liste déroulante, alors il n'est pas correct d'avoir 30 résultats possibles dans l'instruction if.

P粉635509719P粉635509719300 Il y a quelques jours394

répondre à tous(1)je répondrai

  • P粉627136450

    P粉6271364502024-01-17 19:18:26

    Voici une solution (non testée) :

    $options = [
      'interstate' => 'Interstate',
      'use-route' => 'US Route',
      'state-route' => 'State Route'
    ];
    
    foreach($options as $k=>$v) {
      echo "<option value=\"$k\"" . ($k===$highway['type']?'selected':'') . " />$v</option>\n";
    }
    

    répondre
    0
  • Annulerrépondre