Lato PHP:
supponiamo che tu debba fare un sottomenu a 3 livelli, il classico regione -> provincia -> citta'
La select regione te la fai a mano. Poi devi fare script separati, uno che ti genera o la select completa della provincia oppure l'elenco delle provincie, e l'altro per le citta': tipicamente saranno qualcosa del tipo:
province.php?regione=nomeregione
e
comuni.php?provincia=nomeprovincia
Ripeto: questi due devono restituire solo il componente SELECT oppure l'elenco in qualche formato tuo (es: citta1|citta2|citta3).
Il resto e' da fare via Javascript attraverso la manipolazione del DOM e l'oggetto XMLHttpRequest. Non e' di pertinenza di questo forum ma essenzialmente devi fare qualcosa del genere
codice:
<select name="regione" id="regione" onchange="updateProvince()">
<option>..</option>
</select>
<select name=province" id="province" onchange="updateCitta()">
<option>..</option>
</select>
<select name="citta" id="citta">
<option>..</option>
</select>
A questo punto dovrai farti due funzioni updateProvince() e updateCitta() che rispettivamente chiamano via XMLHttpRequest le pagine province.php e citta.php.
La struttura sara' qualcosa del genere:
codice:
function updateProvince() {
// crea oggetto xmlhttp
var regione = document.getElementById('regione');
// imposta url a "province.php?regione=" + regione.value;
// imposta funzione di callback alla funzione sotto
// invia richiesta
}
funzione funzioneDiCallback(response) {
var provinceSelect = document.getElementById('province');
// parsing della risposta in base al formato che hai deciso
// aggiornamento della select.
}
La parte javascript non e' banalissima e richiede una certa conoscenza dell'XMLHttpRequest. Ti consiglio di chiedere sul forum di Javascript.