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!!
php select option pdo
Commentami!