Ecco il codice che ho mandato anche a Kellog15, così serve a tutti:

index.php
(la pagina principale contenente le select. Potrebbe esseer anche in html, ma io ho preferito riempire i valori iniziali con PHP)
codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
	<title>Popolare select dinamiche con AHAH</title>

<script type="text/javascript">
function createRequestObj(){ // creo un'istanza XMLHttpRequest
	var re;
	var browser=navigator.appName;
	if (browser=="Microsoft Internet Explorer"){ // sniff browser
		re=new ActiveXObject("Microsoft.XMLHTTP");
	} else re=new XMLHttpRequest();
	return re;
}

var http=createRequestObj();

function popolaElemento(idElDaPopolare, paginaFonteDati, metodo, parametri){ // faccio una richiesta
	// alert(parametri); // debug
	var url=paginaFonteDati+"?" + parametri
	http.open(metodo, url , true)
	document.getElementById(idElDaPopolare).innerHTML="<select><option value=\"0\">caricamento in corso...</option></select>";
	http.onreadystatechange=function(){
		if (http.readyState==4 || http.readyState=="complete"){
			if (http.status == 200){
				document.getElementById(idElDaPopolare).innerHTML=http.responseText;
			} else {
				document.getElementById(idElDaPopolare).innerHTML="<select><option>ERRORE "+http.status+"</option></select>";
			}
		}
	}
	http.send(null);
}
</script>
</head>

<body>
<h1>Esempio</h1>

	<form action="pagina.php" method="get">
	
	<label for="provincia" class="home">provincia:</label>
	<select title="selezionare la provincia di appartenenza" name="provincia" id="provincia" onchange="javascript:popolaElemento('selectComune', '/popola.php', 'get', 'id_provincia='+this.value);">
	<option value="">-----Tutte-----</option>
	<?
	$strProvince="SELECT id_provincia, provincia FROM province";
	// connessione al db
	$connessione=mysql_connect("localhost", "%", "");
	$db=mysql_select_db("prova") OR DIE ("Impossibile connettersi al database");
	$risultati=mysql_query($strProvince, $connessione) OR DIE ("Impossibile eseguire la query");
	// scrivo la select per intero
	while ($rs=mysql_fetch_array($risultati)){
		echo "<option value=\"".$rs["id_provincia"]."\">".$rs["provincia"]."</option>";
	}
	?>
	</select>

	<label for="comune" class="home">comune:</label>
	<span id="selectComune">
		<select title="selezionare il comune di appartenenza" name="comune" id="comune">
		<option value="">-----Tutti-----</option>
		<?
		$strComuni="SELECT id_comune, comune FROM comuni";
		$risultati2=mysql_query($strComuni, $connessione) OR DIE ("Impossibile eseguire la query");
		while ($rs=mysql_fetch_array($risultati2)){
			echo "<option value=\"".$rs["id_comune"]."\">".$rs["comune"]."</option>";
		}
		$chiudi=mysql_close($connessione);
		?>
		</select>
	</span>
	
	</form>
	
</body>
</html>
popola.php
(è la pagina PHP con la quale index.php comunica via XMLHttpRequest: viene mandato l'id della provincia selezionata, popola.php esegue la query e restituisce i risultati sotto forma di select completa di option)
Codice PHP:
if (isset($_GET["id_provincia"])){
  
    
$strSQL="SELECT * FROM comuni";
    if (
is_numeric($_GET["id_provincia"]) AND $_GET["id_provincia"]>0$strSQL.=" WHERE id_provincia=".$_GET["id_provincia"];
    
$strSQL.=" ORDER BY comune";
    
// connessione al db
    
$connessione=mysql_connect("localhost""%""");
    
$db=mysql_select_db("prova") OR DIE ("Impossibile connettersi al database");
    
$risultati=mysql_query($strSQL$connessione) OR DIE ("Impossibile eseguire la query");
    
// scrivo la select per intero
    
echo "<select title=\"selezionare il comune di appartenenza\" name=\"comune\" id=\"comune\"><option value=\"0\">-----Tutti-----</option>";
    while (
$rs=mysql_fetch_array($risultati)){
        echo 
"<option value=\"".$rs["id"]."\">".htmlentities($rs["comune"])."</option>";
    }
    echo 
"</select>";
    
$chiudi=mysql_close($connessione);