Ir para conteúdo

POWERED BY:

Arquivado

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

Beraldo

Combo com as Cidades e Estados do Brasil

Recommended Posts

Em funcoes.php, deixe assim:

$uf = isset($_GET['uf']) ? urldecode($_GET['uf']) : 1;
Aquele casting com (int) causaria problemas.

 

em funcoes.js

var url = 'funcoes.php?acao=buscaCidades&uf=' + escape(uf);

 

Além da mudanças que eu disse antes.

 

 

Na tabela "cidades" só é armazena do o ID do estado. Não existe o campo nome_uf. Você terá de, na funcção buscarCidades, buscar o id do estado e depois buscar as cidades usando esse ID.

 

 

... era bem mais fácil salvar só os IDs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, primeiramente gostaria de agradecer sua atenção.

 

Infelizmente ainda não está funcionando o 2° combo (cidade)

 

Se não for dar muito trabalho poderia tentar resolver isto, estou precisando que funcione desta forma.

 

muito obrigada :rolleyes:/>

D.B.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vou fazer o que você quer, pois é a pior maneira. Mantenha somente os IDs no banco e faça relacionamento de tabelas na hora de buscar. Se não souber fazer isso, veja este pequeno tutorial:

 

http://forum.imasters.com.br/index.php?showtopic=140816

 

A diferença é que você fará dois JOINs:

 

Select t.campos FROM tabela AS t INNER JOIN cidades AS c  ON c.id = r.cidade INNER JOIN estados AS e ON e.id = t.estado;

É basicamente isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo entendo e respeito sua colocação.

 

Da forma que eu venho pedindo ajuda soluciona-se 2 problemas ao mesmo tempo.

 

1° insere os nomes diretamente no db (sem gambiarra)

2° Faz funcionar o plugin do Jquery (preview) - já funcionou com o Estado

 

 

Acho que já o incomodei demais,

mesmo precisando muito e não conseguindo exito só tenho a lhe agradecer.

 

Muito obrigada,

DB

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muitos dos bancos de dados de cidades que encontrei na Internet não tinham acentuação. Porém, encontrei este script, que satisfez a quase todas as minhas necessidades.

 

Fiz alguns ajustes no banco de dados, criei o arquivo de instalação e as funções PHP e JavaScript, para o funcionamento correto do sistema.

 

Desenvolvi para PHP 5, com a extensão MySQLi habilitada.

 

Como o banco de dados é enorme, não postarei o código.

O download pode ser feito aqui:

Link para download

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif/>

 

Abraços,

Beraldo

Beraldo preciso da tua ajuda:

 

nao consigo adaptar o meu exemplo ao seu (só estou alterando variáveis), basta a primeira funcionar e ja sei como a segunda funciona a segunda. Eu ja tinha usado o exemplo e consegui coloca-lo a funcionar mas usei os mesmos campos da base de dados.

 

 

tenho em primeiro lugar o index:

 

...
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript" src="funcoes.js"></script>
<title>Cidades | Estados</title>
</head>
<body onload="buscaEstados()">

<form method="post" action="">
  <p>
	<select name="uf" id="uf" onchange="buscaCidades(this.value)">
	</select>
  </p>
  <p>
	<select name="subcategoria" id="subcategoria">
	  <option value="">Subcategoria</option>
	</select>
  </p>
  </form>
...

segundo tenho a funcoes.php

 

//....
//primeira combobox

function buscaEstados()
{
	global $xml;
	
	$xml .= '<categorias>';
	
	$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
	
	$sql = $MySQLi->query('Select * From categorias Order By nome ASC') or die ("sql");
	
	while ($f = $sql->fetch_object())
	{
		$xml .= '  <categoria>';
		$xml .= '	<id>' . $f->id . '</id>';
		$xml .= '	<nome>' . $f->nome . '</nome>';
		$xml .= '  </categoria>';
	}
	
	$sql->close();
	$MySQLi->close();
	
	$xml .= '</categorias>';
	echo $xml;
}

//segunda combobox

