Ir para conteúdo

POWERED BY:

Arquivado

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

Anderson007

Pais+Estado+Cidade

Recommended Posts

Olá pessoal,

 

Estou fazendo um Select com ajax+php+mysql de

1) selecionar paises

2) de acordo com o país, selecionar o estado

3) de acordo com o país e estado, selecionar a cidade

 

Está tudo funcionando, exceto quando troco de país, ele passa para o Select cidades o ID do país ao invés do ID do estado. Se alguém puder ajudar agradeço. Acredito que o problema esteja no onchange do paises buscaCidades(this.value) que deveria passar o valor do estado e não do país.

list_uf_cidades.php
<?php

$acao = isset($_GET['acao']) ? $_GET['acao'] : FALSE;
 
header('Content-Type: application/xml');
 
$xml = "<?xml version='1.0' encoding='iso-8859-1'?>\r\n";
 
 
switch ($acao)
{
case 'buscaPais':
   buscaPais();
   break;
case 'buscaEstados':
   buscaEstados();
   break;
case 'buscaCidades':
   buscaCidades();
   break;
}
 
function buscaPais()
{
global $xml;
 
$xml .= '<paises>';
 
$sql = mysql_query('Select * From paises Order By idpaises ASC');
 
while ($f = mysql_fetch_object($sql))
{
$xml .= '  <paise>';
$xml .= '    <idpaises>' . $f->idpaises . '</idpaises>';
$xml .= '    <pais>' . $f->pais . '</pais>';
$xml .= '  </paise>';
}
 
mysql_close();
 
$xml .= '</paises>';
echo $xml;
}
 
 
function buscaEstados()
{
$paises = isset($_GET['paises']) ? $_GET['paises']:1;
 
global $xml;
 
$xml .= '<uf>';
 
$sql = mysql_query('Select * From uf WHERE regiao_paises_idpaises = "'.$paises.'" Order By nome ASC');
 
while ($f = mysql_fetch_object($sql))
{
$xml .= '  <estado>';
$xml .= '    <id>' . $f->id . '</id>';
$xml .= '    <ufs>' . $f->ufs . '</ufs>';
$xml .= '    <nome>' . $f->nome . '</nome>';
$xml .= '  </estado>';
}
 
mysql_close();
 
$xml .= '</uf>';
echo $xml;
}
 
 
 
function buscaCidades()
{
$uf = isset($_GET['uf']) ? $_GET['uf']:1;
 
global $xml;
 
$xml .= '<cidades_brasil>';
 
    $sql = mysql_query('Select * From cidades_brasil Where uf_id = ' . $uf . ' Order By id');
 
while ($f = mysql_fetch_object($sql))
{
$xml .= '  <cidadi>';
$xml .= '    <id>' . $f->id . '</id>';
$xml .= '    <cidade>' . $f->cidade . '</cidade>';
$xml .= '  </cidadi>';
}
 
    mysql_close();
 
$xml .= '</cidades_brasil>';
echo $xml;
}
 
 
?>
 

 
<?php
//---
$post_paises = $_POST['paises'];
$post_uf = $_POST['uf'];
if (!empty($post_paises)) {
$sql_post = mysql_query("SELECT *, uf.id as uf_id FROM cidades_brasil cb INNER JOIN uf on cb.uf_id=uf.id 
INNER JOIN paises on uf.regiao_paises_idpaises=paises.idpaises WHERE cb.uf_id = " . $post_uf . "");
if($post = mysql_fetch_array($sql_post)) { $post_cidade = $post["cidade"]; $post_iduf = $post["uf_id"]; $post_idpaises = $post["idpaises"]; } } ?>
 
<script type="text/javascript">
function buscaPais()
{ var paises = document.getElementById('paises');
var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    paises.appendChild(op);
var ajax = openAjax();
ajax.open('GET', 'list_uf_cidade.php?acao=buscaPais', true);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
if (ajax.status == 200) {
paises.innerHTML = '';
var opcao = document.createElement('option');
opcao.setAttribute('value', '<?php echo $post_idpaises; ?>');
opcao.appendChild(document.createTextNode(<?php if (empty($_POST['pais'])) { echo "'Selecione'"; } if (!empty($_POST['pais'])) { echo "'".$post_paises."'"; } ?>));
paises.appendChild(opcao);
var xml = ajax.responseXML;
var paise = xml.getElementsByTagName('paise');
for (var i = 0; i < paise.length; i++) {
var idPaise = paise[i].getElementsByTagName('idpaises')[0].firstChild.nodeValue;
var paisPaise = paise[i].getElementsByTagName('pais')[0].firstChild.nodeValue;
var opcao = document.createElement('option');
opcao.setAttribute('value', idPaise);
opcao.appendChild(document.createTextNode(paisPaise));
paises.appendChild(opcao); } } } }
    ajax.send(null); }
