A prescindere dalla struttura delle tabelle nel tuo database, il procedimento è lo stesso di quello che solitamente viene utilizzato per recuperare qualsiasi tipo di dato inviato attraverso un form. Nel tuo case ti basta controllare di volta in volta se sono state trasmesse oppure no le informazioni necessarie che ti permetteranno di procedere nell'esecuzione dello script. Esempio (pseudo-codice)...

Codice PHP:
<?php
/*
 controlla sia stata effettuata una scelta dalla prima select-box
 quella contenente l'id delle categorie dei prodotti, per intenderci 
*/

if(isset($_POST['cat_id'])) {
$cat_id $_POST['cat_id'];

/*
 recuperato in $cat_id l'id della categoria dei prodotti
 potrai fare una semplice query del tipo
 SELECT * FROM prodotti WHERE categoria = '$cat_id'
 e infine stampare i risultati in una nuova select box
 che si occuperà di inviare i dati alla pagina che andrà
 a recuperare il prezzo per il prodotto selezionato

 se non è stata selezionata nessuna categoria
 allora staperai a video la select-box interessata
*/ 
} else {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
CATEGORIE: <select name="cat_id" onChange="this.form.submit();">
<option value="1">Categoria1</option>
<option value="2">Categoria2</option>
<option value="3">Categoria3</option>
</form>
<?php
}
?>
non l'ho provato ma dovrebbe andare... Quello che realmente ti potrebbe tornare utile per eventuali altre select-box è questo evento onChange="this.form.submit(); che ti consente di inviare i dati alla stessa pagina e recuperare dinamicamente il contenuto che desideri. Alla fine, quando mostrerai l'ultima select, quella con i prodotti, potrai aggiungere un pulsante (type=submit) e indicare nell'action del form l'indirizzo della pagina che ti fornirà il prezzo per il prodotto selezionato.