Foros del Web » Programando para Internet » PHP »

lista dependiente en ambas seleciones

Estas en el tema de lista dependiente en ambas seleciones en el foro de PHP en Foros del Web. hola chicos pues aqui solisitando una ves mas su apreciable ayuda tengo un problemas con una lista dependiente explico el problema: tengo dos combos y ...
  #1 (permalink)  
Antiguo 17/08/2005, 09:34
 
Fecha de Ingreso: junio-2005
Ubicación: Mexico
Mensajes: 21
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación lista dependiente en ambas seleciones

hola chicos pues aqui solisitando una ves mas su apreciable ayuda tengo un problemas con una lista dependiente explico el problema:

tengo dos combos y necesito que los dos esten relacionados, es decir si selecciono algo en el primero el segundo combo toma el campo de la bd relacionado con el combo 1 y si cambia el combo 2 el sombo cambia con el valor de la bd relacionado, creo que llamar a este ralacion doble sera algo propio entonces no he logrado realisar esa funcion ya avia visto un ejemplo por ahi pero no lo he encontrado espero me puedan ayudar, y desde ya mil gracias
  #2 (permalink)  
Antiguo 17/08/2005, 10:31
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 8 meses
Puntos: 17
Se puede hacer con Javascript o con PHP...
Es preferible con Javascript porque para hacerlo en PHP necesitás recargar la página cada vez que cambia el valor del combo 1.

Te dejo un ejemplo de como lo hice yo con Javascript.
En PHP igual deberías cargar las opciones al principio en la funcion zona de javascript
Código HTML:
<html>
<head>
<script language="javascript">
function addOpt(oCntrl, iPos, sTxt, sVal){
	var selOpcion=new Option(sTxt, sVal);
	eval(oCntrl.options[iPos]=selOpcion);
}

function zona(inm) {
	addOpt(document.buscar.Zona,  0, "Todas", "");
	var a = 1;
	while(document.buscar.Zona.options[a] != null) {
		 document.buscar.Zona.options[a]=null;
		 a += 1;
	}
	
if (inm == "Edificios en block") {
	addOpt(document.buscar.Zona,  0, "Todas", ""); 
	addOpt(document.buscar.Zona,  1, "Norte GBA", "Norte GBA");
	addOpt(document.buscar.Zona,  2, "Catalinas", "Catalinas");
	addOpt(document.buscar.Zona,  3, "Puerto Madero", "Puerto Madero");
}

if (inm == "Industrias") {
	addOpt(document.buscar.Zona,  0, "Todas", ""); 
	addOpt(document.buscar.Zona,  1, "Oeste GBA", "Oeste GBA");
	addOpt(document.buscar.Zona,  2, "Norte GBA", "Norte GBA");
}
if (inm == "Oficinas") {
	addOpt(document.buscar.Zona,  0, "Todas", ""); 
	addOpt(document.buscar.Zona,  1, "Macrocentro Norte", "Macrocentro Norte");
	addOpt(document.buscar.Zona,  2, "Puerto Madero", "Puerto Madero");
	}
}
</script>
</head>
<body onLoad="zona(document.buscar.TipoInmueble.value)"></body>
<form name="buscar">
<select class="formElement" name="TipoInmueble" onChange="zona(this.value)">
	<option value="Oficinas">Oficinas</option>
	<option value="Industrias">Industrias</option>
	<option value="Edificios en block">Edificios en block</option>
</select>
<select class="formElement" name="Zona"></select>
</form>
</body> 
  #3 (permalink)  
Antiguo 17/08/2005, 11:09
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 15 años, 5 meses
Puntos: 1
Puedes utilizar remote scripting (javascript + lenguaje servidor..en este caso php)...así podrás hacer peticiones a la base de datos al hacer onchange de un select y rellenar el sigueinte select con respecto a lo q hayas elejido en el primer select.

te dejo un link en el q encontrarás ejemplos y los js necessarios...

http://www.ashleyit.com/rs/download.htm

Salu2.
  #4 (permalink)  
Antiguo 17/08/2005, 11:19
 
Fecha de Ingreso: junio-2005
Ubicación: Mexico
Mensajes: 21
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación

Mil gracias por las respuestas pero en caso del ejemplo de java scrip no me sirve xq la consulta se realiza en una base de datos mysql y creo que es mucho mas complicado hacer la consulta por java scrip, y del segundo post pues ya avia visto esos ejemplos y son muy utiles para crear combos que se van llenado segund vas selecionando cada combo, pero en mi caso necesito que ambos combos cambien si selecionas el segundo el primero deve de cambiar y si selecionas el primero el segundo cambia aqui os mando un ejemplo del codigo que estoy intentando crear pero aun no logro que pase esa dependencia dual.

<?php

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";



$_REQUEST['$id_mun'];
$_REQUEST['id_tipo'];



mysql_select_db($database_database, $database) or die(mysql_error());

