Ir para conteúdo

Arquivado

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

André Severino

[Resolvido] Populando combobox(cidade/estado) com php+json

Recommended Posts

Bom dia pessoal, tenho um combobox dinamico com php+json, após selecionar o estado ele exibe as cidades referente a este estado através de um consulta no banco de dados. Bom isto está funcionando normal.

Só que a minha dúvida é a seguinte:

 

Como eu faço para exibir o estado/cidade através de uma consulta na tabela de usuarios(caso ele ja tenha efeito o cadastro).

Tem como, sem precisar do onchange ?

 

Página para fazer as alterações

<select name="txtEstadoAL" id="cod_estados">
 <option value=""></option>
    <?php 					
       $sql = "SELECT cod_estados, sigla  
       FROM estados  
       ORDER BY sigla";  
       $res = mysql_query( $sql ); 

       while ( $row = mysql_fetch_assoc( $res ) ) { 
if($row['sigla'] == $res_med['estado_usuario'])
$select = "selected=selected"; 
       echo '<option value="'.$row['cod_estados'].'" '.$select.'>'.$row['sigla'].'</option>';  
       }  
    ?></select><br />
   <strong>Cidade:</strong>
   <select name="txtCidadeAL" id="cod_cidades">
     <option value=""><?php echo $res_med['cidade_usuario'];?></option>
   </select><br />

 

Código: jQuery

$(function(){
$('#cod_estados').change(function(){
	if( $(this).val() ) {
		$('#cod_cidades').hide();
		$('.carregando').show();
		$.getJSON('cidades.ajax.php?search=',{cod_estados: $(this).val(), ajax: 'true'}, function(j){
				var options = '<option value=""></option>';	
					for (var i = 0; i < j.length; i++) {
						options += '<option value="' + j[i].cod_cidades + '">' + j[i].nome + '</option>';
				}	
			$('#cod_cidades').html(options).show();
			$('.carregando').hide();
		});
	} else {
		$('#cod_cidades').html('<option value="">-- Escolha um estado --</option>');
	}
});
});

 

Eu fiz desta maneira, ele exibe o ESTADO+CIDADE e para o usuário alterar ele tem que selecionar o estado novamente e depois a cidade. Está funcionando mas ta com cheiro de POG isto. :thumbsup:

 

Alguém sabe como posso fazer para arrumar isto ? Ou não tem como ? :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu precisava comparar os dados do banco de dados com o valor do combobox cidade, para deixar a opção automaticamente seleciona, mas eu não consigo, pois p/ mostrar os valores do combobox cidade eu preciso selecionar o estado antes. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda nao entendi :(

devo estar devagar

 

explica o que o usuario faz, o que acontece...

 

 

normalmente você seleciona o estado e o ajax retorna as cidades do estado selecionado

se você quer deixar automaticamente selecionado o estado e a cidade, terá que gravar em session talvez

Compartilhar este post


Link para o post
Compartilhar em outros sites
normalmente você seleciona o estado e o ajax retorna as cidades do estado selecionado

se você quer deixar automaticamente selecionado o estado e a cidade, terá que gravar em session talvez

 

Isto, na hora do cadastro ele faz isso.

Mas vamos supor que ele fez o cadastro, e entra na area para ele alterar os dados cadastrados. Por exemplo como eu vou mostrar a cidade/estado nesse combobox dinamico ?

 

// Faço a conexão e os select no banco de dados

<label>Nome: <input type="text" name="nome" value="<?php echo $res['nome']; ?>" /></label><br>
<label>Endereço: <input type="text" name="endereco" value="<?php echo $res['endereco']; ?>" /></label><br>

// E a cidade e o estado ? 
// O estado eu consigo pois ele traz os valores direto do banco de dados
// mas a cidade não, pois preciso dar um 'onchange'para mostrar os valores e eu comparar
<select name="txtEstadoAL" id="cod_estados">
 <option value=""></option>
    <?php                                      
       $sql = "SELECT cod_estados, sigla  
       FROM estados  
       ORDER BY sigla";  
       $res = mysql_query( $sql ); 

       while ( $row = mysql_fetch_assoc( $res ) ) { 
          if($row['sigla'] == $res_med['estado_usuario']) { $select = "selected=selected"; } else { $select = ""; }
         echo '<option value="'.$row['cod_estados'].'" '.$select.'>'.$row['sigla'].'</option>';  
       }  
    ?></select><br />

   <strong>Cidade:</strong>
   <select name="txtCidadeAL" id="cod_cidades">
     <option value=""><?php echo $res_med['cidade_usuario'];?></option>
   </select><br />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria assim :P

combo.php

<?php
  $cod = $_POST['cod'];
  $db = new mysqli("localhost","root","...","...");
  $cidades = $db->query("select `nome` from `cidades` where `estados_cod_estados` = '".$cod."'");
  while($city = $cidades->fetch_assoc())
  {
     echo '<option value="'.$city['nome'].'">'.$city['nome'].'</option>';
  }
?>

 

a pagina com o ajax que vai fazer a busca ..

 

<script type="text/javascript" src="../js/jquery-1.5.1.min.js"></script>
<script>
 $(document).ready(function(){
    $("#cidades").change(function(){
        var cod = $(this).val();
        $.ajax({
            type: "POST",
            url: "combo.php",
            data: "cod="+ cod,
            success: function(data)
            {
               $("#c").show();
               $("#c").html(data);
            }
        });
    });
 });
</script>
<select id="cidades">
 <?php
    $db = new mysqli("localhost","root","...","...");
    $est = $db->query("select * from `estados` ");
    while($estado = $est->fetch_assoc())
    {
        echo '<option value="'.$estado['cod_estados'].'">'.$estado['nome'].'</option>';
    }
 ?>
</select><br />
<select id="c" style="display:none;">

</selecT>

Compartilhar este post


Link para o post
Compartilhar em outros sites

// E a cidade e o estado ?

// O estado eu consigo pois ele traz os valores direto do banco de dados

// mas a cidade não, pois preciso dar um 'onchange' para mostrar os valores e eu comparar

 

nao precisa de onchange no inicio

você ja tem o estado, e a cidade - vai montar o <select> com os estados e dar while no <select> da cidade

 

o evento onchange fica para alterção do perfil, nesse caso, o <select> da cidade será alterado pela nova escolha do estado

 

 

o cod do Andrey Knupp parece estar correto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andre eu tenho esse mesmo codigo seu, eu to com um problema nao sei se você resolveu no seu mais na hora de cadastrar ele nao envia o nome do estado e sim o codigo do estado, você conseguiu fazer isso??

 

Ao invez de ele enviar o estado de Sao Paulo cadastro ele envia o codigo referente a ele como 26,

 

A cidade eu arrumei agora o estado nao consigui

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.