FILE INDEX.PHP
Codice PHP:
<form action="clienti/form_esercizi.php" method="post" name="form">
<
fieldset>
<
label for="province">province</label>

<
select name="nomeprovince" id="province" onChange="loadList('comuni', getSelected(this))" >
</
select>

<
label for="comuni">comuni</label>

<
select name="nomecomuni" id="comuni" onChange="loadList('cap', getSelected(this))">
</
select>

<
label for="cap">cap</label>

<
select name="nomecap" id="cap">
</
select>

<
input type="submit" name="submit" value="Invia" />
</
fieldset>
</
form>

<
script type="text/javascript">
//<![CDATA[
loadList('province'0);
//]]>
</script> 
FILE LISTS.JS
Codice PHP:
var xmlHttp getXmlHttpObject();

function 
loadList(tbid){
xmlHttp.open('GET''request.php?table='+tb+'&id='+idtrue);
xmlHttp.onreadystatechange stateChanged;
xmlHttp.send(null);
}
function 
addOption(selectvaluetext) {
    
//Aggiunge un elemento <option> ad una lista <select>
    
var option document.createElement("option");
    
option.value value,
    
option.text text;
    try {
        
select.add(optionnull);
    } catch(
e) {
        
//Per Internet Explorer
        
select.add(option);
    }
}
function 
getSelected(select) {
    
//Ritorna il valore dell'elemento <option> selezionato in una lista
    
return select.options[select.selectedIndex].value;
}
function 
stateChanged() {
    if(
xmlHttp.readyState == 4) {
        
//Stato OK
        
if (xmlHttp.status == 200) {
            var 
resp xmlHttp.responseText;
            
            if(
resp) {
                
//Le coppie di valori nella striga di risposta sono separate da ;
                
var values resp.split(';');
                
//Il primo elemento è l'ID della lista.
                
var listId values.shift();
                var 
select document.getElementById(listId);
                
//Elimina i valori precedenti
                
while (select.options.length) {
                    
select.remove(0);
                } 
                
                if(
listId == 'province') {
                    
addOption (select0'-- Seleziona la provincia --');
                }
                if(
listId == 'comuni') {
                
addOption (select0'-- Seleziona il comune --');
                }

                var 
limit values.length;
                
                for(
i=0limiti++) {
                    var 
pair values[i].split('|');
                    
//aggiunge un elemento <option>
                    
addOption(selectpair[0], pair[1]);
                }
            }
        } else {
            
alert(xmlHttp.responseText);
        }
    }
}

function 
getXmlHttpObject()
{
  var 
xmlHttp=null;
  try
    {
    
// Firefox, Opera 8.0+, Safari
    
xmlHttp=new XMLHttpRequest();
    }
  catch (
e)
    {
    
// Internet Explorer
    
try
      {
      
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (
e)
      {
      
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
  return 
xmlHttp;

FILE REQUEST.PHP
Codice PHP:
<?php
require 'dbconfig.php';
$conn mysql_connect(DB_HOSTDB_USERDB_PASSWORD) or die;
mysql_select_db(DB_NAME) or die;
//I valori in input vanno verificati
//id deve essere un valore numerico
$pid = (int)$_REQUEST['id'];
//maschera  eventuali caratteri speciali in table 
$tb mysql_real_escape_string($_REQUEST['table'], $conn);

switch(
$tb) {
    case 
'province':
        
$sql="SELECT id, nome FROM `$tb` ORDER BY nome";
        break;
    case 
'comuni':
        
$sql="SELECT id, nome FROM `$tb` WHERE id_province=$pid ORDER BY nome";
        break;
    case 
'cap':
        
$sql="SELECT id, nome FROM `$tb`WHERE id_comuni=$pid";
        break;
}
//Il primo elemento della risposta è il nome della tabella (= attributo ID del tag select)
$out="$tb;";
if(
$result mysql_query($sql$conn)) {
    while (
$row mysql_fetch_row($result)) {
        
$out .= $row[0] . '|' $row[1] . ';';
    }
}
//Rimuove il carattere ; in coda
echo rtrim($out';');
?>
PER FUNZIONARE FUNZIONA, MA MI PASSA GLI ID DEI CAMPI DEL DATABASE E NON I NOMI,
PERCHE'?