select regioni-provincie con javascript, php e mysql

Avevo bisogno di un sistema che alla selezione di una regione aggiornasse il menu a tendina della provincia. Cercando in rete ho trovato un pò di cose che ho messo insieme.

Innanzitutto un dump di mysql con le tabelle con le regioni e le provincie italiane, e con le opportune relazioni:

scarica qui il dump mysql file perso durante un trasferimento…

poi bisogna creare le 2 select

quella della regione prende i dati da mysql e chiama la funzione javascript che valorizzerà la provincia:

[php]
<select name="id_regione" onChange="Riempi(this.options.selectedIndex)">
<?php
$query = "SELECT * FROM regioni WHERE 1 ORDER BY nomeregione";
$result=mysql_query($query);
echo ‘<option value=""> </option>’;
while($row=mysql_fetch_array($result)){
echo ‘<option value="’.$row[‘id_regione’].’">’.$row[‘nomeregione’].'</option>’;
}
?>
</select>
[/php]

La select della provincia invece la lascio vuota perchè sarà riempita dal javascript:

[php]
<select name="id_provincia">
<option> </option>
<option> </option>
<option> </option>
<option> </option>
<option> </option>
<option> </option>
<option> </option>
</select>
[/php]

Ho inserito nell’esempio 7 campi option vuoti per risolvere un problema di Netscape, (non riesce a creare nuovi fields nelle select, almeno così dicono in rete, io non ho provato). Per tutti gli altri browser è sufficiente creare la select vuota.

A questo punto manca il javascript, che va costruito interrogando il db nuovamente per creare gli array utilizzati per valorizzare la select della provincia:

[php]
<SCRIPT>
<!–
var prov=new Array();
var sigle=new Array();
<?php
$query = "SELECT * FROM regioni WHERE 1 ORDER BY nomeregione";
$result=mysql_query($query);
$counter=1;
while($row=mysql_fetch_array($result)){
$query2 = "SELECT * FROM province WHERE id_regione = ".$row[‘id_regione’]." ORDER BY nomeprovincia";
$result2=mysql_query($query2);
$counter2=0;
$str_prov="";
$str_sigla="";
while($row2=mysql_fetch_array($result2)){
if($counter2>0){ $str_prov.=","; $str_sigla.=","; }
$str_prov.=’"’.$row2[‘nomeprovincia’].’"’;
$str_sigla.=’"’.$row2[‘id_provincia’].’"’;
$counter2++;
}
echo "prov[".$counter."]=new Array(".$str_prov.") n";
echo "sigle[".$counter."]=new Array(".$str_sigla.") n";
$counter++;
}
?> function Riempi(source)
{
with (document.ins.id_provincia)
{
while (options.length > 0)
options[0]=null;
for (i=0;i<prov[source][/source].length;i++)
options[i]=new Option(prov[source][/source][i],sigle[source][/source][i])
options.selectedIndex=0;
}
}
//–>
</SCRIPT>
[/php]

E questo è tutto!

8 thoughts on “select regioni-provincie con javascript, php e mysql

  1. Luca says:

    Ciao, che tu sappia ci sono limitazioni nel numero di campi contenuti nell’array? Tu in pratica pre-carichi degli array e questo finche si tratta di regioni-provincie funziona bene. Nel mio caso però devo fare anche il terzo step ovvero quello delle provincie-citta.
    In questo caso io dovrei andare a precaricare due array: id_citta e citta. ciascuno di questi due array conterrà un numero di inserimenti pari al numero dei comuni italiani (circa 8000). Facendo del debug e osservando il codice html generato vedo che invece il riempimento si ferma all’id citta = 107. Hai qualche idea?

  2. admin says:

    Che io sappia non ci sono limitazioni, ma non l’ho testato in questa maniera, e se vedi nell’html delle limitazioni potrebbe essere…
    Hai provato a controllare con diversi browser? se c’è una limitazione è sicuramente diversa da browser a browser, se invece il comportamento è identico potrebbe essere altrove il problema

  3. raging says:

    ciao grazie per il codice che hai postato mi è utilissimo però non riesco a scaricare il dump mysql, potresti rimetterlo online? grazie

  4. Francesca says:

    scusate, posso una domanda??? a me lo script non funziona…..probabilmente è un problema di javascript….perchè mi carica tutta la pagina senza errori

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *