Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ÐCollioni

ComboBox Estado e Cidade

Recommended Posts

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

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

Pelo que entendi a questão é relacionada a Javascript...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.