function buscaEstados(paises)
{ var uf = document.getElementById('uf');
uf.innerHTML = '';
var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    uf.appendChild(op);
var url = 'list_uf_cidade.php?acao=buscaEstados&paises=' + paises;
var ajax = openAjax();
ajax.open('GET', url, true);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
if (ajax.status == 200) {
uf.innerHTML = '';
var xml = ajax.responseXML;
var estado = xml.getElementsByTagName('estado');
for (var i = 0; i < estado.length; i++) {
var idEstado = estado[i].getElementsByTagName('id')[0].firstChild.nodeValue;
var ufsEstado = estado[i].getElementsByTagName('ufs')[0].firstChild.nodeValue;
var nomeEstado = estado[i].getElementsByTagName('nome')[0].firstChild.nodeValue;
var opcao = document.createElement('option');
opcao.setAttribute('value', idEstado);
opcao.appendChild(document.createTextNode(ufsEstado));
uf.appendChild(opcao); } } } }
    ajax.send(null); }
function buscaCidades(uf)
{ var cidades = document.getElementById('cidadi');
cidades.innerHTML = '';
var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    cidades.appendChild(op);
var url = 'list_uf_cidade.php?acao=buscaCidades&uf=' + uf;
var ajax = openAjax();
ajax.open('GET', url, true);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
if (ajax.status == 200) {
cidades.innerHTML = '';
var xml = ajax.responseXML;
var cidadi = xml.getElementsByTagName('cidadi');
for (var i = 0; i < cidadi.length; i++) {
var idCidadi = cidadi[i].getElementsByTagName('id')[0].firstChild.nodeValue;
var cidadeCidadi = cidadi[i].getElementsByTagName('cidade')[0].firstChild.nodeValue;
var opcao = document.createElement('option');
opcao.setAttribute('value', idCidadi);
opcao.appendChild(document.createTextNode(cidadeCidadi));
cidades.appendChild(opcao); } } } }
ajax.send(null); }
</script>
 
<tr> <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> </tr>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você chama buscaEstados e buscaCidades no onChange do select dos países? Você só deveria buscar as cidades se o usuário selecionar o estado.

 

No caso do buscaCidades(this.value) desse select, "this" se refere ao ID do país. Ou seja, vai passar pra cidade o ID do país em vez do estado. Você até poderia deixar de passar parâmetros e buscar todas as cidades do país, mas seria um desperdício de tempo e recurso da CPU. Acho mais sensato limpar o select das cidades e carregá-lo apenas ao selecionar o estado

Compartilhar este post


Link para o post
Compartilhar em outros sites

No país, dá pra mudar o valor do this.value do buscaCidades(this.value)? Por exemplo, passando assim: buscaCidades(buscaEstados(this.value)).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai um exemplo...

 

index.html

<form>
	<select name="pais" id="pais">
    	<option value="0">Selecione um pais</option>
        <option value="1">Brasil</option>
        <option value="2">Argentina</option>
        <option value="3">Portugal</option>
    </select>
    
    <select name="estado" id="estado">
    	<option value="0">Selecione um estado</option>
    </select>
    
    <select name="cidade" id="cidade">
    	<option value="0">Selecione uma cidade</option>
    </select>
</form>
<script>
	$("select#pais").change(function() {
		var pais = $(this).val();
		
		$("select#estado").load("busca_estado.php?pais=" + pais);
		$("select#cidade").load("busca_cidade.php?estado=0");
	});
	
	$("select#estado").change(function() {
		var estado = $(this).val();
		
		$("select#cidade").load("busca_cidade.php?estado=" + estado);
	});
</script>

monta_estado.php

<?php
	// conexao com banco......
	
	$pais = $_GET["pais"];
	
	echo "<option value="0">Selecione um estado</option>";
	
	if ($pais != 0) {
		$rs = mysql_query("SELECT * FROM estado WHERE pais='$pais'");
		
		while ($row = mysql_fetch_array($rs)) {
			echo "<option value='".$row["id"]."'>".$row["estado"]."</option>";
		}
	}
?>

monta_cidade.php

<?php
	// conexao com banco......
	
	$estado = $_GET["estado"];
	
	echo "<option value="0">Selecione uma cidade</option>";
	
	if ($estado != 0) {
		$rs = mysql_query("SELECT * FROM cidade WHERE estado='$estado'");
		
		while ($row = mysql_fetch_array($rs)) {
			echo "<option value='".$row["id"]."'>".$row["cidade"]."</option>";
		}
	}
?>

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.