29Jul2008
Archivado en: JavaScript, PHP, Programación, Recursos
Autor: jjeb
Antes que nada, hola a todos este es mi primer post en el blog y espero no sea el ultimo porque desde hoy voy a colaborar aquà esperando que la información publicada sea de ayuda a todos.
Y pues empezamos, la idea es crear un script que al seleccionar el paÃs nos muestre un combo con los estados de este y al seleccionar un estado nos muestre las ciudades del estado, aquà un ejemplo:
Ejemplo
Esto utilizando Jquery, php y Mysql, el código que aquà se utilizara es utilizando una pequeña clase para uso de mysql que hice hace algunos dÃas y que pueden encontrar aquÃ, aunque en los archivos de descarga pondré los 2 utilizando la clase y sin ella.
Bueno para empezar mi base de datos se llama poblaciones y estas son las tablas que necesitamos:
MySQL:
-
PaÃs:
-
CREATE TABLE `pais` (
-
`idpais` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-
`pais` VARCHAR(50) DEFAULT NULL,
-
PRIMARY KEY USING BTREE (`idpais`)
-
) ENGINE=MyISAM;
-
-
Estado:
-
CREATE TABLE `estado` (
-
`idestado` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-
`estado` VARCHAR(50) DEFAULT NULL,
-
`pais` INT(11) NOT NULL DEFAULT '0',
-
PRIMARY KEY USING BTREE (`idestado`)
-
) ENGINE=MyISAM;
-
-
Ciudad:
-
CREATE TABLE `ciudad` (
-
`idciudad` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-
`ciudad` VARCHAR(50) NOT NULL DEFAULT '',
-
`estado` INT(11) NOT NULL DEFAULT '0',
-
`pais` INT(10) UNSIGNED NOT NULL DEFAULT '0',
-
PRIMARY KEY USING BTREE (`idciudad`)
-
) ENGINE=MyISAM;
y este código de la pagina donde estarán nuestros combos:
"com_dependientes.php"
PHP:
-
<?php
-
include("mysql_inc.php");
-
$mysql = new MySql_Class;
-
$mysql->user="root";
-
$mysql->password="root";
-
$mysql->db="poblaciones";
-
$mysql->server="localhost";
-
$mysql->conection();
-
?>
-
<script src="js/jquery.js"></script>
-
<script>
-
$(document).ready(function(){
-
$("select").change(function(){
-
// Vector para saber cuál es el siguiente combo a llenar
-
-
var combos =
new Array();
-
combos['pais'] = "estado";
-
combos['estado'] = "ciudad";
-
// Tomo el nombre del combo al que se le a dado el clic por ejemplo: paÃs
-
posicion = $(this).attr("name");
-
// Tomo el valor de la opción seleccionada
-
valor = $(this).val()
-
// Evaluó que si es paÃs y el valor es 0, vacié los combos de estado y ciudad
-
if(posicion == 'pais' && valor==0){
-
$("#estado").html(' <option value="0" selected="selected">----------------</option>')
-
$("#ciudad").html(' <option value="0" selected="selected">----------------</option>')
-
}else{
-
/* En caso contrario agregado el letreo de cargando a el combo siguiente
-
Ejemplo: Si seleccione paÃs voy a tener que el siguiente según mi vector combos es: estado por qué combos [paÃs] = estado
-
*/
-
$("#"+combos[posicion]).html('<option selected="selected" value="0">Cargando...</option>')
-
/* Verificamos si el valor seleccionado es diferente de 0 y si el combo es diferente de ciudad, esto porque no tendrÃa caso hacer la consulta a ciudad porque no existe un combo dependiente de este */
-
if(valor!="0" || posicion !='ciudad'){
-
// Llamamos a pagina de combos.php donde ejecuto las consultas para llenar los combos
-
$.post("combos.php",{
-
combo:$(this).attr("name"), // Nombre del combo
-
id:$(this).val() // Valor seleccionado
-
},function(data){
-
$("#"+combos[posicion]).html(data); //Tomo el resultado de pagina e inserto los datos en el combo indicado
-
})
-
}
-
}
-
})
-
})
-
</script>
-
<form id="form1" name="form1">
-
<div>
-
<select name="pais" id="pais">
-
<option selected="selected" value="0">---------</option>
-
<?
-
$query = $mysql->query("SELECT * FROM pais");
-
if($query["amount"]>0){
-
foreach($query["data"] as $rs){
-
?>
-
<option value="<?=$rs["idpais"]?>"><?=$rs["pais"]?></option>
-
<?
-
}
-
}
-
?>
-
</select>
-
</div>
-
-
<div>
-
<select id="estado" name="estado">
-
<option value="0" selected="selected">----------------</option>
-
</select>
-
</div>
-
-
<div>
-
<select id="ciudad" name="ciudad">
-
<option value="0" selected="selected">-------------------</option>
-
</select>
-
</div>
-
</form>
y este es el código de "combos.php" :
PHP:
-
<?
-
include("mysql_inc.php");
-
$mysql = new MySql_Class;
-
$mysql->user="root";
-
$mysql->password="root";
-
$mysql->db="poblaciones";
-
$mysql->server="localhost";
-
$mysql->conection();
-
$idcombo = $_POST["id"];
-
$action =$_POST["combo"];
-
switch($action){
-
case "pais":{
-
$query =$mysql->query("SELECT idestado,estado FROM estado WHERE pais = $idcombo order by estado ASC");
-
foreach($query["data"] as $rs)
-
echo '<option value="'.
$rs["idestado"].
'">'.
htmlentities($rs["estado"]).
'</option>';
-
break;
-
}
-
case "estado":{
-
$query =$mysql->query("SELECT idciudad,ciudad FROM ciudad WHERE estado= $idcombo order by ciudad ASC");
-
foreach($query["data"] as $rs)
-
echo '<option value="'.
$rs["idciudad"].
'">'.
htmlentities($rs["ciudad"]).
'</option>';
-
break;
-
}
-
}
-
?>
y por último acá los archivos aquà los archivos en descarga con la siguiente estructura:
conclase -> capeta con el script tal y como esta en este post
sinclase -> carpeta con el script sin el uso de la clase
combos_dependientes.sql -> Archivo de texto con las ciudades, estados de méxico, solo las tablas ustedes crean la base de datos e insertan estas y cambian el nombre de la base datos en el script y listo tiene que funcionar de la mejor manera.
Date una vuelta por mi Blog para más ejemplos
-> http://jjeb.wordpress.com/
yo
September 8th, 2008 at 5:32 pm
Soy un mensaje!
luis
September 12th, 2008 at 4:57 am
Trato de realizar un combo dependiente y lo primero que trato es de entender tu ejemplo. El problema es que no me funciona, me indica el error:
Error en tiempo de ejecución se esperaba un objeto le digo continuar al navegador y me muestra los tres menús y en el primero la ciudad de México pero los otros dos menús no se cargan.
Concretamente se para en la lÃnea 49 del archivo com_dependientes.php depuse de llamar a combo.php .
Me puedes decir el por que.
Ante todo te mando un saludo por tu gran esfuerzo y agradecerte tu interés.
Saludos, Luis
jjeb
September 15th, 2008 at 3:50 pm
@luis: Te paso mi correo electrónico para resolver tu problema:
puru28(at)hotmail.com
Ronald Santizo
September 18th, 2008 at 8:47 am
Yo tuve el mismo problema, pero si puedes revisar los archivos descargados no incluyen la carpeta JS y el archivo jsquery.js. Yo lo obtuve de la pagina del ejemplo:
http://jjeb.aimsi.org/code/js/jquery.js
crea la carpeta y copia y pega el contenido del js en un archivo del mismo nombre y corre de maravilla… Muy bueno y muy bien explicado.
luis
September 18th, 2008 at 10:52 am
Efectivamente Ronald es eso, me no tenia la carpeta js con el archivo jquery.js, ahora va de maravilla, gracias Ronal y JJeb por vuestro interes y ayuda.
Saludos
yazmin
October 20th, 2008 at 12:33 pm
definitivamente ese codigo sirve mucho
gracias a todos!!}
andrea
November 17th, 2008 at 5:06 am
como podria cambiar esto como tabla dbf
anonimo
November 19th, 2009 at 8:39 am
discupa kiero un ejemplo de algun ejercio de delphi, utilizando la sentencia if pero en un combo
gracias