O que você tem a fazer são os 2 select, de acordo com a opção escolhida no primeira, a lista do segundo se altera, depois de selecionar o último você envia o formulário passando o valor da subcategoria selecionada. Vamos começar:
<script language="javascript">
var arrayData = new Array();
<?php
$a = 0;
$consulta2 = @mysql_query("SELECT * FROM `tabela_subcategorias` ORDER BY categoria ASC");
while ( $l = @mysql_fetch_array($consulta2) ) {
echo 'arrayData[' . $a ."] = '" . $l['categoria'] . '|' . $l['nome'] . '|' . $l['codigo']. "';" . chr(10);
$a++;
}
?>
function populateData( name ) {
select = window.document.forms[0].subcategoria;
string = "";
count = 0;
select.options.length = count;
for( i = 0; i < arrayData.length; i++ ) {
string = arrayData[i].split( "|" );
if( string[0] == name ) {
select.options[count++] = new Option( string[1], string[2] );
}
}
}
</script>
Acima é um java script para criar o segundo select. A consulta busca na tabela de subcategorias. E gera um javascript da seguinte maneira:
arrayData[0] = '1|Subnome|1';
arrayData[1] = '1|Subnome|2';
arrayData[2] = '1|Subnome|3';
arrayData[3] = '2|Subnome|4';
arrayData[4] = '2|Subnome|5';Dessa forma, vamos poder dividi-lo por categoria depois. Agora nosso primeiro select (categorias) fica da seguinte forma:
<select name="categoria" onChange='java script:populateData( this.options[selectedIndex].value )'>
<?php
$consulta = mysql_query("SELECT * FROM `categorias` ORDER BY nome ASC");
while( $row = mysql_fetch_array($consulta) ) {
?>
<option value="<?php echo $row['codigo']; ?>"><?php echo $row['nome']; ?></option>
<?php
}
?>
</select>
Essa simplesmente gera um select com a lista de campos de acordo com o conteudo da tabela, mas repare que ele tem uma função onChange, ou seja, ao mudar o valor do select ele executa essa função, alterando os dados do segundo select.
Por fim, o segundo select ficará dessa forma:
<select name="subcategoria"></select>
O que irá acontecer com tudo isso? Lembra da forma que montamos o javascript?
arrayData[0] = '1|Subnome|1';
Isso é: 1= Código da categoria, Subnome = nome que vai ser apresentado dentro do select de subcategorias, 1= código da subcategoria. Ao selecionar o primeiro select, ele apresenta somente aqueles que tiverem essa primeira parte (1) igual ao valor do select escolhido. Depois é só enviar o formulário pegando o valor da subcategoria pelo $_POST['subcategoria'].
Deve ter ficado um pouco complicado a primeira vista, qualquer dúvida, só reclamar