echo "<select name=\"id_mun\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione un Municipio </option>\n";
if (!empty($MM_UserGroup)){
$SQLconsulta_mun="SELECT Saave_acuerdo, Daafec_acuerdo FROM arc_acuerdos WHERE substring(Saave_acuerdo,1,2)=".$MM_UserGroup ;
$consulta_mun = mysql_query($SQLconsulta_mun,$database) or die(mysql_error());
if (mysql_num_rows($consulta_mun) != 0){
While ($registro_mun=mysql_fetch_assoc($consulta_mun)) {
if ($id_mun == $registro_mun['Saave_acuerdo']){
echo "<option value=\"".$registro_mun['Saave_acuerdo']."\" selected>".$registro_mun['Saave_acuerdo']."</option>\n";
} else {
echo "<option value=\"".$registro_mun['Saave_acuerdo']."\">".$registro_mun['Saave_acuerdo']."</option>\n";
}
}
} else {
echo "<option value=\"\"> No hay Municipios </option>";
}
} else {
echo "<option value=\"\"> Seleccione un Municipio </option>";
}
mysql_free_result($consulta_mun);
echo "</select>\n\n";


echo "</label></td>
</tr>
<tr>
<td><span class=\"Estilo2\">Fecha de Sesi&oacute;n </span></td>
<td height=\"30\" colspan=\"2\"><label>";

echo $id_mun;
echo "<select name=\"id_tipo\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione un Tipo </option>\n";
if (!empty($id_mun)){
$SQLconsulta_tipo="SELECT Saave_acuerdo, Daafec_acuerdo FROM arc_acuerdos WHERE substring(Saave_acuerdo,1,2)=".$MM_UserGroup. " AND Saave_acuerdo=".$id_mun;
$consulta_tipo= mysql_query($SQLconsulta_tipo,$database) or die(mysql_error());
if (mysql_num_rows($consulta_tipo) != 0){
While ($registro_tipo=mysql_fetch_assoc($consulta_tipo)) {
if ($id_tipo == $registro_tipo['Saave_acuerdo']){
echo "<option value=\"".$registro_tipo['Saave_acuerdo']."\" selected>".$registro_tipo['Daafec_acuerdo']."</option>\n";
} else {
echo "<option value=\"".$registro_tipo['Saave_acuerdo']."\">".$registro_tipo['Daafec_acuerdo']."</option>\n";
}
}
} else {
echo "<option value=\"\"> No hay tipos </option>";
}
} else {
echo "<option value=\"\"> Seleccione un Tipo </option>";
}
mysql_free_result($consulta_mun);
echo "</select>\n\n";

?>
bueno espero me alla dado a entender un poco mas a fondo y gracias por las respuestas
  #5 (permalink)  
Antiguo 17/08/2005, 13:18
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 15 años, 5 meses
Puntos: 1
Eso q dices también se puede hacer..remote scripting solo te proporciona la base y te da ejemplos para q veas como funciona más o menos luego tu ya te creas tus js a tu gusto....

en los elementos onchange puedes decir q hagan lo q quieras...

incluso por ejemplo lo q hago a veces..

por ejemplo si tengo 3 combos pues en vez de dejarlos en espera de q selecciones algo..pues a la q selecciones el priemro se encadenan los 3 segun lo q hayas seleccionado y si cambias algo vuelve a ahcer la consulata pra los tres...segun haya en cada combo..no se si me explico...

conclusión..puedes modificar elcodigo para adaptarlo a tus necesidades..solo tienes q estudiarte lso ejemplos..no es dificil.

Salu2.
  #6 (permalink)  
Antiguo 17/08/2005, 13:22
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
En las FAQ hay un ejemplo completo:

http://www.forosdelweb.com/showthrea...999#post664999
  #7 (permalink)  
Antiguo 17/08/2005, 16:45
 
Fecha de Ingreso: junio-2005
Ubicación: Mexico
Mensajes: 21
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación

No aver chicos creo que no me he dado a entender los ejemplos que ustedes me dicen ya los tengo y de echo ya funcionan y esos funcinan muy bien para hacer seleciones del tipo estado = municipio= comunidad

eso no es lo que busco hacer,

miren en mi base de datos tengo 2 campos uno que guarda numeros de sesion y el cual es un numero unico de este tipo 300001 y por una fecha 2005/02/02, bien la fecha se puede repetir es decir no puede aver muchas sesiones dadas de alta el mismo dia lo unico que las diferencia son los numeros de sesion bien

ahora tengo que crear dos combos pero estos tinen ralacion en amabas direciones si seleccionas en el combo uno el numero de sesion 300001 el segundo combo devera de selecionar de manera automatica la fecha que le corresponde a dicha sesion y viceversa si selecionas una fecha del segundo combo en el combo numero uno devera de selecionarse de manera automatica el numero de sesion que le corresponde a dicha fecha y cabe mencionar que los dos combos deven estar poblados con todas las fechas en el caso del combo dos y con todos los numeros de sesion en el caso del combo de uno y que al selecionar en cualquiera de los dos un datos este se deve ver reflejado en el combo donde no se seleciono nada, alguna ves vi eso cuando estaba buscando hacer mis primeras listas dependientes pero no allo la pagina, pero bueno espero aver logrado transmitir la idea de lo que necesito hacer y mil gracias por las respuestas
  #8 (permalink)  