function buscaCidades()
{
	$uf = isset($_GET['uf']) ? (int)$_GET['uf'] : 1;
	
	global $xml;
	
	$xml .= '<subcategorias>';
	
	$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
	
	$sql = $MySQLi->query('Select * From subcategorias Where categoria = ' . $uf . ' Order By nome ASC');
	
	while ($f = $sql->fetch_object())
	{
		$xml .= '  <subcategoria>';
		$xml .= '	<id>' . $f->id . '</id>';
		$xml .= '	<nome>' . $f->nome . '</nome>';
		$xml .= '  </subcategoria>';
	}
	
	$sql->close();
	$MySQLi->close();
	
	$xml .= '</subcategorias>';
	echo $xml;
}

depois vem o ficheiro funcoes.js

 

//primeiro combobox
function buscaEstados()
{
	var uf = document.getElementById('uf');	
	var op = document.createElement('option');
	op.setAttribute('value', '');
	op.appendChild(document.createTextNode("Carregando..."));
	uf.appendChild(op);
	
	var ajax = openAjax();
	
	ajax.open('GET', 'funcoes.php?acao=buscaEstados', true);
	
	ajax.onreadystatechange = function()
	{
		if (ajax.readyState == 4)
		{
			if (ajax.status == 200)
			{
				uf.innerHTML = '';
				
				var opcao = document.createElement('option');
				opcao.setAttribute('value', '');
				opcao.appendChild(document.createTextNode('Selecione'));
				uf.appendChild(opcao);
				
				var xml = ajax.responseXML;
				var categoria = xml.getElementsByTagName('categoria');
				
				for (var i = 0; i < categoria.length; i++)
				{
					var id = categoria[i].getElementsByTagName('id')[0].firstChild.nodeValue;
					var nome = categoria[i].getElementsByTagName('nome')[0].firstChild.nodeValue;
					
					var opcao = document.createElement('option');
					opcao.setAttribute('value', id);
					opcao.appendChild(document.createTextNode(nome));
					uf.appendChild(opcao);
					
				}
				
			}
		}
	}
	ajax.send(null);
	
}

//segunda combobox

...

desde já os meus campo são da tabela categorias(id, nome), subcategorias(id, nome, categoria)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente executar function buscaEstados() e buscaCidades() no script PHP, executando-o directamente, para ver se o XML está sendo gerado correctamente

já descobri o erro. eram os acentos eles não deixa usar á

 

mas descobri um problema, ele não manda o post da segunda combobox. alguma vez testaste? mas não estou a perceber porque :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, estou desenvolvendo um sistema de busca, ja tenho o banco de dados, e a area que faz a paginação pegando os dados vindos de um $_GET

 

A pergunta é, como faço pra este sistema enviar os dados tipo ?uf=São Paulo&cidade=São paulo, ao invés dos numeros?

 

Pensei em preparar o resultado deste form com um if, tipo:

 

$uf= isset($_GET[uf]) ? $_GET[uf] : FALSE;

if($uf == "1")

{

$ufnome = "AC";

}

 

if($uf == "2")

{

$ufnome = "AL";

}

 

E depois usar o $ufnome na minha busca.

 

Mas imagina o trabalho que ia dar pra fazer com todos os estados e cidades, hauhaua, :rolleyes:/>

 

Tem um jeito mais facil? vlw!!!!!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendo por que tantos querem usar a string em vez do ID.

Qual é o problema com o ID? Isso facilita o relacionamento de tabelas, economiza espaço em disco..

 

Com qual finalidade quer fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
include_once("funcoes.php");

buscaEstados();
?>

Execute apenas isso e poste o resultado.

 

Se der certo, tente com buscaCidades, passando um ID qualquer como parâmetro

 

já funcionou tinha o nome errado.

tenho uma ultima pergunta, caso eu queria colocar uma terceira opção, como é que eu faço?

ate agora já adicionei:

 

