Foros del Web » Programando para Internet » Javascript »

Ayuda con esto

Estas en el tema de Ayuda con esto en el foro de Javascript en Foros del Web. Hola a todos, resulta que tengo este sencillo ejemplo de listas dependientes con un código que encontre y lo modifique a mis necesidades, el cual ...
  #1 (permalink)  
Antiguo 15/12/2010, 18:52
 
Fecha de Ingreso: marzo-2009
Mensajes: 132
Antigüedad: 15 años, 1 mes
Puntos: 8
Ayuda con esto

Hola a todos, resulta que tengo este sencillo ejemplo de listas dependientes con un código que encontre y lo modifique a mis necesidades, el cual es el siguiente:

Código PHP:
<?php require_once('Connections/pailinea.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Listas Dinamicas</title>
<script language="javascript">
function ComponerLista(xPro) {
document.forms.frmDatos.selCiudades.disabled = true;
document.forms.frmDatos.selPropiedades.length = 0;
CargarPropiedades(xPro);
document.forms.frmDatos.selCiudades.disabled = false;
}
function CargarPropiedades(xCiu) {
var o
document.forms.frmDatos.selPropiedades.disabled=true;
<?php
$tablaPropiedades 
mysql_query('SELECT * FROM ciudades ORDER BY nombre ASC');
while (
$registroPropiedad mysql_fetch_array($tablaPropiedades)) {
?>
if (xCiu == <?php echo $registroPropiedad["cod_departamentos"]; ?>) {
o = document.createElement("OPTION");
o.text = '<?php echo $registroPropiedad["nombre"]; ?>';
o.value = <?php echo $registroPropiedad["cod_ciudades"]; ?>;
document.forms.frmDatos.selPropiedades.options.add (o);
}
<?php
}
mysql_free_result($tablaPropiedades);
?>
document.forms.frmDatos.selPropiedades.disabled=false;
}
</script>
</head>
<body>
<form id="frmDatos" name="frmDatos" method="post" action="">
<label>Puestos de Salud:
<select name="selCiudades" size="6" id="selCiudades" onchange="ComponerLista(document.forms.frmDatos.selCiudades[selectedIndex].value);">
<?php
$tablaCiudades 
mysql_query('SELECT * FROM departamentos ORDER BY nombre ASC');
while (
$registroCiudad mysql_fetch_array($tablaCiudades)) {
?>
<option value="<?php echo $registroCiudad['cod_departamentos']; ?>"><?php echo $registroCiudad['nombre']; ?></option>
<?php
}
mysql_free_result($tablaCiudades);
?>
</select>
</label>
<label>Centro de Costos:
<select name="selPropiedades" size="6" id="selPropiedades">
</select>
</label>
</form>
</body>
</html>

</body>
</html>
Como pueden ver tengo una BD con dos Tablas, una llamada deparrtamentos y la otra ciudades, segunda llama a la primera.
La cuestión e la siguiente:
Al dar click sobre un departamento este llama a la ciudad que pertenecen a él, pero con este codigo solo los dos primeros departamentos hacen esa operacion bien, del tercero al último (les comento que tengo como 10 Departamentos) no me muestra las ciudades.

Por favor si alguien me puede ayudar o decirme donde esta el error se los agradeceria..

Gracias...
  #2 (permalink)  
Antiguo 16/12/2010, 08:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ayuda con esto

Ante todo estamos en el foro de javascript y lo que has mandado es una mezcla de php y javascript.

No se si eres consciente de que php trabaja del lado servidor y javascript del lado cliente...

Código PHP:
Ver original
  1. <?php require_once('Connections/pailinea.php'); ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. <title>Listas Dinamicas</title>
  7. <script language="javascript">
  8. function ComponerLista(xPro) {
  9. document.forms.frmDatos.selCiudades.disabled = true;
  10. document.forms.frmDatos.selPropiedades.length = 0;
  11. CargarPropiedades(xPro);
  12. document.forms.frmDatos.selCiudades.disabled = false;
  13. }
  14. function CargarPropiedades(xCiu) {
  15. var o
  16. document.forms.frmDatos.selPropiedades.disabled=true;
  17. <?php
  18. $tablaPropiedades = mysql_query('SELECT * FROM ciudades ORDER BY nombre ASC');
  19. while ($registroPropiedad = mysql_fetch_array($tablaPropiedades)) {
  20. ?>
  21. if (xCiu == <?php echo $registroPropiedad["cod_departamentos"]; ?>) {
  22. o = document.createElement("OPTION");
  23. o.text = '<?php echo $registroPropiedad["nombre"]; ?>';
  24. o.value = <?php echo $registroPropiedad["cod_ciudades"]; ?>;
  25. document.forms.frmDatos.selPropiedades.options.add (o);
  26. }
  27. <?php
  28. }
  29. mysql_free_result($tablaPropiedades);
  30. ?>
  31. document.forms.frmDatos.selPropiedades.disabled=false;
  32. }
  33. </script>
  34. </head>
  35. <body>
  36. <form id="frmDatos" name="frmDatos" method="post" action="">
  37. <label>Puestos de Salud:
  38. <select name="selCiudades" size="6" id="selCiudades" onchange="ComponerLista(document.forms.frmDatos.selCiudades[selectedIndex].value);">
  39. <?php
  40. $tablaCiudades = mysql_query('SELECT * FROM departamentos ORDER BY nombre ASC');
  41. while ($registroCiudad = mysql_fetch_array($tablaCiudades)) {
  42. ?>
  43. <option value="<?php echo $registroCiudad['cod_departamentos']; ?>"><?php echo $registroCiudad['nombre']; ?></option>
  44. <?php
  45. }
  46. mysql_free_result($tablaCiudades);
  47. ?>
  48. </select>
  49. </label>
  50. <label>Centro de Costos:
  51. <select name="selPropiedades" size="6" id="selPropiedades">
  52. </select>
  53. </label>
  54. </form>
  55. </body>
  56. </html>
  57.  
  58. </body>
  59. </html>

El resultado de las lineas 17 a 20 és una array (matriz) de php por tanto esta en el lado servidor no en el lado cliente.

Si entre las lineas 19 y 20 introduces esta linea quizas entenderas por que no te funciona:

print_r($registroPropiedad);

Esto nos hace una impresion del contenido del array, veras algo así

Array([0]->Array([campo]->[valor]...primer registro obtenido por la consulta)
[1]->Array([campo]->[valor]...segundo registro obtenido por la consulta)
...
)

Un array de arrays, en otras palabras una matriz multidimensional, por tanto para acceder al campo "cod_departamentos" del registro X se debe hacer de la siguiente manera

$registroPropiedad[X]["cod_departamentos"]

de ahi ya puedes intuir algun error que tienes.

Pero el peor error es intentar acceder desde javascript a un array php, simplemente ese array no esta en la maquina donde se ejecuta javascript si no en el servidor... por tanto NO PUEDES ACCEDER A EL.

Javascript y php no se ejecutan en el mismo momento. En el caso que nos ocupa en el momento que actua javascript el array php ya no existe!!!

Es decir, cuando pides cargar la pagina el cliente manda una peticion al servidor, este ejecuta las partes php de tu codigo y confecciona un resultado estatico que manda al cliente, en este momento el cliente puede trabajar mediante javascript con lo que le ha mandado el servidor, como las lineas 17 a 20 no dan ningun resultado "imprimible" el cliente no recibe nada luego no podrá acceder a nada...

Si miras el codigo funte de la pagina mediante la opcion de tu navegador (en FIREFOX botón derecho>Código fuente de la pagina) verás lo que se ha recibido...

Antes de acceder debes pedir al servidor que pase los datos al lado cliente, creando un array multidimensional javascript con el contenido del array php. Luego javascript podrá acceder al array y todo funcionará...


Pasar array de php a javascript

Despues tendrás que modificar el javascript para que acceda a los valores del array javascript...

Intentalo, y cuando te encalles en algo pregunta.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 17/12/2010 a las 05:20

Etiquetas: Ninguno
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 19:05.