Antiguo 17/08/2005, 17:04
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 15 años, 5 meses
Puntos: 1
Creo q mas o menos ya entiendo lo q dices...

de momento solo se me ocurre q recargues la pgaina cada vez q cambia el combo...y utilices un if para decirle si es selected o no...

<select><option selected></option></select>

así te quedaran los dos combos seleccionados donde quieres...

por remote scripting no se me ocurre asi un modo facil de explicar pero seguro q retocando el codigo se puede hacer

Salu2.
  #9 (permalink)  
Antiguo 18/08/2005, 10:31
 
Fecha de Ingreso: junio-2005
Ubicación: Mexico
Mensajes: 21
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación

pero ahora mas complicaciones si en un combo creo el selec con el query asi 100003-----2005/13/13 en el combo se muestra la fecha si hacemos lo contrario 2005/13/13--100003 se mostraran ls numeros de sesion pero como puede aver muchas fechas repetidas entonces el combo ya no hace nada de nada y eso me complica las aun mas de lo que ya eran entonces pues creo que algo estoy haciendo y mul mal :(
  #10 (permalink)  
Antiguo 18/08/2005, 10:34
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 15 años, 5 meses
Puntos: 1
Es q me parece q lo q queires hacer es demasiado rebuscado e incluso imposible... ya q si no es una relacion 1:1 no puedes pretender seleccionar algo en el primer combo y decirle al segundo q te de la correspondencia ya q...para ti cual seria el valor correspondido? comu mucho le puedes decir q te de uno de los correspondidos pero nada más...

quizás si explicaras más ampliamente lo q queires hacer...te podrias proponer otras soluciones q no se basen en 2 combos.

Salu2.
  #11 (permalink)  
Antiguo 18/08/2005, 12:01
 
Fecha de Ingreso: junio-2005
Ubicación: Mexico
Mensajes: 21
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación

bueno ya resolvi lo de la relacion le agrege a la base de datos un campo que es consecutivo y listo ya en cosas de relacion pues ahora si es uno a uno y como que isea unos movimientos raros y con esto de menos el primer combo si cambia su contenido cuando cambia el segundo pero no deja que selecionar nada en el pero creo que por aqui va el asunto a ver que consejos me tienen
o tambien el hacerlo con if pero la verdad no tengo una idea de como agregar el if en los combos a ver si me ayudan con ese detalle

<?php

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";



//$_REQUEST['$id_mun'];
//$_REQUEST['id_tipo'];



mysql_select_db($database_database, $database) or die(mysql_error());

echo "<select name=\"id_tipo\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione un Tipo </option>\n";
if (!empty($MM_UserGroup)){
$SQLconsulta_tipo="SELECT Saave_acuerdo, Daafec_acuerdo, Cons FROM arc_acuerdos WHERE substring(Saave_acuerdo,1,2)=".$MM_UserGroup;
$consulta_tipo= mysql_query($SQLconsulta_tipo,$database) or die(mysql_error());
if (mysql_num_rows($consulta_tipo) != 0){
While ($registro_tipo=mysql_fetch_assoc($consulta_tipo)) {
if ($id_tipo == $registro_tipo['Cons']){
echo "<option value=\"".$registro_tipo['Cons']."\" selected>".$registro_tipo['Saave_acuerdo']."</option>\n";
} else {
echo "<option value=\"".$registro_tipo['Cons']."\">".$registro_tipo['Saave_acuerdo']."</option>\n";
}
}
} else {
echo "<option value=\"\"> No hay tipos </option>";
}
} else {
echo "<option value=\"\"> Seleccione un Tipo </option>";
}
mysql_free_result($consulta_tipo);
echo "</select>\n\n";



?>

</label></td>
<td height="30"><label>
<input name="textfield" type="text" value= "<?php echo $id_mun;?>">
</label></td>
</tr>
<tr>
<td><span class="Estilo2">Fecha de Sesi&oacute;n </span></td>
<td height="30"><label>
<?php

echo "<select name=\"id_tipo\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione un Tipo </option>\n";
if (!empty($MM_UserGroup)){
$SQLconsulta_tipo="SELECT Saave_acuerdo, Daafec_acuerdo, Cons FROM arc_acuerdos WHERE substring(Saave_acuerdo,1,2)=".$MM_UserGroup;
$consulta_tipo= mysql_query($SQLconsulta_tipo,$database) or die(mysql_error());
if (mysql_num_rows($consulta_tipo) != 0){
While ($registro_tipo=mysql_fetch_assoc($consulta_tipo)) {
if ($id_tipo == $registro_tipo['Cons']){
echo "<option value=\"".$registro_tipo['Cons']."\" selected>".$registro_tipo['Daafec_acuerdo']."</option>\n";
} else {
echo "<option value=\"".$registro_tipo['Cons']."\">".$registro_tipo['Daafec_acuerdo']."</option>\n";
}
}
} else {
echo "<option value=\"\"> No hay tipos </option>";
}
} else {
echo "<option value=\"\"> Seleccione un Tipo </option>";
}
mysql_free_result($consulta_tipo);
echo "</select>\n\n";
?>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:05.