function buscaCategorias3(uf, uf2)
{
	var categorias = document.getElementById('categorias');
	categorias.innerHTML = '';
	var op = document.createElement('option');
	op.setAttribute('value', '');
	op.appendChild(document.createTextNode("Carregando..."));
	categorias.appendChild(op);
	
	var url = 'funcoes2.php?acao=buscaCategorias3&uf=' + uf + '&uf2= ' + uf2;
	var ajax = openAjax();
	
	ajax.open('GET', url, true);
	ajax.onreadystatechange = function()
	{
		if (ajax.readyState == 4)
		{
			if (ajax.status == 200)
			{
				categorias.innerHTML = '';
				
				var xml = ajax.responseXML;
				var categoria = xml.getElementsByTagName('categoria');
				
				for (var i = 0; i < categoria.length; i++)
				{
					var idcategoria = categoria[i].getElementsByTagName('id')[0].firstChild.nodeValue;
					var nomecategoria = categoria[i].getElementsByTagName('nome')[0].firstChild.nodeValue;
					
					var opcao = document.createElement('option');
					opcao.setAttribute('value', idcategoria);
					opcao.appendChild(document.createTextNode(nomecategoria));
					categorias.appendChild(opcao);
				}
			}
		}
	}
	ajax.send(null);
}

depois adicionei na funções.php

 

function buscaCategorias3()
{
	$uf = isset($_GET['uf']) ? (int)$_GET['uf'] : 1;
	$uf2 = isset($_GET['uf2']) ? (int)$_GET['uf2'] : 1;
	
	global $xml;
	
	$xml .= '<categorias>';
	
	$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
	
	$sql = $MySQLi->query('Select id, nome From subcategorias2 Where categoria = ' . $uf . ' AND subcategoria= ' . $uf2 . ' Order By nome ASC');
	
	while ($f = $sql->fetch_object())
	{
		$xml .= '  <categoria>';
		$xml .= '	<id>' . $f->id . '</id>';
		$xml .= '	<nome>' . $f->nome . '</nome>';
		$xml .= '  </categoria>';
	}
	
	$sql->close();
	$MySQLi->close();
	
	$xml .= '</categorias>';
	echo $xml;
}

 e também já adicionei

switch ($acao)
{
	case 'buscaEstados2':
		buscaEstados2();
		break;
	case 'buscaCidades2':
		buscaCidades2();
		break;
		
	case 'buscaCategorias3':
		buscaCategorias3();
		break;
}

no index

 

<select name="categorias" id="categorias">
	  <option value="">selecione a categorias</option>
	</select>

a lógica esta correta? algum erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Beraldo, estou utilizando seu codigo e fiz algumas alteraçoes nele, ao inves de procurar por cidades e estados estou procurando por setores e cargos. Só q estou com um probleminha e axo q você pode me ajudar, eh o seguinte: estou botando 2 combos dependentes (setor,cargos)e queria por um terceiro dependendo do cargo, so q gostaria q ele aparecesse em um text area pois sera a descriçao dos cargos, entao q modificação eu teria q fazer no codigo pra resolver isso ?

 

Agradeço desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Beraldo,

 

Uso seu script adaptado à minha realidade há anos e funciona legal.

 

Agora acrescentei um 3 select, países.

 

E estou com dificuldade no this.value, você pode me ajudar?

<td bgcolor="#F5F9FF">
<div align="left" class="style9"><strong>País:<span class="style14 style13">*</span></strong></div>
<select class="style9" name="paises" id="paises" onchange="buscaEstados(this.value); buscaCidades(this.value)">
</select>

<div align="left" class="style9"><strong>Estado:<span class="style14 style13">*</span></strong></div>
<select class="style9" name="uf" id="uf" onchange="buscaCidades(this.value)">
<option value="<?php echo $_POST["estado"]; ?>"><?php if (empty($_POST['estado'])) { echo "Primeiramente, selecione o País"; } if (!empty($_POST['estado'])) { echo $post_ufs; } ?></option>
</select>
</td>

<td bgcolor="#F5F9FF">
<div align="left" class="style9"><strong>Cidade:</strong><strong>
<span class="style14 style13">*</span></strong></div>
<span class="style9">
<select class="style9" name="cidadi" id="cidadi">
<option value="<?php echo $_POST["cidadi"]; ?>"><?php if (empty($_POST['cidadi'])) { echo "Primeiramente, selecione a UF"; } if (!empty($_POST['cidadi'])) { echo $post_cidade; } ?></option>
</select>
</span>
</td>

Valeu!

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.