Option selected in PHP

Mattepuffo's logo
Option selected in PHP

Option selected in PHP

Penso che più o meno tutti conosciate i tag select e option in HMTL:

<select>
   <option value="volvo">Volvo</option>
   <option value="saab">Saab</option>
   <option value="mercedes">Mercedes</option>
   <option value="audi">Audi</option>
</select>

I classici tag per creare liste.

Qui vi spiego come riempire una lista prendendo i dati da un db e come fare per selezionare una voce specifica tramite l'attributo selected.

Prima di tutto avremo una funzione che esegue la query:

function selectAuthor() {
  global $config;
  $result = array();
  try {
   $result = $config->getPdo()->query("CALL getAuthor()");
   return $result;
  } catch (PDOException $e) {
   $error = $e->getMessage() . "<br/>";
   return $error;
   die();
  }
}

La query è eseguita con PDO; da qualche parte avremo i arametri di configurazione.

getPdo() è seolo il metodo get per recuperare l'istanza di PDO; qui nn ci interessa più di tanto.

Nella pagina avremo una cosa del genere:

<select name="txtAuthor">
  <option value="*">*</option>
  <?php
  foreach (selectAuthor () as $rowAuthor) {
   echo "<option value='" . $rowAuthor['author_id'] . "'>" . $rowAuthor['author_name'] . "</option>";
  }
  ?>
</select>

Così la lista è riempita.

Adesso supponiamo che questa pagina contenga un form per la modifica dei dati.

Lo scenario è questo: in una pagina avremo un link del genere

echo '<td><a href="index.php?action=modify&id=' . $row['book_id'] . '&t=' . urlencode($row['title']) . '&a=' . $row['author_name'] . '&e=' . $row['editor_name'] . '&p=' . $row['price'] . '&i=' . $row['isbn'] . '&n=' . $row['note'] . '">Modifica</a></td>';

che passa determinati valori in GET.

Quando arriviamo alla pagina modifica.php la lista deve essere piena, ma la voce selezionata deve essere uaguale a quella passata in GET; tra i valori passati quello che ci serve qui è &a=' . $row['author_name'].

Nella pagina dove c'è la lista controlleremo quando il valore della lista è uguale a quello passato e lo salveremo in una variabile in modo che sia la voce selezionata.

Più facile a farlo che a dirlo:

<select name="txtAuthor">
  <option value="*">*</option>
  <?php
  foreach (selectAuthor () as $rowAuthor) {
   $authorSelected = "";
   if ($rowAuthor['author_name'] == $_GET['a']) {
     $authorSelected = "selected='selected'";
   }
  echo "<option value='" . $rowAuthor['author_id'] . "' $authorSelected>" . $rowAuthor['author_name'] .    "</option>";
   }
  ?>
</select>

Attenti a come è inizializzata la variabile: $authorSelected = "";

Questo è fonamentale perchè sennò avremo sempre l'ultimo valore selezionato.

Così facendo quando la condizione dell'if è verifiacata $authorSelected è valorizzato per quel valore e svuotato per gli altri.

 

Grazie a mega_saiyan per la dritta!!


Condividi

Commentami!