Buscar aquí

domingo, 4 de octubre de 2009

Pasar un arreglo en PHP a uno en JavaScript


El otro día necesitaba hacer una aplicación para administrar contactos que trabajan para sucursales de un almacén en distintas ciudades.
Ahora bien, en el formulario para llenar la información de contacto hay un combo que se despliega mostrando las ciudades en las que hay almacenes, ahí se puede seleccionar la ciudad en la que labora el contacto y el siguiente campo es un combo que se despliega mostrando los almacenes de dicha ciudad, por que no seria ni estético ni funcional mostrar todos los almacenes si ya se discrimino una ciudad, y para llenar el combo de almacén debo ejecutar a una consulta en la BD que seleccione los almacenes que están en la ciudad escogida en el combo:

select almacen from almacenes where ciudad = "ciudad seleccionada en el combo"

donde almacen es el nombre del almacen y almacenes la tabla, pero esto me implicaria enviar la pagina solo para obtener eso y luego enviarla de nuevo para guardar, me pregunte entonces si no podria obtener todos los almacenes con sus ciudades:

$con="select almacen, ciudad from almacen";
$res=mysqli_query($link,$con);


y guardarlo todo en un arreglo:

$f=mysqli_fetch_array($res)

y que se envié el arreglo de php a la pagina en un arreglo javascript para que en una funcion javascript se decida como se va a llenar el combo de almacén.

Asi fue como lo hice:

$i=mysqli_num_rows($res);

Rescato cuantas filas devolvio la consulta, cuantos almacenes tenemos.


echo "<script language='javascript'> var almacencito= new Array($i); </script>";
echo "<script language='javascript'>var ciudad = new Array($i); </script>";


Defino desde el codigo php dos arreglos que tengan por tamaño tantas filas tiene la consulta.
Y cargo cada campo del arreglo de javascript con cada campo de la consulta que esta en php.

while($f=mysqli_fetch_array($res)){
$temporal=$f['ciudad'];
echo "<script language='javascript'>ciudad[$i]='$temporal';</script>";
$temporal=$f['almacen'];
echo "<script language='javascript'>almacencito[$i]='$temporal'; </script>";
$i++;
}



Asi cuando ya se ha seleccionado el campo ciudad una funcion javascript llena el combo almacen.

function almacen()
{
var i=0;
var k=0;
var j= document.f1.ciudad.selectedIndex;
while(i<ciudad.length)
alert(document.f1.ciudad.selectedIndex+" "+i.toString()+" "+almacencito[i].toString());
if(document.f1.ciudad.options[j].text==ciudad[i])
{
document.f1.Almacen.length=k+1;
document.f1.Almacen.options[k].value=almacencito[i].toString();
document.f1.Almacen.options[k].text=almacencito[i].toString();
k++;
}
i++;
}
}


Se que existen formas mas eficientes y sofisticadas de hacer esto, pero esta me saco de un apuro.

No hay comentarios: