Foros del Web » Programando para Internet » Javascript »

cargar un segundo select dinamico en funcion del primero

Estas en el tema de cargar un segundo select dinamico en funcion del primero en el foro de Javascript en Foros del Web. Buenas!! Tengo, en un mismo formulario php dos listas, que se rellenan con datos de tablas en mysql. La primera contiene marcas de fabricantes (LG, ...
  #1 (permalink)  
Antiguo 08/08/2005, 10:44
Avatar de tycho  
Fecha de Ingreso: marzo-2005
Ubicación: Linares
Mensajes: 48
Antigüedad: 19 años, 1 mes
Puntos: 0
Pregunta cargar un segundo select dinamico en funcion del primero

Buenas!!

Tengo, en un mismo formulario php dos listas, que se rellenan con datos de tablas en mysql. La primera contiene marcas de fabricantes (LG, MAXON, PHILIPS...) y en la segunda debe de cargarse los productos que hay en la BBDD asociados a la marca que se seleccione.

Creo que el procedimiento sería tener un array para cada marca, y almacenar ahí sus productos. El problema es que si tengo:

MARCA
--------

LG
PHILIPS
SONY

nombre de array
---------------
array_1
array_2
array_3

el problema es que mi web es dinámica, por lo que hoy tengo tres marcas, pero mañana tendré más, entonces ¿como hago para ir creando arrays distintos dentro de un bucle?

he probado con
Código PHP:
$array_.+$i 
dentro de un for, pero no va

Espero haberme sabido explicar
  #2 (permalink)  
Antiguo 08/08/2005, 11:31
 
Fecha de Ingreso: septiembre-2004
Ubicación: Argentina
Mensajes: 49
Antigüedad: 19 años, 7 meses
Puntos: 0
hoy es tu día de suerte tycho...yo estuve buscando exactamente lo mismo la semana pasada y logré sacar el código ayer a la noche!

la parte de los querys a la base está hecho en php, asique vas a tener que grabar el archivo con extensión php

bueno, el código es este....ah, de nada!!!

<?
include('conexion_base.php');
?>
<html>
<head>
<script language="JavaScript">

/* Trae desde la base de datos los nombres de los paises */
/* y colóos en este arreglo. */
<?
$i=1;
echo "var aPaises = new Array(' '";
$query1 = mysql_query("SELECT pais, id_pais FROM Paises");
while(list($pais, $id_pais)=mysql_fetch_row($query1)) {
echo ", '$pais'";
$array_pais[$i] = $id_pais;
$i++;
}
echo ");\n";

echo "var aEstados0 = new Array(' ');\n";

for($j=1; $j<$i;$j++) {
$tempid = $array_pais[$j];
$sele2 = mysql_query("SELECT ciudad FROM Ciudades WHERE id_pais='$tempid'");
echo "var aEstados".$j." = new Array (' '";
while(list($ciudad)=mysql_fetch_row($sele2)) {
echo ", '$ciudad'";
}
echo ");\n";
}


/* Arma un arreglo general de estados a partir de los arreglos */
/* anteriores. Es importante que cada arreglo comience por un */
/* valor en blanco y que el primer arreglo de ciudades, llamado */
/* aqui aEstados0, no contenga ningúemento. */
echo "var aEstados = new Array( aEstados0";
for($a=1;$a<$j;$a++) {
echo ", aEstados".$a;
}
echo ");\n";
?>

function opcion(oCntrl, iPos, sTxt, sVal){
var selOpcion=new Option(sTxt, sVal);
eval(oCntrl.options[iPos]=selOpcion);
}

function cambia(oMster, oCntrl){
var nSelected = oMster.selectedIndex;
while (oCntrl.length) oCntrl.remove(0);
for(var i = 0; i < aEstados[nSelected].length; i++)
opcion(oCntrl, i, aEstados[nSelected][i], String(i));
}

function llena(oCntrl){
while (oCntrl.length) oCntrl.remove(0);
for(var i = 0; i < aPaises.length; i++)
opcion(oCntrl, i, aPaises[i], String(i));
}

</script>
</head>
<body>
<form name="frm">
Pais
<select name="pais" onchange="cambia(this, document.frm.ciudad)">
<option value=" ">&nbsp;</option>
</select>
&nbsp;&nbsp;&nbsp;
Ciudad
<select name="ciudad">
<option value=" ">&nbsp;</option>
</select>
</form>
<script language="JavaScript">
llena(document.frm.pais);
</script>
</body>
</html>
__________________
"Sólo sé que no sé nada..." - Sócrates - (un adelantado...!)
  #3 (permalink)  
Antiguo 10/08/2005, 08:24
Avatar de tycho  
Fecha de Ingreso: marzo-2005
Ubicación: Linares
Mensajes: 48
Antigüedad: 19 años, 1 mes
Puntos: 0
Mensaje muchas gracias colega

MUchisimas gracias, pscheve!

He estao mirando el codigo, y tengo una duda:

Código PHP:
<?
$i
=1;
echo 
"var aPaises = new Array(' '";
$query1 mysql_query("SELECT pais, id_pais FROM Paises");
while(list(
$pais$id_pais)=mysql_fetch_row($query1)) {
echo 
", '$pais'";
$array_pais[$i] = $id_pais;
$i++;
}
echo 
");\n";
¿con esto lo que haces es crear un array donde metes todos los paises? ¿El "echo" por que lo usas?

Lo que haces es introducir codigo php dentro de javascript. Sabes si podría crear un vector de manera dinámica en javascript directamente con un "for"?

Código PHP:
<script>
for(
k=1;k<=4;k++){

var 
productos_k = new Array ("jose","juan","pepe")

}
</script> 
Aqui lo que intento es crear cuatro arrays iguales:

productos_1
productos_2
productos_3
productos_4

estaría bien?
  #4 (permalink)  
Antiguo 10/08/2005, 09:05
Avatar de tycho  
Fecha de Ingreso: marzo-2005
Ubicación: Linares
Mensajes: 48
Antigüedad: 19 años, 1 mes
Puntos: 0
Pregunta crear arrays javascript

buenas

quiero crear arrays dentro de un bucle "for", de la siguiente manera:

Código PHP:
<script>
for (
i=1;i<=4;i++){

var 
nombres_i = new Array (20)

}
</script> 
el objetivo es crear los arrays:

nombres_1
nombres_2
nombres_3
nombres_4


puede que la pregunta sea sencilla, pero es que acabo de empezar con esto y no doy con la forma, jeje

gracias
  #5 (permalink)  
Antiguo 10/08/2005, 09:10
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
Buenas,

Crear los arrays en JS? de esa manera... yo lo hacía con PHP/ASP el crear los nombres de array de manera dinámica.

Pero en tucaso si buscas obtener el resultado:

nombrearray_1
nombrearray_2
.
.
.

No se para que lo estas buscando pero... y un array bidimensional?


Código HTML:
<script>
var nombres = new Array(4)
for (i=0;i<=nombres.legth;i++){

var nombres[i] = new Array (20)

}
</script> 
Un saludo.
__________________
www.pensandoenred.com
  #6 (permalink)  
Antiguo 10/08/2005, 10:00
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Debido a que las variables cuelgan del objeto window, podrías usar:

<script>
for (i=1;i<=4;i++){
window["nombres_" + i] = new Array (20)
}
alert(window["nombres_" + 1].length);
</script>

El alert solo lo puse para probar.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 11/08/2005, 05:06
Avatar de tycho  
Fecha de Ingreso: marzo-2005
Ubicación: Linares
Mensajes: 48
Antigüedad: 19 años, 1 mes
Puntos: 0
Pregunta Dudas javascript dentro de php

Muchas gracias por vuestra ayuda.

Ya que me preguntó MarioNunes sobre para qué lo quería, es para hacer dos select dependientes, es decir, un primer select es rellenado con marcas, recogidas éstas de una base de datos mysql.
El segundo select se rellenará según el primer seleccionado, por ejemplo, si pinchamos en la marca "LG", pues se tendrá que acceder a la BBDD para mostrar en el segundo select todos los productos que tiene dicha marca.

Entonces he pensado en crear un array bidimensional donde guarde:

var productos = new Array (numero de productos existentes)

productos[lg] = ("producto 1", "producto 2", .......)
productos[philips] = ("producto 1", "producto 2", .......)
productos[maxon] = ("producto 1", "producto 2", .......)
...
...

lo que pasa es que programo con php, y el codigo javascript no estoy seguro de como se mete dentro. Hasta ahora he hecho lo siguiente

Código PHP:
<body>

<form action="realizar_pedio.php" method="post" name="form1" onchange="">
marca
<select name="marca">
<option value= "0" selected>--- ---</option> 
           <?php 
           
//echo "<script language=\"JavaScript\">";        //las lineas en javascript que escriba las guardo en esta variable
           
            
            
$consulta1 mysql_query("SELECT nombre,codigo_marca FROM t_marca") or die(mysql_error());
            
$numero_marcas mysql_num_rows($consulta1);        //miramos cuantas filas tiene la tabla de las marcas
            
            //echo "var productos = new Array (".$numero_marcas.")";        //creo el array bidimensional de productos
            
            
            
$i=0;
            
$j=0;
            
            while(
$fila mysql_fetch_assoc($consulta1)){
                
$nombre2 $fila["nombre"];            //aqui meto el nombre de la marca
                
$codigo_marca2 $fila["codigo_marca"];        //y aqui su codigo asociado
                
                //echo "var productos[".$i."] = ".$nombre2."";        //meto las marcas el el array
                
                
                
$consulta2 mysql_query("SELECT codigo_producto FROM r_pertenece_a WHERE codigo_marca=$codigo_marca2") or die(mysql_error());
                
$numero_productos mysql_num_rows($consulta2);        //numero de productos que tiene la marca seleccionada
                //echo "productos[".$i."] = new Array(".$numero_productos.")";    //creo el array bidimensional
                                
                
while($fila2 mysql_fetch_assoc($consulta2)){
                        
$codigo_producto2 $fila2["codigo_producto"];
            
                }                    
            
?>
            <option value=" <?php $nombre2 ?>"><?php echo $nombre2 ?></option> 
            
            <?php }        //fin primer while
            
$i++;
            
$j++;  
            
            
?>
            
</select>
modelo
<select name="modelo">
<option value = "-">--- ---</option>
</select>
</form>
por ahora no funciona, pero la siguiente duda:

las lineas que están como comentarios es el codigo javascript. Si están desactivadas, por lo menos se me ve bien el primer select, pero si las activo, deja de verse correctamente.
¿Es que el codigo javascript no se inserta así?

Lo que intento es ir rellenando el array bidimensional, que esta declarado en javascript.

A ver si podeis ayudarme
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 06:13.