Ma, se ho capito bene:
Con una query tiri fuori tutte le categorie e popoli un tag <SELECT>. A questo tag appiccichi un evento onchange che permette di popolare il secondo select, quello dei prodotti.
Questo può essere fatto in diversi modi
1- semplice - all'onchange chiami la funzione location.href dando come indirizzo la stessa pagina con un parametro aggiuntivo che indica la categoria selezionata (che ricavi sempre utilizzando il javascript). A questo punto la pagina viene ricaricata, leggi la categoria $_GET['ctg'] e usi questo valore per popolare il secondo select. Per il secondo select il codice è tipo
Codice PHP:
if(isset($_GET['ctg'])) {
 echo 
"<select>";
 
// query per popolarlo usando il dato $_GET['ctg']
 
echo "</select>";
}
else {
// nada, non avendo selezionato la categoia non ci sono prodotti da scegliere

2- invece che ricaricare tutta la pagina utilizzi le request AJAX per aggiornare solamente il secondo select, questo è meno immediato.

In ogni caso.. perchè all'interno di quella tabella metti sia id_categoria sia id_prodotto? cioè non è ridondante? voglio dire se un prodotto è per forza legato ad una categoria, conoscendo il prodotto si ha già l'informazione della categoria disponibile...
Magari continuo a non capire bene il problema..
Ciao