Combobox dependientes de Pais, Estado y Ciudad con PHP, MySQL, jQuery y un poco de AJAX

Mi aporte de hoy es un ejemplo muy artesanal de como hacer Combobox dependientes ó Selects dependientes de País, Estado y Ciudad con PHP, MySQL, jQuery y un poco de AJAX.
De entrada es necesario tener un par de querys para generar las tablas necesarias y los datos que contendran esas tablas, estos me los encontre en un hilo de foros del web, uno y otro.
Scripts en PHP para la conexion a la base de datos y el manejo de los datos extraidos, jQuery para el AJAX y el manejo del DOM en nuestro documento.
Mientras buscaba una solución rápida y práctica encontré algunos ejemplos pero me parecieron sucios y difícil de entenderlos a la primera, mi esfuerzo tiene la intención de buscar la manera más simple y clara de hacerlo.
- Demo: http://www.drbizarre.net/tester/selects/
- Archivos: Descargar


Comentarios
Ever [23-jun-2009]
hey q onda bro.. estuve revisando tu gran aportaso y realmente es sencillisimo pero tengo un problema a la hora de implementarlo lo que pasa es que kiero saber en el archivo class.mysql.php a la hora de conectarlo a la base de datos, el nombre de tu base de datos es location kiero imaginarme entonces lo q yo hago es cambiar el nombre por el de mi base de datos pero en el combo me sale un mensaje que dice Unknown database'location' quisiera donde esta mi error...Lo que pasa es q lo kiero implementar para un trabajillo pero yo empieso desde estado, jurisdiccion, municipio y localidad no se si podrias auxiliarme por favor mi bro... Muchas gracias!!!! buen aporte es muy facil de entender...Dr. Bizarre [26-jun-2009]
Ever que onda, Lo ms probable es que la conexin a la bdd est fallando. Si an no encuentras solucin, hazmelo saber.Por IM me encuentras en dr.bizarre@hotmail.com, drbizarre@gmail.com, sino enviame a oscar@drbizarre.net tus dudas.Saludos.Ever [30-jun-2009]
Ok.. ya te agregue en mi msn para estar mas en contacto ojala puedas aceptarme y poder resover mis duditas... creo q ya resolvi unos detalles ya me funcinan los dos primeros combos pero el tercero no... me podrias hechar la mano por favor te lo agradeceri muchisimo... mi correo es ever_foxy@hotmail.com... de ante mano muchas gracias!!!! :)Dr. Bizarre [01-jul-2009]
Listo Ever, ya te agregue. Te veo en linea.Ever [01-jul-2009]
que onda oye me podrias decir en q horario te podria encontrar para resolver las dudas por favor.... Gracias!!!Pepe [14-jul-2009]
Excelente, muy etendible, ya de hecho depur el mio pero tiene un gran problema el script, selecciona digamos "Mexico", luego "Distrito Federal" y sorpresa, carga todas las provincias del mundo (venezuela, argentina, mxico, etc.) relacionadas con la tabla. Estoy buscando la forma en que se relacione de mejor forma la tabla pero no lo he conseguido pues las consultas corren dentro de funciones.Skandelabro [15-jul-2009]
hola saludos ...esta muy bueno el ejemplo..pero igual tengo ataos...me gustaria saber si solucionaron lo que comenta el socio del post de arriba...bueno saludos nos vemos y wajajajajaja espero respondan adios :)Dr. Bizarre [26-jul-2009]
#Pepe: Gracias carnal, rienes razon no me habia fijado en esa error. Se que es un problema de la tabla, vamos viendo como reparamos eso.#Skandelabro:Gracias hermano, vamos a solucionarlo.Gilberto [27-jul-2009]
Yeah. You example is great. Could you send to me your database's script, I think is great your db.Dr. Bizarre [28-jul-2009]
#Gilberto:http://www.dbis.informatik.uni-goettingen.de/Mondial/mondial-inputs-mysql.sql
http://www.dbis.informatik.uni-goettingen.de/Mondial/mondial-schema-mysql.sql
Ever [03-ago-2009]
Que onda man como estas.. espero que te acuerdes de mi soy de nayarit oye cuando estaras conectado para preguntarte sobre unos detalles....espero puedas auxiliarme.. gracias!!!!!Ever [07-ago-2009]
Que onda man la duda por la que te he estado buscando es por que a la hora de guardar el valor de los selects en la base de datos los guarda con el id o clave no se si podrias a ayudarme a que en ves de almacenar eso me almacenara el nombre o la descripcion... GRACIAS!!!!!Ever [11-ago-2009]
Alguien que me pueda ayudar porfavor oscar parece q anda de vacaciones... jejejej de verdad solo kiero resolver unos problemillas sobre estos selects soy nuevo en esto y la neta q necesito q me ayuden de verdad se los agradecere....Dr. Bizarre [11-ago-2009]
Ever que onda wey, una disculpa hermano pero mi dekstop andaba fallando culpa de un disipador de chipset chafon.Pero aqui ando.
En relacion a tu problema, la solucion esta en javascript, en la funcion donde envias el parametro, en lugar de enviar el 'value', envias el 'text' del option.
Aqui puedes encontrar mas ayuda para eso.
http://www.mredkj.com/tutorials/tutorial002.html Ojala logres resolver, sino aqui andamos, saludos.
Ever [12-ago-2009]
Que onda carnal.. no hay problema pero q bueno que te pudiste comunicar.. gracias voy a checar eso a ver si puedo ya casi no te conectas man a ver si te veo conectado por ahi sale nos vemos y aludos a la pekeña...Ever [13-ago-2009]
Que onda man pues aki con la novedad de q no he podido soulucionar este detalle q te comente no se si podrias auxiliarme mas ya ves q casi no conosco muy bien esto hasta ahorita de verdad te lo agradeceria... GRACIAS!!!Jg [08-sep-2009]
hola, estoy necesitando bastante esta aplicacion, pero en el link de descarga parece que esta roto, sera que me podrias pasar los archivo de conexion y el resto que falta...graciasDr. Bizarre [08-sep-2009]
Jg, una disculpa por le link roto, hoy por la noche reparo eso. Gracias por el aviso.Espero te sirva, cualquier duda aqui estamos.
Jg [09-sep-2009]
hola Dr. Bizarregracias por reparar el link, me fue de mucha ayuda.
estoy desarrolando una aplicacion con varios modulos, y uno de esos me tiene algo preocupado, ya que necesito implementar un foro en php a mi aplicacion pero no tengo idea de como hacerlo.
( tendria que ser sin login ya que mi aplicacion ya tiene un login )
si me pudieras ayudar te lo agradeceria en grande
cordialmente
jg
Dr. Bizarre [09-sep-2009]
Jg, que bien que te sirvio.En relacion a lo de tu aplicacion y la implentacion que quieres
hacer de un foro, segun mi experiencia habra que analizar si la implementacion
es lo mas conveniente, la forma de autentificacion
de uno u otro puede variar y ahi es donde viene la decisión.
Realmente la operación de un foro no es complicada, si ya tienes definidos usuarios y niveles
en tu aplicacion, facilmente podras integrar de manera independiente
la funcionalidad de foro.
Categorias, preguntas y respuestas son la estructura basica de un foro, los detalles vienen despues, como moderacion y creacion de grupos de usuarios etc.
Espero haber clarificado tu idea.
Saludos, ya te agregue en IM.
Mbyte.tk [04-nov-2009]
ayuda tengo un ejemplo de combo dependiente pero se relacionan mediante el id, al momento que mando el formulario para que se guarde en la base de datos guarda los numeros con los que se realcionan no con los datos que muestra el combo....Mbyte.tk [04-nov-2009]
function conexion(){
if (!($link=mysql_connect("localhost","admin","admin"))){
die("Error conectando a la base de datos.");
}
if (!$link=mysql_select_db("ciudad",$link)){
die("Error seleccionando la base de datos.");
}
return($link);
}
$conection = conexion();
$idcombo = $_POST["id"];
$opcionSeleccionada=$_GET["estado"];
$action =$_POST["combo"];
switch($action){
case "edo":{
$res = mysql_query("SELECT idestado,estado FROM estado WHERE pais = $idcombo order by estado ASC");
while($rs = mysql_fetch_array($res))
echo '';
break;
}
case "mun":{
$res = mysql_query("SELECT idciudad,ciudad FROM ciudad WHERE estado= $idcombo order by ciudad ASC");
while($rs = mysql_fetch_array($res))
echo '';
break;
}
}
?>
este es mi codigo mmm me imagino que se podria con una variable session lo malo que como soy aprendis de php nose como hacerlo... espero su ayuda gracias
Dr. Bizarre [04-nov-2009]
Mbyte.tk,La propiedad 'value' del elemento 'option', es la que contiene el valor que pasas a los demas combos para que muestren los resultados en funcion a la relacion que tengas en tus tablas.
Sino mal entiendo tu problema, estas imprimiendo en el 'value' un valor que no requieres para tu query, te recomiendo revises la parte donde imprimes los 'select'.
Creo que no estas usando mi ejemplo, te invito que lo pruebes.
Hpkrawzm [18-nov-2009]
Me ayudo muchísimo tu aporte, además super claro, gracias!!!!Rigo [08-dic-2009]
hola amigos se ve interesante, intente bajar el archivo pero al parecer en el no viene la base de datos que se utiliza, no se si alguien me la podria proporcionar y ver mas detalladamente como funcionasaludos a todos y de ante mano muchisimas gracas por la portacion
excelente trabajo
Dr. Bizarre [09-dic-2009]
@Rigo,Aqui te paso ligas hacia los querys que necesitas para crear la base de datos, tablas y sus registros.
http://www.dbis.informatik.uni-goettingen.de/Mondial/mondial-schema-mysql.sql
http://www.dbis.informatik.uni-goettingen.de/Mondial/mondial-inputs-mysql.sql
Cualquier duda, aqui andamos.
Cosacu [10-dic-2009]
Hola buenas,estoy peleándome con tu código para implementarlo en una web, ya que con otro que tenía me ralentizaba mucho la búsqueda.
Mi intención es que al hacer submit de un form, se mantengan los datos seleccionados en el combo y que no vuelva a valor = 0.
El tema es que necesitaria que según un valor dado por una variable de sesion, el combo se mantuviera "selected". El problema es que no me acepta la variable de sesión. Es como si no exisitiera esa sesión. No sé mucho de js, pero no entiendo como es que no me deja usar el valor de la sesion en el código de cargar-estados.php
foreach (......){
if($_SESSION['provincias'] == $key){
$selected = " selected='selected'";
}
echo "";
}
A ver si me das alguna pista...
Gracias!
Dr. Bizarre [10-dic-2009]
@Cosacu,"Es como si no exisitiera esa sesión. "
Probablemente no exista la sesion en cargar-estados.php
Verifica si existe la variable de la siguiente forma:
isset($_SESSION['provincias'])
Si existe, deberia hacer la comparacion, sino
session_start();
Muy probablemente te falte inicializar sesion con esa funcion.
Estamos al tanto.
Cosacu [11-dic-2009]
Gracias por tu ayuda!Efectivamente me faltaba el session_start();
¡Qué despiste! Tendré que descansar un poco...
Una última consulta, si no te importa.
En estados sí que puedo hacer un "selected" según su valor después de un refresh, pero no puedo con los que dependen de estados, en mi caso municipios, ya que hasta que estados no hace un "onChange" no se carga la información de municipios.
¿Tienes alguna idea de cómo poder hacer esto?
Mi intención es que al hacer submit la página se recarga (lo utilizo para un búsqueda de registros), y me gustaria no tener que seleccionar cada dos por tres estado y municipio. Me gustaria que ya estuviesen seleccionados.
Perdona por mi atrevimiento en preguntar.
Muchas gracias de antemano!
Un saludo.
Dr. Bizarre [11-dic-2009]
@Cosacu,Se me ocurren muchas formas de resolver pero te platico la que tengo mas en mente.
1. Crear una variable tipo array y asignarla a una variable de sesion.
$_SESSION['ubicacion'] = array('pais'=>0,'estado'=>0,'ciudad'=>0);
2. Al cargar la pagina donde tienes los combos, verificar la existencia de $_SESSION['ubicacion'] y su contenido
$ubicacion = $_SESSION['ubicacion'];
$ubicacion["pais"]
$ubicacion["estado"]
$ubicacion["ciudad"]
3. Si existe y si es diferente que cero entonces imprimes una funcion javascript para que cargue los datos en determinado combo segun la variable que le pases
cargar_paises(23);
cargar_estados(12);
cargar_ciudades(32);
A ver que opinas de mi idea, cualquier cosa aqui ando.
Eduardo [25-dic-2009]
Hola muy buen tutorial, aplicando jquery, php y mysql, una duda que tengo y que estoy pasando, imaginemos que estos datos son grabados en bbdd, el de escoger, pais, estado y cuidad en una tabla y quedan guardados y si quiero editar esta selección (imaginamos que escoges pais españa estado madrid y ciudad madrid) y le damos a un botón de guardar y luego queremos editar esta selección como llenamos los datos para que vuelvan a quedar los combos como antes (españa, madrid, madrid)Espero se entienda, saludos...
Dr. Bizarre [27-dic-2009]
@Eduardo, revisa la situacion de @Cosacu, no es una solucion especifica pero quizas aclara un poco tu vision.Ale [05-ene-2010]
Hola! Muy bueno el codigo lo estoy probando en un sitio y estoy comparando los pasises con una base de datos logor comparar el primero para que me quede seleccionado (selected) pero no me pasas las variables me interesa este punto3. Si existe y si es diferente que cero entonces imprimes una funcion javascript para que cargue los datos en determinado combo segun la variable que le pases
cargar_paises(23);
cargar_estados(12);
cargar_ciudades(32);
A ver que opinas de mi idea, cualquier cosa aqui ando.
como sería la funcion javascript paraque cargue los valores que le paso
muchas gracias y saludos
Tinchos [10-ene-2010]
Hola, primero te felicito por el codigo, muy bueno y gracias por compartirlo.Te pido ayuda, ya que me da un error en el tercer combo, al cargar las ciudades, el error es:
Warning invalid argument supplied foreach() in dependencias-ciudades.php linea 7
Parece que no me ejecuta la ultima consulta, probe con ponerle un valor en vez de this->code y funciona...
Gracias desde ya....
Dr. Bizarre [10-ene-2010]
@Tinchos: Que bien que te ayudo el script Martin, saludos hasta Misiones Argentina.Dr. Bizarre [10-ene-2010]
@Ale, estoy por actualizar el script, paciencia por favor.Leo [13-ene-2010]
Hola Dr. como esta? mi problema es el siguiente. Estoy tratando de implementar el codigo suyo y tengo dificultad, en que me aparezcan las ciudades, los paises y las provincias aparecen, pero no las ciudades, me da el siguiente error. "invalid argument supplied for foreach. en dependencias-ciudades.php line 7"Mi idea de porque el error es poque ud usa code
y mis tablas de la bd son las siguientes:
pais:id_pais, pais.
provincia:id_provincia, id_pais, provincia.
ciudad: cod_postal, ciudad, id_provincia.
SI me dice que puedo cambiar para que funcionen los combos anidados se lo agradecere!!!
saludos! leo.
Dr. Bizarre [13-ene-2010]
Leo, revisa lo que estas desplegando en la propiedad 'value' de los options, si tus tablas usan una llave primaria integer como debe ser, entonces que el valor de estas llaves primarias sean las que se desplieguen.Cualquier cosa aqui andamos.
Leo [14-ene-2010]
Hola, yo nuevamente...no entiendo lo que deberia cambiar. Creo que el error es porque lo que devuelve dependencia-estados son losnombres de los estados y no los id_estados, por lo que despues no puedo usar id_estados para relacionarlo con la tabla ciudades que tambien tiene id_estados.igualmente no se como cambiar lo que me decis, asi que si me lo podrias decir mas especificamente o mostrarme lo que tengo q cambiar y porque valor cambairlo.
mis tablas en la bd son:
pais:id_pais, pais.
provincia:id_provincia, id_pais, provincia.
ciudad: cod_postal, ciudad, id_provincia.
gracias nuevamente!
saludos, leo.
Francisco [15-ene-2010]
Muchas gracias por el post Dr. Bizarre, me fue de gran ayuda!Lo agregué a una página, modifique las consultas y logré hacer una doble inyección (primero inyecté una tabla de datos, después los valores) usando jquery.
Un abrazo!
RAUL [16-ene-2010]
ESTE EJEMPLO ES MUY BUENOS,PERO HACE TIEMPOS DEJE DE USAR MYSQL POR EXIGENCIAS DE MI TRABAJO MIGRE A SQL,
SI EL EJEMPLO ESTARIA CON SQL ESTARÍA ESTUPENDO.
TOY TRATANDO DE ADAPTARLO A SQL.
Jartad [21-ene-2010]
@RAUL Mysql es un sistema de gestión de base de datos y SQL es el lenguaje que se usa para hacer consulta a base de datos relacionales. Así que toma su tiempo para preguntar :)Dr. Bizarre [21-ene-2010]
@Jartad, @Raul seguro quizo decir MSSQL, pero comodamente lo llama SQL.Cierto @Raul?
Espero compartas el script con acceso a MSSQL
Jhimmy [13-feb-2010]
hola exelente turorial lo estoy implementandoClaudio [20-feb-2010]
Hola como esta parece estar muy bueno este script en php pero como lo impemento. muchas gracias.. soy prencipiante en php pero me defiendo nada mas. SaludoDr. Bizarre [20-feb-2010]
@Claudio, hermano descarga los archivos ejemplo y juega con ellos, a ver que sale. Minimo un poco de entendimiento de javascript y como dices que te defiendes en php seguro entenderas el codigo.Saludos y quedo pendiente.
Heisler [28-feb-2010]
Ok veo muchos comentarios pero no leo un sencillo errorselecciona cualquier pais
luego vuelve a seleccionar
la opcion seleciona uno... del mismo combo pais
se produce un error
en el combo estado aparece:
warning invalid argument
Prueben y alguien me ayude a solucionar por fa.
en el mismo ejemplo de esta pagina se produce el error.
Dr. Bizarre [28-feb-2010]
@Heisler, gracias por el dato, no estaba validado cuando curiosamente seleccionabas la opcion de 'seleciona'.Agregar esta validacion asi:
$("#pais").change(function(){if(this.value!=0){dependencia_estado();}});
$("#estado").change(function(){if(this.value!=0){dependencia_ciudad();}});
Heisler [04-mar-2010]
gracias @BizarreEstoy en pañales con jquery
si hubiera leido un poco mas...
Excelente de nuevo gracias por el script
Vissiontotal [13-mar-2010]
Hola... he implementado el scrip em mi web... funciona a la perfeccion.......sólo que nomas esta él pais Mexico con sus estados y ciudades...
¿ De donde puedo Sacar mas paises con sus resectivos estados y ciudades tambien... para que quede mas completo...?
GRACIAs...........
Dr. Bizarre [13-mar-2010]
@Vissiontotal, la verdad no tengo idea donde encontrar el listado de paises.Messifan [17-mar-2010]
alguien me podria decir como guardar el valor seleccionado del combobox estado en la misma pagina al cambiar de item del combobox?es decir: por ejemplo, selecciono el primer estado i el selected value = 1..
cambio al segundo estado y el selected value = 2...como puedo acer para ke aga esto en la misma pagina?
gracias
Dr. Bizarre [17-mar-2010]
@Messifan: revisa el codigo javascript de los combos y notaras la llamada a un script mediante ajax para traer los registros que llenan los combos, de la misma forma puedes llamar un script pero para insertar datos en la tabla.Cualquiero duda, quedo pendiente.
Messifan [22-mar-2010]
Hola, me estuve mirando el codigo, pero no se exactamente que quieres decir. La verdad no tengo ni idea...Supongo que te referiras a esto:
function cargarProductos()
{
$consulta = parent::consulta("SELECT IdProducto,Descripcion FROM productos WHERE IdCategoria = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$productos = array();
while($producto = parent::fetch_assoc($consulta))
{
$code = $producto["IdProducto"];
$name = $producto["Descripcion"];
$productos[$code]=$name;
}
return $productos;
}
else
{
return false;
}
}
Donde, $productos[$code]=$name; es donde guardare el valor seleccionado del combobox productos, lo que no se como pasarlo a otra pagina llamada facturas.php
Pordias ser un poco mas concreto por favor?
Gracias de antemano!
Messifan [22-mar-2010]
Hola de nuevo,voy a esplicarme mejor:
lo que quiero es guadar el valor de 2 comboboxs en 2 variables (paises y estado, aunke yo los cambie de nombre y le puse categoria y productos), y mediante el boton de añadir, guardar los 2 values guardados en variables php de los combobox a la base de datos..por eso cuando selecciono el valor del combobox nose como gaurdar dicha variable en php para mandarla mediante el boton añadir a la base de datos...
nose si me explicado bien...
gracias de nuevo!
Diseño Web [19-abr-2010]
Vi el enlace y esta bien pero faltan datos en el campo Ciudad, al menos para PeruJotis [26-abr-2010]
hola me ha servido mucho tu codigo pero tengo problemas con el ultimo combobox no se carga la consulta mi programa es de provincia luego cuidad y por ultimo area pero me va cargando todo hasta cuidad perocon area me sale un error Invalid argument suppliet for foreach....por favor ayudame
gracias
Dr. Bizarre [26-abr-2010]
@jotis, si el foreach no recorre nada seguramente es porqueel valor regresado es inconsistente. Revisa manualmente el valor
regresado para identificar el error.
Jotis [27-abr-2010]
muchas gracias por tu ayuda... ya valio:)
Jotis [27-abr-2010]
Hola como puedo aumentar mas combobox??? necesito hacer 2 mas por favor ayudameDr. Bizarre [27-abr-2010]
@jotis,Revisando el codigo podras orientarte un poco mas como agregar 'n' combos.
Si te salen dudas intentando hacer, no dudes en pedir ayuda.
Jotis [28-abr-2010]
Muchas gracias por responder y ayudarme, ya intente agregar otros cambos pero no me funciona he agregado en la pag index.html:en la parte de $(document).ready(function(){....
$("#cuidad").change(function(){dependencia_entidad();});
....
});
despues he agregado esta funcion:
function dependencia_entidad()
{
var code = $("#ciudad").val();
$.get("scripts/dependencia-entidades.php?", { code: code }, function(resultado){
if(resultado == false)
{
alert("Error");
}
else
{
$("#entidad").attr("disabled",false);
document.getElementById("entidad").options.length=1;
$('#entidad').append(resultado);
}
});
y tambien cree una pag de dependencia-entidad.php:
include("clases/class.mysql.php");
include("clases/class.combos.php");
$entidades = new selects();
$entidades->code = $_GET["code"];
$entidades = $entidades->cargarEntidad();
foreach($entidades as $key=>$value)
{
echo "";
}
?>
en la pag de class.combos.php agregue:
function cargarEntidad()
{
$consulta = parent::consulta("SELECT nomb_entidad, id_entidad FROM entidad WHERE id_area = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$entidades = array();
while($ciudad = parent::fetch_assoc($consulta))
{
$code = $entidad["id_entidad"];
$name = $entidad["nomb_entidad"];
$entidades[$code]=$name;
}
return $entidades;
}
else
{
return false;
}
}
he hecho todo eso pero no se q mas debo hacer por favor ayudame muchas gracias por responder y por tu paciencia.
saludos
jotis
Dr. Bizarre [28-abr-2010]
@Jotis, cual es el error? tienes el codigo online para poder verlo?Jotis [29-abr-2010]
hola no me sale ningun error pero no me funciona el ultimo combo q esta creado osea se queda deshabilitado pero aunq le ponga habilitado por defecto no pasa nada es como q hiciera la consulta pero si esta bien la consultagracias
Dr. Bizarre [29-abr-2010]
@Jotis,En lugar de insertar el resultado de la consulta en el combo, prueba lanzandolo con un alert(), para asegurarte que si esta regresando.
Seria de mucha ayuda, para ambos que tengas online tu scriipt.
@from@n [04-may-2010]
Dr. BizarreHey muy bueno tu ejemplo me ayudo mucho yo utilizo postgres + codeigniter + jquery
gracias y ojala sigas con estos ejemplos geniales
Sadzas [07-may-2010]
Que tal Oscar?Muy bueno todo, aunque estoy teniendo problemas y creo que no tiene que ver con tu script, sino con que lo estoy introduciendo en una pagina ya hecha.
Tengo que realizar una aplicacion muy parecida a este ejemplo, donde tengo una tabla paises y otra ciudades. Necesito cargar el combobox ciudades del pais que se selecciona, pero no logro llegar a la BD. El log de MySQL no indica nada raro, hay alguna forma en que puedas ayudarme? tal vez enviandote el script completo?
Gracias!
H@ck3rB3@r [12-may-2010]
HOla Dr. Bizarre gracias por la ayuda del combo con los paises y estados es muy bueno y me ayudo muchisimo.LOVELY [19-may-2010]
hola una preguntota estoy corriendo tu codigo de los estados y la aplique a mi base de datos pero cuando corro el combo de coudad me sale un error el foreach dice argumento invalido yo le puse al codigo :class selects extends MySQL
{
var $code = "";
//********carga estados*****************
function cargarPaises()
{
$consulta = parent::consulta("SELECT idestado,estado FROM estado ORDER BY estado ASC");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$paises = array();
while($pais = parent::fetch_assoc($consulta))
{
$code = $pais["idestado"];
$name = $pais["estado"];
$paises[$code]=$name;
}
return $paises;
}
else
{
return false;
}
}
//**********carga municipios*********
function cargarEstados()
{
$consulta = parent::consulta("SELECT municipio FROM municipio WHERE idestado = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$estados = array();
while($estado = parent::fetch_assoc($consulta))
{
$idestado = $estado["idestado"];
$name = $estado["municipio"];
$estados[$name]=$name;
}
return $estados;
}
else
{
return false;
}
} //fin de if municipios
function cargarCiudades()
{
$consulta = parent::consulta("SELECT ciudad FROM ciudades WHERE idmunicipio = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$ciudades = array();
while($ciudad = parent::fetch_assoc($consulta))
{
$name = $ciudad["ciudad"];
$ciudades[$name]=$name;
}
return $ciudades;
}
else
{
return false;
}
}
}
?>
Sin emabrgo en el tuyo tienes provincia me pidrias ayudar a corregir esto?, quisiera saber que es provincia o como esta estructurada tu tabla de paises, estados y ciudades para verificar las relaciones entre ellas por fa , por tu ayuda gracias
Dr. Bizarre [19-may-2010]
@lovely, revisar todos los 'value' de cada 'option', son el dato que relacionan al combo subsecuente, si tus identificadores son 'int' revisar la consulta mysql en la declaracion 'where' que en realidad estes comparando int con int.Si tienes duda dr.bizarre@hotmail.com, agregame
LOVELY [20-may-2010]
hola una preguntota estoy corriendo tu codigo de los estados y la aplique a mi base de datos pero cuando corro el combo de coudad me sale un error el foreach dice argumento invalido yo le puse al codigo :class selects extends MySQL
{
var $code = "";
//********carga estados*****************
function cargarPaises()
{
$consulta = parent::consulta("SELECT idestado,estado FROM estado ORDER BY estado ASC");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$paises = array();
while($pais = parent::fetch_assoc($consulta))
{
$code = $pais["idestado"];
$name = $pais["estado"];
$paises[$code]=$name;
}
return $paises;
}
else
{
return false;
}
}
//**********carga municipios*********
function cargarEstados()
{
$consulta = parent::consulta("SELECT municipio FROM municipio WHERE idestado = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$estados = array();
while($estado = parent::fetch_assoc($consulta))
{
$idestado = $estado["idestado"];
$name = $estado["municipio"];
$estados[$name]=$name;
}
return $estados;
}
else
{
return false;
}
} //fin de if municipios
function cargarCiudades()
{
$consulta = parent::consulta("SELECT ciudad FROM ciudades WHERE idmunicipio = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$ciudades = array();
while($ciudad = parent::fetch_assoc($consulta))
{
$name = $ciudad["ciudad"];
$ciudades[$name]=$name;
}
return $ciudades;
}
else
{
return false;
}
}
}
?>
Sin emabrgo en el tuyo tienes provincia me pidrias ayudar a corregir esto?, quisiera saber que es provincia o como esta estructurada tu tabla de paises, estados y ciudades para verificar las relaciones entre ellas por fa , por tu ayuda gracias
LOVELY [20-may-2010]
hola muchas gracias, perdon se publico dos veces jeje, gracias por la ayuda lo checare y si tengo dudas te las hago saber, de antemano gracias.LOVELY [20-may-2010]
Hola Dr. Bizarre, buen dia!!!, disculpe que lo moleste otra vez pero me sigue sin correr le muestro como esta estructurada mis tablas, si hay relacion entre ellas entre los int.mysql> desc estado;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| idestado | int(11) | NO | PRI | NULL | auto_increment |
| estado | varchar(80) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> desc municipio;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| idmunicipio | int(11) | NO | PRI | NULL | auto_increment |
| idestado | int(11) | YES | MUL | NULL | |
| municipio | varchar(100) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> desc ciudades;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| idciudad | int(11) | NO | PRI | NULL | auto_increment |
| idmunicipio | int(11) | YES | MUL | NULL | |
| ciudad | varchar(100) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
LOVELY [20-may-2010]
Le envio el codigo de los option, de hecho los deje como usted los tiene en su codigo, el unico que no corre es el combo de ciudades ahi es donde me envia el error , los combos de estado y municipio si correnEsto es de la clase combos
class selects extends MySQL
{
var $code = "";
//********carga estados*****************
function cargarPaises()
{
$consulta = parent::consulta("SELECT idestado,estado FROM estado ORDER BY estado ASC");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$paises = array();
while($pais = parent::fetch_assoc($consulta))
{
$code = $pais["idestado"];
$name = $pais["estado"];
$paises[$code]=$name;
}
return $paises;
}
else
{
return false;
}
}
//**********carga municipios*********
function cargarEstados()
{
$consulta = parent::consulta("SELECT municipio FROM municipio WHERE idestado = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$estados = array();
while($estado = parent::fetch_assoc($consulta))
{
$idestado = $estado["idestado"];
$name = $estado["municipio"];
$estados[$name]=$name;
}
return $estados;
}
else
{
return false;
}
} //fin de if municipios
function cargarCiudades()
{
$consulta = parent::consulta("SELECT ciudad FROM ciudades WHERE idmunicipio = '".$this->code."'");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$ciudades = array();
while($ciudad = parent::fetch_assoc($consulta))
{
$idciudad = $ciudad["idciudad"];
$name = $ciudad["ciudad"];
$ciudades[$name]=$name;
}
return $ciudades;
}
else
{
return false;
}
}
}
?>
*****este es el codigo del option de ciudades:********
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 "";
}
?>
Dr. Bizarre [20-may-2010]
@Lovely tan perfectas tus tablas, ahora revisa si los value de los option tengan todas las PK tal como lo tienes estructurado.LOVELY [20-may-2010]
Otra cosita jeje, de hecho corro la consulta en mysql asi como la tengo enciudades y si corre me muestra la consultaLOVELY [20-may-2010]
Disculpe las molestias que le ocasio Dr. pero no se hacer eso k me solicita,el option esta asi:
echo "";
****y el error me lo manda en el foreach *****
foreach($ciudades as $key=>$value)
{
echo "";
}
Dice k argumento invalido si creo que es el option pero no se como corregirlo, la verifique la rewalcion entre tablas y e correcta, no se que mas hacer?
Luz [20-may-2010]
a mi tambien me sucede lo mismoAgradecido [22-may-2010]
gracias, se implementa casi a ciegas...Lovely [25-may-2010]
Hola doctor ya lo he aceptado en el msn, me gustaria saber en horario lo localizo para poder checar el codigo, claro si usted lo desea, me di cuenta que el error esta en code debido a que si le coloco un un en el where haciendo referencia a un regristro de la tabla este si hace la conaulta pero si le dejo el this code no la hace, creo que esta no se esta llenando con el dato de estado y por eso cuando llega a ciudades no trae nadaDr. Bizarre [25-may-2010]
@Lovely, si probablemente el error este en PHP, cuidar que la sentencia WHERE compare de manera correcta el tipo de dato, int con int y str con str.eg.
int
"SELECT * FROM table WHERE ID = ".$this->code
str
"SELECT * FROM table WHERE ID = '".$this->code."'"
Eveyn [18-jun-2010]
Hola estudio la carrera y me gustaria conseguir la base de datos, ya que este solo es codigo, a mi lo k me interesa son los nombres de los paises, estados y ciudades...Si alguien puede proporcionarmelos me encantaria!!...Gracias!
Maxilance [25-jul-2010]
hola a todos! me funciona OK este combo al insertar en un formulario. El problema lo tengo al momento de editar un registro insertado, ya que no encuentro la forma de que el combo country aparezca seleccionado el que guardé en la bd, y lo mismo con los otros dos combos.Ejemplo:
Guardo un registro con:
Nombre: Max Lance
Pais: Alemania
Provincia: Franckfurt
Locadidad: Kramer
Al momento de Editar este registro, necesito que me aparezcan en los combos los datos cargados y no todo el listado de cada uno.
Gracias por su tiempo.
Dr. Bizarre [26-jul-2010]
@MaxilanceDebes validar existencia del dato (pais,estado,ciudad) en bdd. De existir, imprimir combobox con valor indicado.
de la siguiente forma:
http://www.copypastecode.com/33197/
Quedo pendiente de tus dudas.
Sagara [27-jul-2010]
Excelente esta muy practico y sencillo de entender. Te agradecería el .sql con las tablas :DDr. Bizarre [27-jul-2010]
@sagara, en el contenido de este post estan los links, revisa y comentas.Culichimen [29-jul-2010]
probando carnalCulichimen [29-jul-2010]
Señor dr. Bizarre, me salio ala primera y facil la explicacion que usted puso, de antemanos muchas graciasSandra [30-jul-2010]
muchas gracias por ese tutorial estoy haciendo un formulario en php para guardar,eliminar y editar paises estados y ciudades; pero no logro que me funcione con cajas de texto :(, encontre como cargar pais pero el resto si me pueden ayudar les agradeceria mucho