Foros del Web » Programando para Internet » PHP »

Select dependientes con 1 tabla

Estas en el tema de Select dependientes con 1 tabla en el foro de PHP en Foros del Web. con una tabla similar a esto id tipo1 tipo2 tipo3 1 chico rubio null 2 chico moreno null 3 chica rubia de_bote 4 chica rubia ...
  #1 (permalink)  
Antiguo 07/03/2007, 10:52
 
Fecha de Ingreso: marzo-2007
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 0
Select dependientes con 1 tabla

con una tabla similar a esto
id tipo1 tipo2 tipo3
1 chico rubio null
2 chico moreno null
3 chica rubia de_bote
4 chica rubia natural

quiero hacer 3 select dependientes,
select distinct tipo1 from tipos";
select distinct tipo2 from tipos where tipo1='$tipo1'";
...
pero no se como coger el resultado de uno y pasarle al otro sql...

si me podeis ayudar o recomendar algun ejemplo..(el de pais, provincias no le doy ninguna utilidad o no se como hacerlo)
  #2 (permalink)  
Antiguo 07/03/2007, 11:08
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: Select dependientes con 1 tabla

Hola
en las FAQ's tienes un ejemplo
http://www.forosdelweb.com/showthrea...999#post664999

sino aqui tmabien puedes encontrar mas ejemplos:
http://www.rinconastur.net/php/php86b.php
http://www.desarrolloweb.com/articulos/1327.php

EDITADO:
me dejaba uno de bueno con AJAX (sin recargar pagina)
http://www.formatoweb.com.ar/ajax/se..._3_niveles.php

espero q te sirva de referencia
saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 07/03/2007 a las 11:15
  #3 (permalink)  
Antiguo 07/03/2007, 11:09
 
Fecha de Ingreso: marzo-2007
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Select dependientes con 1 tabla

Muchisimas gracias sergi_climent,
les echare un vistazo,
  #4 (permalink)  
Antiguo 08/03/2007, 05:30
 
Fecha de Ingreso: marzo-2007
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Select dependientes con 1 tabla

no me he atrevido con el ejemplo de Ajax,

he utilizado, el ejemplo del FAQ, lo he retocado para mi unica tabla, y funciona bien!! ahora mi duda es como hacerlo para un tercer select mas. Me estoy haciendo un lio..

si me podeis ayudar..
  #5 (permalink)  
Antiguo 08/03/2007, 09:21
 
Fecha de Ingreso: marzo-2007
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Select dependientes con 1 tabla

Este es el codigo que que viene en el FAQ del foro (primer link de sergi_climent) para dos select dependientes pero retocado para una sola tabla..y ahora con 3 select

Para 2 funciona, pero el tercero no se carga!!
tendria q poner esto para el segundo?
echo "<select name=\"mota1\" onChange=\"this.form.submit()\">\n";
¿Me podeis ayudar?Gracias
Código PHP:
<?
// datos de conexion a la BD.
$servidor  ="localhost"// host
$usuario   ="root"
$clave     ="";
$basedatos ="formularios"// Indicar una Base de datos.

// si se ha pulsao el boton enviar ($enviado) se procesa el formulario ..
// Sino, se continua con el formulario y los nuevos valores de los Select ..
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
// que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda.

if (!empty($_POST['enviado'])){

// Procesar el formulario ...
echo "Procesando formulario:<br>";
echo 
"Recibido id_tabla_padre: ".$_POST['mota1']."<br>";
echo 
"Recibido id_tabla_hija: ".$_POST['mota2'];

} else {

   
// Conexión a la BD
   
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
   
mysql_select_db($basedatos$conexion) or die(mysql_error());

   
// Obtener el $id_padre del envio a si mismo del formulario ..
   
$mota1=$_POST['mota1'];
   
$mota2=$_POST['mota2'];
   
$mota3=$_POST['mota3'];
 
   
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
   
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";

   
// Formar Selec "Mota1".
   
echo "<select name=\"mota1\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";

   
$SQLconsulta_padre="select distinct mota1 from motak";
   
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());

   While   (
$registro_padre=mysql_fetch_assoc($consulta_padre)){
      
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
      // Se selecciona en consecuencia (selected) la opción elegida.
          
if ($mota1 == $registro_padre['mota1']){
         echo 
"<option value=\"".$registro_padre['mota1']."\" selected>".$registro_padre['mota1']."</option>\n";
      } else {      

         echo 
"<option value=\"".$registro_padre['mota1']."\">".$registro_padre['mota1']."</option>\n";
        }

    }
   echo 
