RISOLTO!
Ora funziona perfettamente.
Se qualcuno avesse bisogno vi trascrivo il codice con la relativa struttura del database necessaria.
PS: mi resta solo un dubbio sulla prima select e su come funzioni la scelta dell'array da utilizzare per popolare le provincie dopo aver scelto la regione. Il codice cosi com'è funziona correttamente ma secondo me è rivedibile...
Struttura DB:
TBL_REGIONI (id_regione, regione, stato_id)
TBL_PROVINCIE (sigla, provincia, regione_id)
TBL_CITTA (id_citta, citta, sigla_prov)
codice:
<form name="ins">
<select name="id_regione" onChange="riempi_prov(this.options.selectedIndex)">
<?php
$query = "SELECT * FROM tbl_regioni ORDER BY regione";
$result=mysql_query($query);
echo "<option value=''> </option>";
while($row=mysql_fetch_array($result)){
echo "<option value='" . $row['id_regione'] . "'>" . $row['regione'] . "</option>";
}
?>
</select>
<select name="provincia" onChange="riempi_citta(this.options.value)">
<option value="...">...</option>
</select>
<select name="citta">
<option value="...">...</option>
</select>
</form>
<SCRIPT>
var prov=new Array();
var sigle=new Array();
<?
$query = "SELECT * FROM tbl_regioni ORDER BY regione";
$result=mysql_query($query);
$counter=1;
while($row = mysql_fetch_array($result)) {
$query2 = "SELECT * FROM tbl_provincie WHERE regione_id=" . $row['id_regione'] . " ORDER BY provincia";
$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['provincia'].'"';
$str_sigla.='"'.$row2['sigla'].'"';
$counter2++;
}
echo "prov[" . $counter . "]=new Array(" . $str_prov . ") \n";
echo "sigle[" . $counter. "]=new Array(" . $str_sigla . ") \n";
$counter++;
}
?>
function riempi_prov(source) {
with (document.ins.provincia) {
//svuoto la select prima di ripopolarla
num_option=options.length;
if (num_option != null) {
for(a=num_option;a>=0;a--){
options[a]=null;
}
}
options[0]=new Option("...","");
for (i=1;i<=prov[source].length;i++)
options[i]=new Option(prov[source][i-1],sigle[source][i-1])
options.selectedIndex=0;
}
}
</SCRIPT>
<script language="javascript">
var citta=new Array();
var idcitta=new Array();
<?
$query = "SELECT * FROM tbl_provincie ORDER BY provincia";
$result=mysql_query($query);
$counter=1;
while($row = mysql_fetch_array($result)) {
$query2 = "SELECT * FROM tbl_citta WHERE sigla_prov='" . $row['sigla'] . "' ORDER BY citta";
$result2=mysql_query($query2);
$counter2=1;
$str_citta= '"' . $row['sigla'] . '"';
$str_idcitta= '"' . $row['sigla'] . '"';
while($row2=mysql_fetch_array($result2)){
if($counter2>0){
$str_citta.=",";
$str_idcitta.=",";
}
$str_citta.='"'.$row2['citta'].'"';
$str_idcitta.='"'.$row2['id_citta'].'"';
$counter2++;
}
echo "citta[" . $counter. "]=new Array(" . $str_citta . ") \n";
echo "idcitta[" . $counter. "]=new Array(" . $str_idcitta . ") \n";
$counter++;
}
?>
function riempi_citta(source) {
var trovato;
var j;
// ricava l'indice dell'array tenendo conto che in posizione [j][0]
// c'è il valore passato dalla select precedente (in questo caso la sigla della prov.)
trovato = false;
j = 1;
while (trovato == false) {
if (citta[j][0] == source)
trovato = true;
j++;
}
j = j-1;
//popolo la select option
with (document.ins.citta) {
//svuoto la select prima di ripopolarla
num_option=options.length;
if (num_option != null) {
for(a=num_option;a>=0;a--){
options[a]=null;
}
}
options[0]=new Option("...","");
for (i=1;i<=citta[j].length;i++)
options[i]=new Option(citta[j][i],idcitta[j][i])
options.selectedIndex=0;
}
}
</SCRIPT>