ÐCollioni 0 Denunciar post Postado Janeiro 19, 2009 Olá, Estou tentando há um bom tempo e ainda não consegui fazer funcionar um código para seleção de um estado (combobox criado a partir de uma tabela do bd) e, a partir dessa seleção, gerar outra combobox (também criada de uma tabela, relacionada com o estado selecionado). Todas as opções de estados aparecem para selecionar, no entanto, quando escolhe, o valor atribuído é sempre o da última opção (Tocantins, por exemplo). Assim, a lista de cidades é sempre criada com relação ao estado do Tocantins. Alguém tem algum código em funcionamento, ou alguma sugestão para indicar? Tks. Compartilhar este post Link para o post Compartilhar em outros sites
ÐCollioni 0 Denunciar post Postado Janeiro 19, 2009 Pessoal, Encontrei um tópico muito interessante no forum webly. Funciona perfeitamente. O único detalhe é que você fica dependente de uma código de terceiros na sua aplicação. Mas aí vai o link para quem quiser. Webly Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 19, 2009 Pelo que entendi a questão é relacionada a Javascript... Compartilhar este post Link para o post Compartilhar em outros sites
alissong 1 Denunciar post Postado Janeiro 20, 2009 Pessoal, Para que precisa do código estado e cidade. Veja o código, mas aceito melhoria: index.php <?php #inclui a conexão com o banco de dados require_once("conexao.inc.php"); #seleciona todos os estados $sqlSltEstados = " SELECT cdestado, nome"; $sqlSltEstados .= " FROM estado"; $sqlSltEstados .= " ORDER BY nome"; $rstSltEstados = mysql_query($sqlSltEstados) or die(mysql_error()); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Combo de cidades e estados</title> <script type="text/javascript" src="js.js"></script> </head> <body> <table> <tr> <td> <select name="estado" id="estado" onChange="mostrarCidades(this.value)"> <option value="00">-- Selecione um estado --</option> <?php while($rowsEstados = mysql_fetch_array($rstSltEstados)) { ?> <option value="<?=$rowsEstados['cdestado'];?>"><?=$rowsEstados['nome'];?></option> <?php } ?> </select> </td> </tr> <tr> <td> <div id="cidades"></div> </td> </tr> </table> </body> </html> js.js function iniciaAjax() { //verifica se o navegado é o Iternet Explorer ou outros navegadores if(window.ActiveXObject) { //estância o objeto ActiveX ajax = new ActiveXObject("Microsoft.XMLHTTP"); } else { ajax = new XMLHttpRequest(); } return ajax; } function carregando() { //limpa as cidades já existentes document.getElementById('cidades').innerHTML = ""; //pega o local onde a combo de cidades será exibida] var local = document.getElementById('cidades'); //cria uma combo select var combo = document.createElement('select'); combo.setAttribute('name','cidade'); combo.setAttribute('id','cidade'); var opcao = document.createElement('option'); opcao.setAttribute('value', 00); opcao.appendChild(document.createTextNode("Carregando...")); //adiciona essa opção na combo combo.appendChild(opcao); //coloca a combo dentro do div local.appendChild(combo); } function mostrarCidades(id) { //inicia o AJAX ajax = iniciaAjax(); ajax.onreadystatechange = mostrarCidades2; //abre a conexão com o servidor ajax.open("GET", "consulta.php?id="+id); //informa que está carregando as cidades carregando(); //envia a requisição para o servidor ajax.send(); } function mostrarCidades2() { //verifica o status da requisição, se for o processamento está completo if (ajax.readyState == 4) { //verifica o número do status, se for diferente de 200 tem algum erro if (ajax.status == 200) { var xml = ajax.responseXML; if(xml != null) { if(xml.hasChildNodes()) { //limpa as cidades já existentes document.getElementById('cidades').innerHTML = ""; //pega o local onde a combo de cidades será exibida] var local = document.getElementById('cidades'); //cria uma combo select var combo = document.createElement('select'); combo.setAttribute('name','cidade'); combo.setAttribute('id','cidade'); //pega todas as cidades qae retornou do XML var nos = xml.getElementsByTagName('cidade'); //faz um loop para percorrer todas as tags produto for(cont = 0; cont < nos.length; cont++) { //verifica se é o IE if(window.ActiveXObject) { var idCidade = nos[cont].childNodes[0].firstChild.nodeValue; var cidade = nos[cont].childNodes[1].firstChild.nodeValue; } else { var idCidade = nos[cont].childNodes[1].firstChild.nodeValue; var cidade = nos[cont].childNodes[3].firstChild.nodeValue; } //cria um option do select var opcao = document.createElement('option'); opcao.setAttribute('value', idCidade); opcao.appendChild(document.createTextNode(cidade)); //adiciona essa opção na combo combo.appendChild(opcao); } //coloca a combo dentro do div local.appendChild(combo); } } } else { alert("Houve um problema ao carregar a lista de cidades:\n" + ajax.statusText); } } } consulta.php <?php $gmtDate = gmdate("D, d M Y H:i:s"); header("Expires: {$gmtDate} GMT"); header("Last-Modified: {$gmtDate} GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); $id =$_GET["id"]; $con = mysql_connect('localhost','xxxxx','xxxx'); if (!$con) { die('Erro ao conectar com banco: ' . mysql_error()); } mysql_select_db("estoque", $con); $sql="SELECT cdcidade, nome FROM cidade WHERE cdestado = '".$id."' ORDER BY nome"; $rs = mysql_query($sql); // Cria a string XML header("Content-Type: application/xml"); $xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\r\n"; $xml .= "<cidades>\r\n"; $totalBanco = 0; while($rowsCidades = mysql_fetch_array($rs)) { $xml .= "\t<cidade>\r\n"; $xml .= "\t\t<codigo>{$rowsCidades['cdcidade']}</codigo>\r\n"; $xml .= "\t\t<nome>{$rowsCidades['nome']}</nome>\r\n"; $xml .= "\t</cidade>\r\n"; } $xml .= "</cidades>\r\n"; echo $xml; mysql_close($con); ?> conexao.inc.php <?php $con = mysql_connect("localhost", "xxxxx", "xxxxxx") or die(mysql_error()); mysql_select_db("estoque", $con) or die(mysql_error()); ?> Estrutura da tabela no banco de dados:cidade: cdcidade integer cdestado integer nome varchar(80) Estado: cdestado integer nome varchar(20) Um abraço. Alissong Compartilhar este post Link para o post Compartilhar em outros sites