Supongo que este tema lo estoy poniendo en el foro correcto, si no es así por favor moverlo.
Veréis tengo el siguiente código que me relaciona 3 selects, dependiendo de lo que selecciono en el primero "Provincias" me rellena el segundo "Poblaciones" y dependiendo de la selección del segundo me rellena el tercero "Zonas".
El código lo saque de la red y lo modifique porque el original no funcionaba pero incluso no funciona bien del todo y me gustaría solucionar los problemas que presenta ya que nos serviría a todos para poder utilizarlo a posteriori.
Pongo la dirección donde se puede ver como funciona, en esa dirección solo existe esta parte de código con el fin de que se pueda ver como funciona.
http://www.necesitopiso.com
Primer problema cuando se selecciona una provincia y no existen poblaciones activa el Alert que lleva, lo mismo ocurre cuando se selecciona una población en la que no existen zonas definidas en la base de datos, el primer caso se da excepcionalmente, todas las provincias tienen poblaciones, pero el segundo se da con bastante frecuencia, poblaciones pequeñas que no tienen zonas definidas, por lo cual salta el alert. OJO EN LOCAL NO SALTAN LOS ALERTS. Hay una provincia que no tiene poblaciones que es "Asturias" lo he hecho a proposito para que se vea el funcionamiento.
Segundo problema si se selecciona provincia, población y zona al cambiar de provincia no se rellena con las nuevas poblaciones y con las zonas pasa lo mismo hasta que se selecciona una nueva población y lo lógico es que al cambiar de provincia, se rellene de nuevo con las poblaciones y el select zona pase a "Todas las Zonas" hasta que se seleccione una población y entonces muestre las zonas que corresponden a la población seleccionada si las tiene, si se quiere ver como funciona con poblaciones y zona seleccionar Provincia "Valencia", Población "Valencia" y aparecerán las zonas dadas de alta.
Espero que me podáis ayudar ya que en JavaScript estoy un poco verde y supongo que es ahí donde esta el problema, Gracias.
INDEX.php
Código PHP:
Ver original
<?php $_SESSION["Provincia"]="Todas las provincias"; $_SESSION["Poblacion"]="Todas las poblaciones"; $_SESSION["Zona"]="Todas las zonas"; ?> <!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=utf-8" /> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <link rel="stylesheet" href="Css/Inicio.css" type="text/css"> <script type="text/javascript"> $(document).ready(function(){ cargar_paises(); $("#selprovincia").change(function(){dependencia_estado();}); $("#estado").change(function(){dependencia_ciudad();}); $("#estado").attr("disabled",true); $("#ciudad").attr("disabled",true); }); function cargar_paises() { $.get("scripts/cargar-paises.php", function(resultado){ if(resultado == false) { alert("Este error no aparece"); } else { $('#selprovincia').append(resultado); } }); } function dependencia_estado() { var code = $("#selprovincia").val(); $.get("scripts/dependencia-estado.php", { code: code }, function(resultado) { if(resultado == false) { alert("Este error es el numero 1"); } else { $("#estado").attr("disabled",false); document.getElementById("estado").options.length=1; $('#estado').append(resultado); } } ); } function dependencia_ciudad() { var code = $("#estado").val(); $.get("scripts/dependencia-ciudades.php?", { code: code }, function(resultado){ if(resultado == false) { alert("Este error es el número 2"); } else { $("#ciudad").attr("disabled",false); document.getElementById("ciudad").options.length=1; $('#ciudad').append(resultado); } }); } </script> </head> <?php require_once('Connections/Inmobiliaria.php'); ?> <body> <div id="ContenedorInicio"> <div id="FondoInicio"> <div id="CajaSeleccion"> <div id="BarraIzqCajaSeleccion"></div> <div id="BarraDchCajaSeleccion"></div> <div id="CabeceraCajaSeleccion">SELECCIONE la MODALIDAD, TIPO INMUEBLE, TIPO de OBRA y la PROVINCIA</div> <form name="Seleccion" id="Seleccion" method="GET" action="Distribucion.php"> <div id="TitularProvincia">Provincia</div> <div id="ProvinciaInicio"> <select id="selprovincia" name="selprovincia" class="Guias3"> <option class="MenuSelect" value="Todas las provincias">Todas las provincias</option> </select> </div> <div id="PoblacionInicio"> <select id="estado" name="estado" class="Guias3"> <option class="MenuSelect" value="Todas las poblaciones">Todas las poblaciones</option> </select> </div ><div id="ZonaInicio"> <select id="ciudad" name="ciudad" class="Guias3"> <option class="MenuSelect" value="Todas las Zonas">Todas las zonas</option> </select> </div ><div id="BotonBuscar"> <input type="submit" name="cmdBuscar" id="cmdBuscar" value="BUSCAR LO SELECCIONADO"> </div> </form> </div> <!-- Cierro CajaSeleccion--> </div> <!-- Cierro Fondo Inicio --> <div id="DerReservadosInicio" class="Guias3">©www.necesitopiso.com - Todos los derechos reservados 2014 -2015</div> </div><!-- Cierro ContenedorInicio --> </body> </html>
SCRIPT/cargar-países.php
Código PHP:
Ver original
<?php include("clases/class.mysql.php"); include("clases/class.combos.php"); $selects = new selects(); $paises = $selects->cargarPaises(); foreach($paises as $key=>$value) { echo "<option value=\"$key\">$value</option>"; } ?>
SCRIPT/Dependencia-ciudades.php
Código PHP:
Ver original
<?php include("clases/class.mysql.php"); include("clases/class.combos.php"); $ciudades = new selects(); $ciudades->code = $_GET["code"]; $ciudades = $ciudades->cargarCiudades(); foreach($ciudades as $key=>$value) { echo "<option value=\"$key\">$value</option>"; } ?>
SCRIPT/Dependencia-estado.php
Código PHP:
Ver original
<?php include("clases/class.mysql.php"); include("clases/class.combos.php"); $estados = new selects(); $estados->code = $_GET["code"]; $estados = $estados->cargarEstados(); foreach($estados as $key=>$value) { echo "<option value=\"$key\">$value</option>"; } ?>
CLASES/Class.combos.php
Código PHP:
Ver original
<?php { var $code = ""; function cargarPaises() { $consulta = parent::consulta("SELECT Name,Code FROM tb_provincias ORDER BY Name ASC"); $num_total_registros = parent::num_rows($consulta); if($num_total_registros>0) { while($pais = parent::fetch_assoc($consulta)) { $code = $pais["Code"]; $name = $pais["Name"]; $paises[$code]=$name; } return $paises; } else { return false; } } function cargarEstados() { $consulta = parent::consulta("SELECT Name FROM tb_poblaciones WHERE Provincia = '".$this->code."'"); $num_total_registros = parent::num_rows($consulta); if($num_total_registros>0) { while($estado = parent::fetch_assoc($consulta)) { $name = $estado["Name"]; $estados[$name]=$name; } return $estados; } else { return false; } } function cargarCiudades() { $consulta = parent::consulta("SELECT Name FROM tb_zonas WHERE Province = '".$this->code."'"); $num_total_registros = parent::num_rows($consulta); if($num_total_registros>0) { while($ciudad = parent::fetch_assoc($consulta)) { $name = $ciudad["Name"]; $ciudades[$name]=$name; } return $ciudades; } else { return false; } } } ?>
CLASES/class.mysql.php
Código PHP:
Espero me podáis ayudar muchas gracias Ver original
<?php class MySQL { var $conexion; { { } mysql_query("SET NAMES 'utf8'");// esto se ha añadido para que salgan bien los acentos en los selects } function consulta($consulta) { if(!$resultado) { exit; } return $resultado; } function fetch_array($consulta) { } function num_rows($consulta) { } function fetch_row($consulta) { } function fetch_assoc($consulta) { } } ?>