Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

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

  • Por favor, faça o login para responder
8 respostas neste tópico

#1 André da Silva

André da Silva
  • Membros
  • 1.560 posts

Postado 10 março 2011 - 11:25

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 ? :(
  • 0

#2 criatividade zero

criatividade zero
  • Membros
  • 844 posts

Postado 10 março 2011 - 17:19

não entendi
o que você precisa???
  • 0

#3 André da Silva

André da Silva
  • Membros
  • 1.560 posts

Postado 10 março 2011 - 23:59

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:
  • 0

#4 criatividade zero

criatividade zero
  • Membros
  • 844 posts

Postado 11 março 2011 - 05:10

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
  • 0

#5 André da Silva

André da Silva
  • Membros
  • 1.560 posts

Postado 11 março 2011 - 09:38

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 />

  • 0

#6 Andrey Knupp Vital

Andrey Knupp Vital

    Web Developer

  • Moderadores
  • 4.434 posts

Postado 11 março 2011 - 10:36

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>

  • 0

#7 criatividade zero

criatividade zero
  • Membros
  • 844 posts

Postado 11 março 2011 - 18:45

// 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
  • 0

#8 André da Silva

André da Silva
  • Membros
  • 1.560 posts

Postado 11 março 2011 - 19:12

Valeu criativade.

Andrey, valeu pelo código, acabei usando para fazer uma outra parada, mas segui a base desse seu código(você sabe) :thumbsup:

Resolvido
  • 0

#9 lastdark

lastdark
  • Membros
  • 70 posts

Postado 26 maio 2012 - 20:05

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
  • 0




Publicidade

/ins>