Ciao a tutti. Alla millesima volta che mi son trovato a dover creare una select html dinamica con dati prelevati da mysql, ho deciso di creare una piccola funzione in php che mi permetta di utilizzarla anche in altri casi. Finchè si tratta di creare una semplice lista è tutto ok, il difficile arriva quando devo andare ad aggiornare i dati nel db e che quindi, dopo aver letto la scelta precedente dal db, la select deve avere una delle opzioni selezionate (<option value="3" selected>). La select html la creo facendo una semplice SELECT sulla tabella anagrafica_aziendale, tirando fuori i campi "id_azienda" e "ragione_sociale" (<option value="3">Pippo S.r.L</option>). Morale della favola, io richiamo la stessa funzione 2 volte, nello stello modulo. La prima select funziona, mentre la seconda non va la cosa di selezionare di default l' opzione e non capisco perchè. Vediamo i 2 casi separati:
1° caso:
Tabelle e campi interessati:
ddt (id_ddt, id_vettore_ddt)
anagrafica_azienda(id_azienda, ragione_sociale)
Questo codice è per richiamare la funzione passandogli le stringhe SQL che cercheranno nel db che servono per comporre la select html dove devo elencare delle ditte di trasporto e, nel caso l' utente sia in modalità "update", rendere "selected" una delle opzioni in base all' id dell' azienda che si trova come chiave esterna anche nella tabella ddt (Nel ciclo FOR vengono create le varie OPTION e se ddt.id_id_vettore_ddt = anagrafica_aziendale.id_azienda creo l' attributo "selected" nel tag OPTION)
Codice PHP:
/* metto in una variabile la stringa SQL che passerò alla funzione per trovare anagrafica_aziendale.id_azienda (l' id dell' azienda) ed anagrafica_aziendale.ragione_sociale (l' etichetta) */
$select_query_1 = "SELECT id_azienda, ragione_sociale
FROM anagrafica_aziendale
WHERE type_azienda = 'v'";
/* creo un' altra variabile con una seconda stringa SQL che trova l' id dell' azienda nella tabella "ddt", il quale verrà utilizzato nel ciclo FOR per capire quale delle OPTION dovrà essere selezionata */
$find_id_1 = "SELECT id_vettore_ddt FROM ddt WHERE id_ddt =".$_SESSION['id_ddt'];
//Richiamo la funzione
f_crea_select_da_db("lista_vettori", $select_query_1, $find_id_1, "id_vettore_ddt");
Questa è la funzione:
Codice PHP:
/*
Variabili da passare alla funzione:
$select_name: è il nome della select (<select name=$select_name>
$select_query: codice sql per trovare l' etichetta della opzione(<option>Etichetta</option>)
$find_id: è un' altra stringa sql che va a prelevare l' id
$column_name: è il nome della colonna dove si trova l' id
*/
function f_crea_select_da_db($select_name, $select_query, $find_id, $column_name){ //eseguo la query per trovare id azienda e ragione sociale nella tabella "anagrafica_aziendale" $result = mysql_query($select_query);//sql passato alla funzione
$num = mysql_num_rows($result);
if ($num > 0) { //Inizializzo la variabile per l' attributo "selected"
$selected = Null;
//Creo il tag SELECT
echo '<select name="'.$select_name.'">';
//Creo un ciclo FOR per creare le opzioni della SELECT
for($x=0; $x<$num; $x++)
{
//trovo il valore da mettere nell' option e la relativa etichetta
$row = mysql_fetch_row($result);
$id_option = $row[0]; //recupera l' id che si trova nella prima colonna $etichetta = $row[1]; //recupera l' etichetta
//se deve aggiornare i dati creo l' attributo "selected"
if ($_SESSION["carico_mode"] == "update")
{
//trovo l' id nell' altra tabella per equipararlo all' altro $result_id = mysql_query($find_id);//sql passato alla funzione $row_id = mysql_fetch_array($result_id);
//se ddt.id_vettore_ddt è = a anagrafica_aziendale.id_azienda //creo l' attributo html "selected" if ($row_id[$column_name] == $row[0])
{ $selected = "selected"; } }
//creo il tag OPTION
echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>"; }
//chiudo la select
echo '</select>';
}
}
Quindi ricapitolando quello che ho postato fino ad ora funziona perfettamente. Il problema arriva quando nello stesso modulo devo richiamare la stessa funzione per creare un' altra select ma con dati diversi in tabelle diverse:
2° caso
Tabelle e campi interessati:
anagrafica_aziendale (id_azienda, ragione_sociale) (come prima)
carico_materiali (codice, id_azienda_out)
Codice PHP:
$select_query_2 = "SELECT id_azienda, ragione_sociale FROM anagrafica_aziendale";$find_id_2 = "SELECT id_azienda_out
FROM carico_materiali
WHERE codice ='".$_SESSION['codice_blocco']."'";
f_crea_select_da_db("lista_aziende", $select_query_2, $find_id_2, "id_azienda_out");
Cioè in pratica la funzione funziona nel primo caso ma non funziona nel secondo, che non risolve la parte della creazione dell' attributo selected, o meglio, lo crea in tutte le option anche se ho verificato che i valori sono giusti ed ad ogni ciclo fa l' equiparazione...se 3=1 $selected="selected"...se 3=2 $selected="selected"...se 3=3 $selected="selected"...e cosi via...
Tante grazie a chi mi helpa