"</select>\n\n";

   
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.

   // Formar Select "Mota2"
   
echo "<select name=\"mota2\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";
   
//echo "<select name=\"mota2\">\n";
   // Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
   // se muestra el mensaje de "seleccine un item" (del select padre).
   
if (!empty($mota1)){

       
$SQLconsulta_hija="select distinct mota2 from motak where mota1='$mota1' order by mota2 ASC";
       
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
       
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
       
if (mysql_num_rows($consulta_hija) != 0){
          While   (
$registro_hija=mysql_fetch_assoc($consulta_hija)){
            echo 
"<option value=\"".$registro_hija['mota2']."\">".$registro_hija['mota2']."</option>\n";
          }
        } else {
            echo 
"<option value=\"\"> No hay registros para este Item </option>";
        }
    } else {
        echo 
"<option value=\"\"> <-- Seleccione un Item  </option>";
    }

    
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.

   // Formar Select "Mota3"
   
echo "<select name=\"mota3\">\n";

   
// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
   // se muestra el mensaje de "seleccine un item" (del select padre).
   
if (!empty($mota2)){

       
$SQLconsulta_hija2="select distinct mota3 from motak where mota1='$mota1' and mota2='$mota2' order by mota3 ASC";
       
$consulta_hija2 mysql_query($SQLconsulta_hija2,$conexion) or die(mysql_error());
       
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
       
if (mysql_num_rows($consulta_hija2) != 0){
          While   (
$registro_hija2=mysql_fetch_assoc($consulta_hija2)){
            echo 
"<option value=\"".$registro_hija2['mota3']."\">".$registro_hija2['mota3']."</option>\n";
          }
        } else {
            echo 
"<option value=\"\"> No hay registros para este Item </option>";
        }
    } else {
        echo 
"<option value=\"\"> <-- Seleccione un Item  </option>";
    }

    
mysql_free_result($consulta_hija2); // Liberar memoria usada por consulta.

    
echo "</select>\n\n";
    
    
    echo 
"<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
    echo 
"</form>\n";
}
?>

Última edición por okioki; 08/03/2007 a las 12:34
  #6 (permalink)  
Antiguo 08/03/2007, 09:33
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: Select dependientes con 1 tabla

Hola de nuevo okioki,

aqui hay un ejemplo:
http://www.tunait.com/tutoriales/lis...esphpmysql.php

Cita:
no me he atrevido con el ejemplo de Ajax,
porque no te has atrevido?
la web te quedara mucho mejor si cuando escoges un select no se recarga la pagina para cada cambio q haces...

aunque si quieres le exo un vistazo a tu codigo a ver q se puede hacer...
EDITADO: seria algo asi... no lo he probado por falta de tiempo... pero mas o menos para q cojas la idea quizas te sirva
Código PHP:
<? 
// datos de conexion a la BD. 
$servidor  ="localhost"// host 
$usuario   ="root";  
$clave     =""
$basedatos ="formularios"// Indicar una Base de datos. 

if (!empty($_POST['enviado'])){ 

// Procesar el formulario ... 
echo "Procesando formulario:<br>"
echo 
"Recibido id_tabla_padre: ".$_POST['mota1']."<br>"
echo 
"Recibido id_tabla_hija: ".$_POST['mota2']; 

} else { 

   
// Conexión a la BD 
   
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error()); 
   
mysql_select_db($basedatos$conexion) or die(mysql_error()); 

   
// Obtener el $id_padre del envio a si mismo del formulario .. 
   
$mota1=$_POST['mota1']; 
   
$mota2=$_POST['mota2']; 
   
$mota3=$_POST['mota3']; 

  
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script). 
 
?> 
   <form action="<?=$_SERVER['PHP_SELF']?>" method="POST">         
        <select name="mota1" onChange="this.form.submit()"> 
        <option value=""> Seleccione un Item </option> 
    <? 
   $SQLconsulta_padre
="select distinct mota1 from motak"
   
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error()); 
    while(
$registro_padre=mysql_fetch_assoc($consulta_padre)){ 
    
?> 
        <option value="<?=$registro_padre['mota1']?><?  if ($mota1 == $registro_padre['mota1']){?>selected <? ?>><?=$registro_padre['mota1']?></option> 

    <?    
    
}  //Cerramos wl WHILE  
   
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta. 
    
?> 
        </select> 
        
<!-- SEGUNDO SELECT -->         
       <select name="mota2" onChange="this.form.submit()"> 
    <? 
      
if (!empty($mota1)){ 

       
$SQLconsulta_hija="select distinct mota2 from motak where mota1='$mota1'"
       
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error()); 
       
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select .. 
       
if (mysql_num_rows($consulta_hija) != 0){ 
          while(
$registro_hija=mysql_fetch_assoc($consulta_hija)){ 
    
?> 
        <option value="<?=$registro_hija['mota2']?>"<? if ($mota2 == $registro_hija['mota2']){ ?> selected <? ?>><?=$registro_hija['mota2']?></option> 
     <?     //fin WHILE 
        
} else { 
    
?> 
        <option value=""> No hay registros para este Item </option> 
    <?    
    } else { 
    
?> 
       <option value="">--> Seleccione un Item  </option> 
   <? 
   
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta. 
   
?> 
    </select> 
    
   <!-- TERCER SELECT -->   
   <select name="mota3">   
    <?       
   
if ((!empty($mota1)) && (!empty($mota2))){ 

       
$SQLconsulta_nieta="select distinct mota3 from motak3 
                             where mota1='$mota1' AND mota2='$mota2'"

       
$consulta_nieta mysql_query($SQLconsulta_nieta,$conexion) or die(mysql_error()); 
       
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select .. 
       
if (mysql_num_rows($consulta_nieta) != 0){ 
          while  (
$registro_nieta=mysql_fetch_assoc($consulta_nieta)){ 
    
?> 
        <option value="<?=$registro_nieta['mota3']?><? if ($mota3 == $registro_nieta['mota3']){ ?> selected <? ?>><?=$registro_nieta['mota3']?></option> 
    <?     
        } else { 
    
?> 
           <option value=""> No hay registros para este Item </option> 
    <?  
    } else { 
    
?> 
        <option value=""> --> Seleccione un Item  </option> 
    <? }  
    
mysql_free_result($consulta_nieta); // Liberar memoria usada por consulta. 
    
?> 
    </select> 
<input type="submit" name="enviado" value=" Enviar " > 
</form> 
<? 

?>
solo una cosa mas... te aconsejo para q no hagas trabajar excesivamente a tu servidor, q el codigo HTML no lo incrustes en PHP, es decir abre y cierra <??> para cada caxo de PHP q uses, y deja q el navegador el usuario se coma el HTML mientras tu servidor solo hace la parte de PHP...

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 09/03/2007 a las 02:12
  #7 (permalink)  
Antiguo 08/03/2007, 09:43
 
Fecha de Ingreso: marzo-2007
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Select dependientes con 1 tabla

Saludos sergi
Cita:
aqui hay un ejemplo:
www tunait com
anda que no me he peleado con el codigo de el ejemplo ese..jeje..y me a vencido.
Con lo de Ajax, nunca he trabajado con el, y me ha dao un poco miedo, cuando lo he visto al bajarlo, las carpetas de xmlResponses, includes,js..yo no se que hacer con todo eso! ni donde meterlo!jeje. Eso si, la verdad que el resultado queda muy chulo.

Muchas gracias, por la ayuda
Me aparece el siguiente codigo:
Código:
Parse error: syntax error, unexpected T_BOOLEAN_AND in prueba.php on line 84
Intentare resolverlo, si doy con la solucion lo cometare en el foro,

agur!

P.D. Si conoceis un editor php que este bien yque sea opensource, de maravilla!si no me gustaria conocer cuales utilizais ;)

Última edición por okioki; 08/03/2007 a las 09:57
  #8 (permalink)  
Antiguo 09/03/2007, 07:01
 
Fecha de Ingreso: marzo-2007
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Select dependientes con 1 tabla

SOLUCIONADO

solucion de 3 SELECT dependientes en el pos de sergi_climent, gracias
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 04:25.