Ver Mensaje Individual
  #2  
Antiguo 26-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Reputación: 24
kayetano Va por buen camino
Hola

A primera vista tu código no me parece muy claro, me da la sensación que estas confundiendo variables PHP con variables JAVASCRITP. Igualmente realizas procesos algo liados.

Yo he realizado este proceso de vez en cuando para relacionar poblaciones y provincias, te pongo un ejemplo:
FORMULARIO
Código PHP:
Provincia<br> 
<select name="idprovincia" onchange="cambiaPoblacion(this.value, this.form.F_idpoblacion )">
    <option value="0">- Seleccione -</option>
<?
    $qProvincia 
mysql_query "SELECT * FROM poblacion WHERE idprovincia = 0 ORDER BY nombre" ) or die (mysql_error());
    while ( 
$rProvincia mysql_fetch_array $qProvincia ) ) {
?>
        <option value="<?=$rProvincia["id"]?>"><?=$rProvincia["nombre"]?></option>
<?        }    ?>
</select>

Poblaci&oacute;n<br>
<select name="F_idpoblacion" disabled>
    <option value="0">- Seleccione -</option>
</select>
Utilizo la misma tabla para guardar las poblaciones y las provincias, la estructura sería algo asin:
id - Clave primaria
nombre - nombre de la poblacion o provincia
idprovincia - clave ajena que apunta a la misma tabla, una provincia simpre tendra este campo a 0, una población tendrá el id de la provincia.

Más cosas, con la estructura del while(... mysql_fetch_array() ) te ahorras mucho código.

Ahora nos queda el código javascript:
CODIGO JAVASCRIPT
Código PHP:
<script language="javascript" type="text/javascript">
    var arrayPoblacion = Array();
<?
    $poblacionActiva 
"";
    
$qPoblacion mysql_query"SELECT * FROM poblacion WHERE idprovincia > 0 ORDER BY idprovincia, nombre" );
    while( 
$rPoblacion mysql_fetch_array$qPoblacion ) ) {
        if( 
$poblacionActiva !=  $rPoblacion["idprovincia"] ) {
            
$poblacionActiva $rPoblacion["idprovincia"];
            echo 
"\tarrayPoblacion[$poblacionActiva] = Array();\n";
            
$x 1;
        }
        echo 
"\tarrayPoblacion[$poblacionActiva][".$x++."] = new Option('".$rPoblacion["nombre"]."', "$rPoblacion["id"] ." );\n";
    }
    
?>

    function cambiaPoblacion(provincia, poblacion ) {
       if( provincia > 0 ) {
          poblacion.disabled = false;
          poblacion.length = 1;
          for ( x in arrayPoblacion[provincia] )
              poblacion.options[x] = arrayPoblacion[provincia][x];
       } else {
          poblacion.length = 1;
          poblacion.disabled = true;
       }
    }
</script>
Lo que hago es generar un array con todos los posibles valores relacionando provincias y poblaciones, cuando el primer desplegable cambia pues simplemente borro el secundo desplegable y lo recargo con los nuevos valores asociados.

Hoy por hoy te dirán que lo hagas con AJAX, todo se arregla con AJAX, pero yo he utilizado este script durante mucho tiempo y me a funcionado muy bien.

Eso si no te aconsejo este script en caso de tener que asociar grandes cantidades de datos (miles o millones), en esos casos no respondo de su funcionamiento ni de los requisitos de memoria.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente

Última edición por kayetano fecha: 26-01-2007 a las 10:12:38.
Responder Con Cita