Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 11-07-2004
HombreSigma HombreSigma is offline
Miembro
 
Registrado: jun 2003
Ubicación: World
Posts: 114
HombreSigma Va por buen camino
Lista desplegable dinámica

Necesito actualizar una lista desplegable dinámicamente con base la escogencia del valor de otra lista desplegable que utilizaré como filtro.

Por ejemplo, si selecciono un país determinado en una lista desplegable que me actualice dinámicamente los estados de la lista desplegable de estados.


Obviamente en PHP.


Gracias por cualquier información.
__________________
SigmaMan
Responder Con Cita
  #2  
Antiguo 12-07-2004
kayetano kayetano is offline
Moderador
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
kayetano Va por buen camino
Hola

Yo lo suelo hacer de dos formas, suponiendo que tienes los valores en una base de datos:

* La primer, genero desde php un array javascript, y cuando un desplegable cambia con una funcion javascript modifico el contenido del segundo desplegable , con un ejemplo:
En este caso tengo familias y subfamilias, cuando cambio el desplegable de la familia se recarga la subfamilia:

Este es el codigo PHP para generar el array en javascript
Código PHP:
...
<script language="JavaScript">
    var subfamilias = Array();
<?
   
// familias( id int(), cabecera int(), nombre varchar() )
   // Las familias con cabecera = 0 son de nivel 1 (familias)
   // Las familias con cabecera > 0 son de nivel 2 (subfamilias)
   // cabecera contiene el id de la familia de nivel 1, solo en subfamilias.
    
$familiaActiva "";
    
$qFam mysql_query"SELECT f2.id AS idfamilia, f1.id AS idsubfamilia, f1.nombre AS subfamilia
                            FROM familias f1, familias f2 
                            WHERE f1.cabecera = f2.id
                            ORDER BY idfamilia, subfamilia" 
);
    while( 
$rFam mysql_fetch_array$qFam ) ) {
        if( 
$familiaActiva !=  $rFam["idfamilia"] ) {
            
$familiaActiva $rFam["idfamilia"];
            echo 
"\tsubfamilias[$familiaActiva] = Array();\n";  // En javascript hay que definir todos los arrays.
            
$x 1;
        }
        echo 
"\tsubfamilias[$familiaActiva][".$x++."] = new Option('".$rFam["subfamilia"]."', "$rFam["idsubfamilia"] ." );\n";
    }
?>
</script>
...
Con este código Javascript cambio el contenido del desplegable:
Código PHP:
// El desplegable siempre lo inicializo con tamaño 1, ya que la primera 
// opción es el texto "seleccione una familia"
<script language="JavaScript">
   
// - fam contiene el identificador de la familia seleccionada
   // - subfam contiene el objeto "SELECT" de la subfamilia
    
function cambiaFamiliafamsubfam ) {
       if( 
fam ) {
          
subfam.disabled false;
          
subfam.length 1;
          for ( 
x in subfamilias[fam] )
          
subfam.options[x] = subfamilias[fam][x];
       } else {
          
subfam.length 1;
          
subfam.disabled true;
       }
    }
</script> 
y por último quedaría la definición del objeto SELECT:
Código PHP:
Familia<br>
<select name="nFamilia" class="envio" onchange="cambiaFamilia(this.value, this.form.nSubfam, this.form.nuevafamilia)" >
   <option value="0">- Seleccione una familia -</option>
<?
   $qFam 
mysql_query "SELECT * FROM familias WHERE cabecera = 0 ORDER BY nombre" ) or die (mysql_error());
   while ( 
$rFam mysql_fetch_array $qFam ) ) {    ?>
   <option value="<?=$rFam["id"]?>"><?=$rFam["nombre"]?></option>
<?   }    ?>
</select>
...
Subfamilia<br>
<select name="nSubfam" class="envio" id="subfamilia">
   <option value="0">- Seleccione una subfamilia -</option>
</select>
Este código es copy-paste de una página que realicé hace unos días, espero que no te sirva de algo y no te lie mucho.

* El segundo método es recargando la página y realizando la consulta de nuevo con valores diferentes.

Si los datos no los tienes en ninguna base de datos, y los conoces todos, puedes utilizar, simplemente, el primer método.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:58:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi