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

(Resolvido) Endereço dinâmico


viper33

Pergunta

Preciso fazer um cadastro de clientes onde ao selecionar uma cidade, no outro select apareça somente os bairros cadastrados para aquela cidade. E ao selecionar o bairro, preciso que no outro select apareça somente a ruas relacionadas aquele bairro.

Segue as tabelas para que possam entender como o banco está estruturado. Como posso implementar isso?

Create Table TbCliente  (
        NumCli Dom_numero,
        RzSocial Varchar(80),
        NmFant Varchar(80),
        CpfCnpj Varchar(20) NOT NULL,
        InscEst Varchar(20), 
        CdRmAtiv Dom_numero,
        CdRua Dom_numero, 
        Numero Varchar(10) NOT NULL,
        Compl Varchar(20),
        Email Varchar(60),
        Cep Varchar(10) NOT NULL,
        CdUsuinc Dom_usuincreg,
        Dtincreg Dom_dtincreg,
        Cdusualt Dom_usualtreg,
        Dtaltreg Dom_dtaltreg,
constraint PK_TbCliente_NumCli primary key (NumCli)
);       


Alter Table TbCliente add constraint FK_TbCliente_CdRmAtiv  foreign Key (CdRmAtiv) references TbRm_Ati (CdRmAtiv) ON DELETE NO ACTION ON UPDATE CASCADE;
Alter Table TbCliente add constraint FK_TbCliente_CdRua  foreign Key (CdRua) references TbRua (CdRua) ON DELETE NO ACTION ON UPDATE CASCADE;


CREATE INDEX IND_TBCLIENTE_NUMCLI ON TBCLIENTE(NUMCLI);
CREATE INDEX IND_TBCLIENTE_NMFANT ON TBCLIENTE(NMFANT);

Create Table TbCidade  (
       CdCidade Dom_numero,
       NmCidade Varchar(30) NOT NULL UNIQUE,
       SgEstado char(2) NOT NULL,
       CdUsuinc Dom_usuincreg,
       Dtincreg Dom_dtincreg,
       Cdusualt Dom_usualtreg,
       Dtaltreg Dom_dtaltreg,
constraint PK_TbCidade_CdCidade  primary key (CdCidade)
);


CREATE INDEX IND_TBCIDADE_CDCIDADE ON TBCIDADE(CDCIDADE);
CREATE INDEX IND_TBCIDADE_NMCIDADE ON TBCIDADE(NMCIDADE);




Create Table TbBairro  (
    CdBairro Dom_numero,
    NmBairro Varchar(40) NOT NULL,
    CdCidade Dom_numero,
        CdUsuinc Dom_usuincreg,
        Dtincreg Dom_dtincreg,
        Cdusualt Dom_usualtreg,
        Dtaltreg Dom_dtaltreg,
constraint PK_TbBairro_CdBairro primary key (CdBairro)
);


Alter Table TbBairro add constraint Fk_TbBairro_CdCidade foreign Key (CdCidade) references TbCidade (CdCidade) ON DELETE NO ACTION ON UPDATE CASCADE;

CREATE INDEX IND_TBBAIRRO_CDBAIRRO ON TBBAIRRO(CDBAIRRO);
CREATE INDEX IND_TBBAIRRO_NMBAIRRO ON TBBAIRRO(NMBAIRRO);



Create Table TbRua  (
    CdRua Dom_numero,
    NmRua Varchar(40) NOT NULL,
    CdBairro Dom_numero,
        CdUsuinc Dom_usuincreg,
        Dtincreg Dom_dtincreg,
        Cdusualt Dom_usualtreg,
        Dtaltreg Dom_dtaltreg,
constraint PK_TbRua_CdRua primary key (CdRua)
);

Alter Table TbRua  add constraint Fk_TbRua_CdBairro  foreign Key (CdBairro) references TbBairro(CdBairro) ON DELETE NO ACTION ON UPDATE CASCADE;


CREATE INDEX IND_TBRUA_CDRUA ON TBRUA(CDRUA);
CREATE INDEX IND_TBRUA_NMRUA ON TBRUA(NMRUA);

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

7 respostass a esta questão

Posts Recomendados

  • 0

A questão é que ao selecionar uma cidade eu tenho que passar um parâmetro para que o select de bairro exiba apenas os bairros daquela cidade. No Delphi fiz assim e funciona perfeitamente:

procedure TFrmCadCliente.DblCidadeClick(Sender: TObject);
begin
  Dm.qryBairro.Close;
  Dm.qryBairro.Parameters[0].Value := dblcidade.KeyValue;
  Dm.qryBairro.Parameters[1].Value := 0;
  Dm.qryBairro.Open;
end;

A qry bairro:
 SELECT *
FROM TBBAIRRO 
WHERE CDCIDADE = :CDCIDADE or CDBAIRRO = :CDBAIRRO
ORDER BY NMBAIRRO;

Não sei como fazer no PHP.

Link para o comentário
Compartilhar em outros sites

  • 0
Bom de Delphi não manjo nada, mas a idéia é a mesma, no select você utiliza a clausula where.

No link que passei mostra isso claramente e comentado para facilitar ainda mais. Veja o arquivo result.php

Fit, estou precisando de uma luz aqui. Já consegui um avanço. Quando seleciono a cidade aparecem somente os bairros relacionados àquela cidade. Mas não estou conseguindo fazer o terceiro combo dinâmico, no caso o de ruas. Veja o código:

FORM CADASTRO DE CLIENTES - FORM RESUMIDO APENAS PARA TER UMA IDÉIA.

<form method="post" action="rec_cad_cliente.php"  name="frmcad_cliente" ><table width="100%" border="0" align="center">
  <tr>
    <td height="36" class="Titulo">Cadastrar Cliente</td>
  </tr>
</table>
  <div id="botoes"></div>
  <div id="descricao">
    <table width="100%" border="0" align="center">
      <tr style="text-align: center; color: #000;">
             <td align="right" bgcolor="#EEEEEE">Cidade:</td>
           <td colspan="2" align="left" bgcolor="#EEEEEE">
           <select name="cidade">
             <option value="0">Escolha uma Cidade</option>
             [b]<?PHP
                 mysql_query("SET NAMES UTF8");
               $sql = "SELECT cdcidade, nmcidade, sgestado FROM tbcidade ORDER BY nmcidade";
               $resultado = mysql_query($sql) or die ("N&atilde;o foi poss&iacute;vel executar a consulta.");
               while($registro = mysql_fetch_assoc($resultado))
               {
                 echo '<option value="'.$registro['cdcidade'].'">'.$registro['nmcidade'].'</option>';
               }[/b]
     ?>        
         </select>
FORM BAIRROS QUE RETORNA OS BAIRROS DINAMICAMENTE APÓS SELECIONAR UMA CIDADE:
<?php
  include "valida_cookie.php";
  include "conecta_mysql.inc";  
  
  $cidade = $_POST['cidade'];
  
  mysql_query("SET NAMES UTF8");
  $sql = "SELECT cdbairro, nmbairro FROM tbbairro WHERE cdcidade = '$cidade' ORDER BY nmbairro";  
  $resultado = mysql_query($sql) or die ("N&atilde;o foi poss&iacute;vel executar a consulta.");
  if(mysql_num_rows($resultado) == 0)
  {
    echo  '<option value="0">'.htmlentities('N&atilde;o h&aacute; bairros para esta cidade.').'</option>';
  }
  else
  {
    while($registro = mysql_fetch_assoc($resultado))
    {
      echo '<option value="'.$registro['cdbairro'].'">'.$registro['nmbairro'].'</option>';
    }
  }
?>

Até aí funciona perfeitamente. Mas preciso fazer agora o combo rua ser preenchido dinamicamente após selecionar o bairro. E não estou conseguindo.

Link para o comentário
Compartilhar em outros sites

  • 0

O código correto é este:

$(document).ready(function()
{
    $("select[name=cidade]").change(function()
    {
        $("select[name=bairro]").html('<option value = "0">Carregando...</option>');
        $.post("bairros.php",
        {
            cidade:$(this).val()
        },
        function(valor)
        {
          //alert(valor);
           $("select[name=bairro]").html(valor);
        });
    });

$("select[name=bairro]").change(function()
{
   $("select[name=rua]").html('<option value = "0">Carregando...</option>');
   $.post("ruas.php",
   {
       rua:$(this).val()
   },
   function(valor)
   {
     //alert(valor);
     $("select[name=rua]").html(valor);
   });
});   
});

Mas após selecionar o bairro quando clico no combobox de rua ele tenta carregar mas não acha valor nenhum.

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
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...