Boa noite. Moderadores, me desculpem se estiver postando o código de maneira errada e se assim for, favor me corrigir explicando a maneira correta de postar o código.
Este código é de autoria de Gilberto Albino de 31/03/2009, fiz algumas modificações e adaptações nele e assim usa-lo em meu novo projeto
Aqui eu escolho o país, o estado, a cidade e o bairro e o comercio. Depois de ter feito estas escolhas, tudo através de combos dinâmicos, eu quero entrar em uma outra tabela e mandar procurar as informações baseadas nas opções anteriores escolhidas. Ou seja:
Escolhi no 1º select o País Brasil
Escolhi no 2º select o Estado Minas Gerais
Escolhi no 3º select a Cidade Belo Horizonte
Escolhi no 4º select o Bairro Centro
Escolhi no 5º select o Comércio Papelaria
Isso quer dizer que existe 5 variáveis com os valores:
Brasil, Minas Gerias, Belo Horizonte, Centro e papelaria
Quero pegar estas 5 variáveis, acessar uma outra tabela e buscar informações contidas nesta tabela, baseada nas informações das variáveis anteriores e montar um novo select com todas as informações encontradas, criando assim uma lista com outro select para que o usuário possa escolher uma das informações contidas neste ultimo select.
Obs.: O código funciona perfeitamente, porem, quero fazer mais esta implementação. Se alguém quiser usá-lo, sinta-se a vontade, desde que coloque os devidos créditos.
Qualquer dúvida pergunta aí.
Este é o formulario php:
<html> <head> <script src="combo.js"></script> <style> label { display:block; } label span { font-weight:bold; display:block; } select { width:150px; } </style> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <h1>Localizações</h1> <label><span>País:</span> <select name="pais" id="pais"></select> </label> <label><span>Estado:</span> <select name="estado" id="estado"><option value="0">--Primeiro o País--</option></select> </label> <label><span>Cidade:</span> <select name="cidade" id="cidade"><option value="0">--Primeiro o Estado--</option></select> </label> <label><span>Bairro:</span> <select name="bairro" id="bairro"><option value="0">--Primeiro a Cidade--</option></select> </label> <label><span>Comércio:</span> <select name="comercio" id="comercio"><option value="0">--Primeiro o Bairro--</option></select> </label> <br /> <label><input type="submit" value="Procurar" /> </form> <?php if($_POST) { print '<pre>'; print_r($_POST); print '</pre>'; } ?> </body> </html> *************************************************************************************************************************************** Este é o php que faz os selects de acordo com as opção escolhidas <?php /* * Bloco para testar a conexão */ try { /* * Usei o banco mysql com o PDO. */ /* * Variáveis de conexao */ $servidor = 'localhost'; $usuario = 'root'; $senha = ''; $banco = 'appcom'; $con = new PDO("mysql:host={$servidor};dbname={$banco}", $usuario, $senha); $con->query('SET NAMES utf8'); /* * Através deste bloco vamos alterar nossas consultas dinâmicas * * $sql = consulta própria do tipo * $option = titulo que aparece no primeiro option da listagem * $string = auxiliador da busca de resultados */ switch($_GET['tipo']) { case 'pais' : $sql = "SELECT * FROM paises WHERE status = 1"; $option = 'o Pais'; $string = 'iso3'; break; case 'estado' : $sql = sprintf("SELECT * FROM estados WHERE iso3 = '%s' AND status = 1", $_GET['pais']); $option = 'o Estado'; $string = 'uf'; break; case 'cidade' : $sql = sprintf("SELECT * FROM cidades WHERE uf = '%s'", $_GET['estado']); $option = 'a Cidade'; $string = 'nome'; break; case 'bairro' : $sql = sprintf("SELECT * FROM bairros WHERE cidade = '%s'", utf8_encode($_GET['cidade'])); $option = ' o Bairro'; $string = 'nome'; break; } /* * Executamos o SQL aqui */ $consulta = $con->query($sql); /* * Iniciamos o resultado como null */ $resultado = null; /* * O primeiro option que vai aparecer já com o titulo dinâmico a partir de $option */ $resultado = sprintf( '<option value="%s">Escolha %s</option>', 0, $option ); $resultado .= sprintf( '<option value="%s">- - - - - - - - - - - - -</option>', 0 ); /* * Busco os resultados usando $c->string para identificar o ID dinâmico pois varia, no caso temos iso3, uf, nome e nome */ while($c = $consulta->fetch(PDO::FETCH_OBJ)) { $resultado .= sprintf( '<option value="%s">%s</option>', $c->$string, // o campo nome é comum a todos $c->nome ); } /* * Imprimimos o resultado */ print $resultado; } catch(Exception $e) { /* * Se não aparecer nada é porque a conexao falhou */ return null; } ********************************************************************************************************************************************* Este é o js /* * Autor: Gilberto Albino * Data: 31/03/2009 * Apaga isto por favor, hehe :D */ jQuery(document).ready ( function() { /* * Chamamos aqui a função que vai controlar os campos. * Desta forma, caso você precise repetir o combo dinâmico * basta trocar os ID's dos SELECT's */ comboDinamico("pais", "estado", "cidade", "bairro", "comercio"); // suposição de segundo bloco de selects // comboDinamico("pais_cliente", "estado_cliente", "cidade_cliente", "bairro_cliente"); } ); /* * função para carregar uma lista dinâmica */ comboDinamico = function(pais, estado, cidade, bairro, comercio) { /* * Variáveis que precisamos pegar * Usamos getElementById() pois é assim que conseguiremos * passar o elemento por variável para jQuery */ var pais = document.getElementById(pais); var estado = document.getElementById(estado); var cidade = document.getElementById(cidade); var bairro = document.getElementById(bairro); var comercio = document.getElementById(comercio); /* * Carregamos a lista automaticamente quando a página carrega */ $(pais).load('localizacoes.php?tipo=pais'); /* * Populamos o combo dos estados quando trocamos um valor no pais * Os próximos blocos serão similares quanto à validação pelo valor igual à zero */ $(pais).change( function() { if($(this).val() == 0) { alert('Você precisa informar um PAÍS!'); $(this).focus(); } else { $(estado).load('localizacoes.php?tipo=estado&pais=' + $(this).val()); } } ); /* * Populamos o combo das cidades quando trocamos um valor no estado */ $(estado).change( function() { if($(this).val() == 0) { alert('Você precisa informar o ESTADO!'); $(this).focus(); } else { $(cidade).load('localizacoes.php?tipo=cidade&estado=' + $(this).val()); } } ); /* * Populamos o combo dos bairros quando trocamos um valor na cidade */ $(cidade).change( function() { if($(this).val() == 0) { alert('Você precisa informar a CIDADE!'); $(this).focus(); } else { $(bairro).load('localizacoes.php?tipo=bairro&cidade=' + escape($(this).val())); } } ); /* * Populamos o combo dos comercio quando trocamos um valor no bairro */ $(bairro).change( function() { if($(this).val() == 0) { alert('Você precisa informar o BAIRRO'); $(this).focus(); } else { $(comercio).load('localizacoes.php?tipo=comercio&bairro=' + escape($(this).val())); } } ); /* * Uma validação simples só para garantir que não escolher um valor nulo */ $(comercio).change( function() { if($(this).val() == 0) { alert('Você precisa informar o COMÉRCIO!'); $(this).focus(); } else { return true; } } ); }