Ir para conteúdo
Fórum Script Brasil
  • 0

Combobox Estado e Cidade


Mike Lemes

Pergunta

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
&lt;script type="text/javascript" src="jquery-1.3.2.min.js"></script>
&lt;script type="text/javascript">
      
      $(document).ready(function(){
         
         $("select[name=estado]").change(function(){
            $("select[name=cidade]").html('<option value="0">Carregando...</option>');
            
            $.post("cidades.php", 
                  {estado:$(this).val()},
                  function(valor){
                     $("select[name=cidade]").html(valor);
                  }
                  )
            
         })
      })
      
</script>
</head>

<body>

<?
include "config.php";
?>
<form action="" method="post">
   <select name="estado">
       <option value="0">Escolha um Estado</option>
        <?php
                 
         $sql = "SELECT * FROM tb_estados ORDER BY nome ASC";
         $qr = mysql_query($sql) or die(mysql_error());
         while($ln = mysql_fetch_assoc($qr)){
            echo '<option value="'.$ln['id'].'">'.$ln['nome'].'</option>';
         }
        ?>
        
    </select>
    
    <select name="cidade">
       <option value="0" disabled="disabled">Escolha um Estado Primeiro</option>
    </select>
</form>

</body>
</html>

[b]cidades.php[/b]
<?php
include "config.php";

$estado = $_POST['estado'];

$sql = "SELECT * FROM tb_cidades WHERE estado = '$estado' ORDER BY nome ASC";
$qr = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($qr) == 0){
   echo  '<option value="0">'.htmlentities('Não cidades nesse estado').'</option>';
   
}else{
   while($ln = mysql_fetch_assoc($qr)){
      echo '<option value="'.$ln['id'].'">'.$ln['nome'].'</option>';
   }
}

?>

Pessoal estou precisando de ajuda com o código acima que peguei na internet e ajustei de acordo com minha nescessidade. Ele usa java para carregar a cidade quando o estado é selecionado e está funcionando perfeitamente. Mas não consigo pegar o valor dos campos estado e cidade do select, e tenho que pegar estes valores pois preciso armazenar no banco de dados. Não sei se devo colocar o código para pegar os valores na página index.php ou na página cidade.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

No caso o usuário vai escolher o estado e cidade, e você quer salvar essas informações em um banco de dados, é isso?

Se for, primeiramente coloque um input do tipo submit no formulário para enviar as informações via post, depois é só receber o post com o PHP na index mesmo e salvar na base de dados.

A idéia é essa e é simples, sabe como fazer isso?

Link para o comentário
Compartilhar em outros sites

  • 0
No caso o usuário vai escolher o estado e cidade, e você quer salvar essas informações em um banco de dados, é isso?

Se for, primeiramente coloque um input do tipo submit no formulário para enviar as informações via post, depois é só receber o post com o PHP na index mesmo e salvar na base de dados.

A idéia é essa e é simples, sabe como fazer isso?

Sim, quando seleciona o estado, no select cidade aparece só as cidades daquele estado. o select estado ao ser selecionado aciona o arquivo cidades.php e retorna as cidades automaticamente. estou fazendo o teste separado, pois este recurso vou implantar no sistema de cadastro... por isso não vejo a nescessidade do submit, pois o recurso é automatico.. eu não sei como fazer.. o que eu quero é após selecionar o estado e retornar a cidade quero pegar o valor de estado e cidade e gravar no banco de dados.. E isso realmente não estou conseguindo fazer... eu penso q tenho q pegar o valor na index.php pelo fato dos selects já estarem como os valores selecionados..

Link para o comentário
Compartilhar em outros sites

  • 0

Para pegar os valores terá que fazer do jeito que disse mesmo, precisará de um submit, pois você só terá o valor do estado no arquivo cidades.php e não o da cidade pois ainda não foi escolhido.

A forma mais rápida e mais viável de se fazer isso é com o uso do submit, a não ser que queira ter todo um trabalho pegando esses valores via javascript através do onchage, requisitar um arquivo PHP para fazer essa inserção.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Para pegar os valores terá que fazer do jeito que disse mesmo, precisará de um submit, pois você só terá o valor do estado no arquivo cidades.php e não o da cidade pois ainda não foi escolhido.

A forma mais rápida e mais viável de se fazer isso é com o uso do submit, a não ser que queira ter todo um trabalho pegando esses valores via javascript através do onchage, requisitar um arquivo PHP para fazer essa inserção.

Abraços

