Selects dependientes

Tengo varios selects cada uno corresponde a datos de una tabla de la base de datos. ¿Puedo escoger un valor en el primer select y en la misma página el siguiente select reciba ese parámetro para realizar la consulta a la base de datos filtrado por ese valor y así para los otros?

1 Respuesta

Respuesta
1
Por supuesto, los scripts PHP son secuenciales (se ejecutan por orden).
A no ser que los valores a filtrar los defina el usuario mediante formulario (entonces no podrás recibirlos en la misma página), puedes usar los resultados de una consulta para filtrar otra.
No sé de qué forma necesitas aplicar ese filtro, si tienes alguna duda igual puedo ayudarte.
Saludos,
iNphYx
Me puedes ayudar lo más pronto posible por favor. Necesito el código para un select de una tabla que está relacionada uno_muchos con otra tabla.
Dependiendo del valor de un select en el otro salga solo los vdatos relacionados.
Gracias
Ok, ya entendí. Hace poco respondí una pregunta similar:
http://www.todoexpertos.com/herramientas/leermsgpublico.aspx?idproceso=891343
Fíjate que se definen todos los valores de los campos select secundarios en el código javascript.
Eso es lo que tienes que recuperar de la base de datos: todos los valores posibles y pasarlos a código js.
En el ejemplo anterior sería algo así:
<?php
//conexión a mysql
//seleccionamos las opciones del select principal
$sql = "SELECT id,marca FROM marcas ORDER BY marca";
$res = mysql_query($sql);
//obtenemos el número de registros
$num = mysql_num_rows($res);
?>
<FORM name="form1" method="POST">
<!--Combo principal-->
<select name="marca" onChange="redirect(this.options.selectedIndex)" style='width:160'>
<option selected value=0>MARCA</option>
<?
for($i=0;$i<$num;$i++) {
$id_marca[$i] = mysql_result($res,$i,0);
$marca[$i] = mysql_result($res,$i,1);
echo "<option value='$id_marca[$i]'>$marca[$i]</option>";
}
?>
</select>
<!--Combo dinámico-->
<select name="modelo" style='width:160'>
<option selected value=0>MODELO</option>
</select>
</FORM>
<?
echo "<script><!--";
echo "var groups=".$num;
echo "var group=new Array(groups)";
//Crea tantos arrays como valores hay en el combo principal
echo "for (i=0; i<groups; i++) group=new Array()";
//Opciones cuando no se ha hecho ninguna selección en el combo principal-->
echo "group[0][0]=new Option('MODELO','0');";
for($i=0;$i<$num;$i++) {
$sql = "SELECT id, modelo FROM modelos WHERE id_marca = $id_marca[$i]";
$res = mysql_query($sql);
//Obtenemos el número de modelos para esa marca
$num2 = mysql_num_rows($res);
for($j=0;$j<$num2;$j++) {
$id_modelo = mysql_result($res,$j,0);
$modelo = mysql_result($res,$j,1);
//Opciones para la opción $i del combo principal
echo "group[$num][$j]=new Option('$modelo','$id_modelo')";
}
}
?>
var temp=document.form1.modelo
function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options=new Option(group[x].text,group[x].value)
}
temp.options[0].selected=true
}
//-->
</script>
Como puedes ver, hemos cargado los arrays javascript a partir de los valores obtenidos de consultas a mysql.
Ten en cuenta que en este caso las tablas se relacionan por un id de marca que se encuentra en las 2 tablas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas