yo la realize, para 3 combos. Cada q sucede un evento onChange mando a llamar a una funcion para recargar y cargar los nuevos valores, let's see....
Los datos son extraidos de una tabla categorias q contiene las categorias y subcategorias:
# Estructura de tabla para tabla `categoria`
CREATE TABLE categoria (
id int(4) unsigned NOT NULL auto_increment,
nombre varchar(50) default NULL,
nivel int(3) unsigned default '0',
relacion int(3) unsigned default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;
el
id, pues es el id de la categoria;
nombre, el nombre de la categoria;
nivel, a q nivel pertenece, o sea si carga dentro del primer select o el segundo o el ultimo;
relacion almacena el id de la categoria con la q esta relacionado esta subcategoria (para el caso de las categorias de nivel 1 no tienen relacion, obviamente), supongo esta claro; bueno hasta ahi la BD.
Procedan a cargar la BD con unos cuantos datos, ....
VAMOS AL SCRIPT
Código PHP:
<?
include("funciones.php");
$link=conecBD();
echo '
<table width="90%" border="0" cellspacing="0" cellpadding="0">
<form name="mx" method="post">
<tr align="center"><td width="33%">
<!------ Primer Select (s1) ---->
<input name="is1" type="hidden" value="',$is1,'">
<select name="s1" id="select1" class="prod" onChange="recarga(this.form);">';
$consulta=mysql_query("SELECT nombre, id FROM categoria WHERE nivel=1",$link);
if ($row=mysql_fetch_array($consulta))
{ echo '<option value="0" selected>Elija...</option>';
do echo '<option value="',$row["id"],'">',$row["nombre"],'</option>';
while ($row=mysql_fetch_array($consulta));
mysql_free_result($consulta);
}
else echo '<option value="0" selected>No hay categorias def.</option>';
echo '
</select>
</td>
<td width="34%">
<!------ Segundo Select (s2)---->
<input name="is2" type="hidden" value="',$is2,'">
<select name="s2" class="prod" onChange="recarga(this.form);">
';
if ($is1>0)
{ $consulta=mysql_query("SELECT nombre, id FROM categoria WHERE relacion=$s1",$link);
$nf=mysql_num_rows($consulta);
if ($nf>0)
{ echo '<option value="0" selected>Elija...</option>';
while ($row=mysql_fetch_array($consulta))
echo "<option value='",$row["id"],"'>
",$row["nombre"],"</option>";
}
else echo '<option value="0" selected>No hay categorias</option>';
mysql_free_result($consulta);
}
else echo '<option value="0" selected><ninguno></option>';
echo '
</select></td>
<td width="33%">
<!------ Tercer Select (s3)---->
<input name="is3" type="hidden" value="',$is3,'">
<select name="s3" class="prod" id="select3" onChange="recarga(this.form);">
';
if ($is2>0)
{ $consulta=mysql_query("SELECT nombre, id FROM categoria WHERE relacion=$s2",$link);
$nf=mysql_num_rows($consulta);
if ($nf>0)
{ echo '<option value="0" selected>Elija...</option>';
while ($row=mysql_fetch_array($consulta))
echo "<option value='",$row["id"],"'>
",$row["nombre"],"</option>";
}
else echo '<option value="0" selected>No hay categorias</option>';
mysql_free_result($consulta);
}
else echo '<option value="0" selected><ninguno></option>';
echo '
</select></td>
</tr>
</form>
</table>
';
?>
Despues hacemos:
<script language="JavaScript">
selecciona (<? echo $is1; ?>, <? echo $is2; ?>, <? echo $is3; ?>, document.mx.s1, document.mx.s2, document.mx.s3);
</script>
La funcion conecBD se vincula a la base que se encuentra dentro de la "libreria" funciones.php .....
ah si! falta la funciones: recarga() y selecciona()
Aqui estan .....
<script language="JavaScript">
function recarga(form)
{ form.is1.value=form.s1.selectedIndex;
form.is2.value=form.s2.selectedIndex;
form.is3.value=form.s3.selectedIndex;
if (form.s1.selectedIndex != <? echo $is1; ?>)
{ form.is2.value=0;
form.is3.value=0;}
if (form.s2.selectedIndex != <? echo $is2; ?>)
{form.is3.value=0;}
form.action="prueba_foro.php";
form.submit();
}//function recarga(...
function selecciona(opt1, opt2, opt3, combo1, combo2, combo3)
{
combo1.options[opt1].selected= "true";
combo2.options[opt2].selected= "true";
combo3.options[opt3].selected= "true";
}//fin de la funcion selecciona
</script>
ok espero le entiendas al codigo.... cualquier cosa sobre el, puedo aclarartela. ok adios.