Modifiquei o código assim:

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
&lt;script type="text/javascript" src="jquery-1.3.2.min.js"></script>
&lt;script type="text/javascript">
      
      $(document).ready(function(){
         
         $("select[name=estado]").change(function(){
            $("select[name=cidade]").html('<option value="0">Carregando...</option>');
            
            $.post("cidades.php", 
                  {estado:$(this).val()},
                  function(valor){
                     $("select[name=cidade]").html(valor);
                  }
                  )
            
         })
      })
      
</script>
</head>

<body>

<?
include "config.php";
?>
<form action="vis_estcid.php" method="post">
   <p>
     <select name="estado">
       <option value="0">Escolha um Estado</option>
       <?php
                 
         $sql = "SELECT * FROM tb_estados ORDER BY nome ASC";
         $qr = mysql_query($sql) or die(mysql_error());
         while($ln = mysql_fetch_assoc($qr)){
            echo '<option value="'.$ln['id'].'">'.$ln['nome'].'</option>';
         }
        ?>
       
     </select>
     <? echo "<br><br>" ?>
     <select name="cidade">
       <option value="0" disabled="disabled">Escolha um Estado Primeiro</option>
     </select>
     
   </p>
   <p>
     <input type="submit" name="button" id="button" value="Enviar" />
  
</form>

</body>
</html>
criei o arquivo vis_estcid.php
<?
include "config.php";

function Cidade_Estado($estado, $cidade){
$sql = "SELECT tb_estados.id, tb_estados.nome as estado, tb_cidades.id, tb_cidades.nome as cidade
FROM tb_estados WHERE tb_estados.id = '$estado' AND tb_cidades.id = '$cidade'" or die(mysql_error());
$qr = mysql_query($sql);
$ln = mysql_fetch_assoc($qr);
$itens = array('cidade' => $ln['cidade'], 'estado' => $ln['estado']);
return $itens;

}

$dados = Cidade_Estado($_POST['estado'], $_POST['cidade']);
$estado = $dados['estado'];  
$cidade  = $dados['cidade']; 

echo "$estado";
echo "$cidade";

?>

Agora aparece o seguinte erro:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\est_cid\vis_estcid.php on line 11

Editado por *FIT*
Adicionar a tag [code]! *FIT*
Link para o comentário
Compartilhar em outros sites

  • 0
Troque:

$qr = mysql_query($sql);
Por:
$qr = mysql_query($sql) or die(mysql_error());

E poste o que retornar aqui.

Amigo gostaria de inserir essa opção em uma pagina que tenho pronta, já tenho o banco de dados, tenho o sistema rodando, mas na pagian de cadastro não aparece a opçaõ estado e pra carregar a cidade,

teria como alguém me ajudar a inserir esse codigo

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte...

no codigo javascript substitua o código para o seguinte...

Seu...

$(document).ready(function(){
        
         $("select[name=estado]").change(function(){
            $("select[name=cidade]").html('<option value="0">Carregando...</option>');
            
            $.post("cidades.php",
                  {estado:$(this).val()},
                  function(valor){
                     $("select[name=cidade]").html(valor);
                  }
                  )
            
         })
      })
mude para ....
$(document).ready(function(){
         $("select[name=estado]").change(function(){
            $.ajax({
                type: 'POST',
                url: 'cidades.php',
                data: { 
                        estado: $("select[name=cidade]").val()
                },
            // Antes de enviar
            beforeSend: function(){
                 $("select[name=cidade]").html('<option value="0">Carregando...</option>');
            },
            
            // Retorno do Echo do PHP
            success: function(txt){
                $(select[name=cidade]').html(txt);
                },
    
            // Se acontecer algum erro é executada essa função
            error: function(txt){
               alert(txt);
            }
        });
            
         })
      })
No codigo php, aconselho a tratar o parametro que está enviando para ter certeza que não esteja vazio...
<?php
include "config.php";

if(isset($_POST['estado']) || !empty($_POST['estado'])){
   $estado = $_POST['estado'];

}


$sql = "SELECT * FROM tb_cidades WHERE estado = '$estado' ORDER BY nome ASC";
$qr = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($qr) == 0){
   echo  '<option value="0">'.htmlentities('Não cidades nesse estado').'</option>';
  
}else{
   while($ln = mysql_fetch_assoc($qr)){
      echo '<option value="'.$ln['id'].'">'.$ln['nome'].'</option>';
   }
}

?>
outra sugestão, na marcação html do select estado e cidade, coloque a tag ID,=... <select name="estado" id="estado"> assim você podera utilizar a marcação do JQuery da seguinte forma....
$('select#estado').val()

bem, acredito que assim irá funcionar.

abraços.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...