Mira, te pongo mi código y a ver si sacas algo en claro (Nótese que uso php dentro de javascript):
Código PHP:
<script>
<?
/*
(Para hacerte una idea)
Tabla empresas:
id - nombre
1 - empresa1
2 - empresa2
_________________
Tabala empresas2:
id - id_emp - anyo - dir
1 - 1 - 2003 - EMP103
2 - 1 - 2004 - EMP104
3 - 2 - 2003 - EMP203
4 - 2 - 2004 - EMP203
*/
$sql="SELECT * FROM empresas";
$rsemp=mysql_query($sql);
$empresas=mysql_fetch_array($rsemp);
$primera_emp=$empresas[id];
$sql="SELECT * FROM empresas";
$rsemp=mysql_query($sql);
$cont=1;
//defino una serie de varibles Array para cada empresa
while($empresas=mysql_fetch_array($rsemp))
{
$sql="SELECT * FROM empresas2 where id_emp=$empresas[id] order by anyo asc";
$rsemp2=mysql_query($sql);
$cadena= "var empresas_$cont=new Array(";
while($empresas2=mysql_fetch_array($rsemp2))
{
$cadena.= "\"$empresas2[anyo]\", ";
}
$cadena .= ")\n";
//Para eliminar la última coma
$tam=strlen($cadena);
$tam=$tam-4;
$cadena[$tam]=" ";
//
echo $cadena;
$cont++;
}
?>
//función que cambia los años del select de anyos en función de la empresa que se haya escogido en el select de empresa.
function cambia_anyos(){
//tomo el valor del select de la empresa elegida
var empresa
empresa = document.f1.empresa[document.f1.empresa.selectedIndex].value
//miro a ver si la empresa está definida
if (empresa != 0) {
//si estaba definida, entonces coloco las opciones de los años correspondientes.
//selecciono el array de anyos adecuado
mis_anyos=eval("empresas_" + empresa)
//calculo el numero de anyos
num_anyos = mis_anyos.length
//marco el número de anyos en el select
document.f1.anyos.length = num_anyos
//para cada anyo del array, lo introduzco en el select
for(i=0;i<num_anyos;i++){
document.f1.anyos.options[i].value=mis_anyos[i]
document.f1.anyos.options[i].text=mis_anyos[i]
<? if(!$anyos) $anyos=2000; ?>
if(document.f1.anyos.options[i].text==<? echo $anyos; ?>)
document.f1.anyos.selectedIndex=i
}
}else{
//si no había empresa seleccionada, elimino los anyos del select
document.f1.anyos.length = 1
//coloco un guión en la única opción que he dejado
document.f1.anyos.options[0].value = "-"
document.f1.anyos.options[0].text = "-"
}
//marco como seleccionada la opción primera de empresa
//document.f1.anyos.options[3].selected = true
}
</script>
En el primer select carga las empresas de la BD:
Código PHP:
<select name="empresa" id="empresa" class="formul" onchange="cambia_anyos()">
<?
$sql="SELECT * FROM empresas";
$rsemp=mysql_query($sql);
$cont=0;
while($empresas=mysql_fetch_array($rsemp))
{
?>
<option <? if($empresa==$empresas['id']) echo "selected"; ?> value="<? echo $empresas['id']; ?>"><? echo $empresas['nombre']; ?></option>
<?
}
?>
</select>
Y el segundo select, simplemente:
Código PHP:
<select name=anyos class="formul">
<option value="-" selected>-
</select>
Mira a ver si sacas algo en claro, es que entre que me da pereza explicarlo y que no tengo mucho tiempo ahora...
PD: Una putada que no salgan las sangrias
(acabo de descubrir el [PHP], que útil, oyes ;)) Ahora es más fácil de leer