Ir para conteúdo

POWERED BY:

Arquivado

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

reinaldorti

estados e cidades

Recommended Posts

olá, estou com duvida.

 

Estou fazendo um projeto que tem varias franquias pelo brasil. quando seleciono o estado e quando seleciona o estado ele seleciona as cidades que estão disponíveis para aquele estados.

o meu proplema é tirando são paulo está funcionando tudocerto. mas quando eu seleciono o estado de são paulo e seleciono qualquer cidade ele só me mostra unica unidade. gostaria de saber como eu faço para quando eu selecionar a cidade e clicar em buscar ele buscar somente aquela cidade selecionada... segue o link abaixo do projeto.. link direto..

 

http://www.riolax.com.br/2013/onde-comprar-banheiras-riolax.php

 

segue link do projeto.. não sei onde estou errando... mas preciso que quando eu seleciono um estado e seleciono a cidade ele me mostre somente aquela cidade selecionada..

 

onde comprar

<script type="text/javascript" src="js/jquery.js"></script>

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

<form name="visualizar" action="franquias.php" method="post" enctype="multipart/form-data">

<table width="458" height="28" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<th width="145" align="left" valign="top" scope="col"><select name="estado" style="float:left; height:20px;">
<option value="0" >Escolha um Estado</option>
<?php
$estado = $_POST['estado'];
$sql = "SELECT * FROM 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></th>
<th align="left" valign="top" scope="col"><select name="cidade" style="float:left; height:20px;" >
<option value="0" disabled="disabled">Escolha um Estado Primeiro</option>
</select>
<input type="submit" name="visualizar2" value="Listar" style="width:50px; height:18px; border:none; border-radius:5px 5px 5px 5px; background:#FFF; color:#463E42; cursor:pointer; margin-left:5px;float:left;" />
<input type="hidden" name="id_loja" value="<?php echo $id_loja;?>" />
<input type="hidden" name="visualizar3" value="ok" /></th>
</tr>
</table>
</form>
cidades.php
<?php
include"config.php";
$estado = $_POST['estado'];
$nome = $_POST['nome'];
$sql = "SELECT * FROM lojas 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('Nada foi encontrado').'</option>';
}else{
while($res = mysql_fetch_assoc($qr)){
echo '<option value="'.$res['nome'].'">'.$res['nome'].'</option>';
}
}
?>

 

Franquias.php

 

 

<?php
$id_loja = $_POST['id_loja'];
$estado = $_POST['estado'];
$nome = $_POST['nome'];
$nome2 = $_POST['nome2'];
$cidade = $_POST['cidade'];
$uf = $_POST['uf'];
$estado = $_POST['estado'];
$sql = mysql_query("SELECT id_loja, foto, loja, texto, mapa FROM lojas WHERE estado = '$estado' LIMIT 1 ")
or die(mysql_error());
if(@mysql_num_rows($sql) <= '0') echo '<center><h1 style="color:#F00;">Nenhuma franquia foi encontrada</h1></center>';
else{
while($res=mysql_fetch_array($sql)){
$id_loja = $res[0];
$foto = $res[1];
$loja = $res[2];
$texto = $res[3];
$mapa = $res[4];
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a ligação de cidades e estados ?

Existe um ligação entre eles ?

 

Eu geralmente uso duas tabelas, até porque se um dia necessitar cadastrar mais um franquia já tem espaço lá

 

Tabela Estado 1 p/ n Tabela Cidade

 

Seleciono o estado, e como a chave primaria do lado 1 vira chave estrangeira do lado n:

 

 

 
select nome_cidade from cidade where fk_estado="'$cod_estado'" //Onde $cod_estado tem o valor da chave primaria do estado selecionado
 

 

com o resultado da query preencho os selects.

 

Acho que isso resolve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim existe sim.. cada estado tem varias franquias. umas já estão funcionando e outras por abrir. quando eu selecionar o estado mostra as cidades relacionada aquele estado. e quando eu Selecionar a cidade e clicar no botão pesquisar ele mostrar somente a cidade que eu selecionei daquele estado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim existe sim.. cada estado tem varias franquias. umas já estão funcionando e outras por abrir. quando eu selecionar o estado mostra as cidades relacionada aquele estado. e quando eu Selecionar a cidade e clicar no botão pesquisar ele mostrar somente a cidade que eu selecionei daquele estado...

Acho que seria mais fácil e até mais objetivo fazer pelas cidades e estados que tem filial.

 

Só mostrar os estados que tem filial e logo só as cidades com filiais em funcionamento.

 

Testou aquele select que falei ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei nao consegui... olha o projeto que to fazendo ai e voce vai entender o que estou falando...

http://www.riolax.com.br/2013/onde-comprar-banheiras-riolax.php

 

quando eu seleciono o estado. menos são paulo ele lista mormal a cidade. mas quando eu seleciono são paulo e seleciono qualquer cidade de são paulo ele so me mostra um.. esse que nao to conseguindo.. olha lá que voce vai entender..

 

 

não consegui fazer ainda. se alguém puder me ajudar... obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

não consegui fazer ainda. se alguém puder me ajudar... obrigado!!!

Tenho um js que faz assim aqui meu caro

 

 
~function buscaProj(){
    $('select[name="projeto"]').change(function(){
        //Busca os Fornecedores
        $('select[name="fornecedor"]').html('<option value="sda">Procurando :::::::</option>');
        $.post('buscaFornecedor.php',
            { p : $(this).val() },
            function(resposta){
                $('select[name="fornecedor"]').html(resposta);
            }
        );
        
        //Busca os Grupos
        $('select[name="grupo"]').html('<option value="sda">Procurando :::::::</option>');
        $.post('buscaGrupoProj.php',
            { p : $(this).val() },
            function(resposta){
                $('select[name="grupo"]').html(resposta);
            }
        );
        
        //Busca as Peças
        $('select[name="referencia"]').html('<option value="sda">Procurando :::::::</option>');
        $.post('buscaReferenciaProj.php',
            { p : $(this).val() },
            function(resposta){
                $('select[name="referencia"]').html(resposta);
            }
        );
        
    });
}

function buscaForn(){
    $('select[name="fornecedor"]').change(function(){
                
        //Busca os Grupos DO FORNECEDOR
        $('select[name="grupo"]').html('<option value="sda">Procurando :::::::</option>');
        $.post('buscaGrupoForn.php',
            { p : $(this).val() },
            function(resposta){
                $('select[name="grupo"]').html(resposta);
            }
        );
        
        //Busca as Peças
        $('select[name="referencia"]').html('<option value="sda">Procurando :::::::</option>');
        $.post('buscaReferenciaForn.php',
            { p : $(this).val() },
            function(resposta){
                $('select[name="referencia"]').html(resposta);
            }
        );
        
    });
}

function buscaGrupo(){
    $('select[name="grupo"]').change(function(){
                    
        //Busca as Peças DO GRUPO
        $('select[name="referencia"]').html('<option value="sda">Procurando :::::::</option>');
        $.post('buscaReferenciaGrupo.php',
            { p : $(this).val() },
            function(resposta){
                $('select[name="referencia"]').html(resposta);
            }
        );
        
    });
}

function buscar(){
    if(document.form.projeto.value != 'x'){
        if(document.form.grupo.value != 'x' || document.form.referencia.value != 'x'){
            document.form.submit();
        }else{
            alert("Selecione um Grupo ou Referência!");
        }
    }else{
        alert("Selecione um Projeto!");
    }
}
 

Os phps dela são assim

Para achar um grupo de fornecedores.

 

 
 
if (isset($_POST['p'])){
        $p = $_POST["p"];
        
        $sql = "SELECT g.id_grupo , g.descricao_grupo FROM fornecedor f join grupo g on(g.fornecedor_grupo = f.id_fornecedor) WHERE f.id_fornecedor = '".$p."' ORDER BY g.descricao_grupo ASC";        
        
        
        $qry = mysql_query($sql);
        print '<option value="x">Selecione</option>';        
    
        while($arr=mysql_fetch_array($qry)){
                print '<option value="'.$arr["id_grupo"].'">'.$arr['descricao_grupo'].'</option>';
        }
    }else{
        print 'Erro no envio dos dados';
    }
?>

Vou testar seus codigos, ainda não tive tempo, quais idéia você tem do problema ? Do que pode ser etc?

 

 

 

Franquias.php

 

 

<?php

$id_loja = $_POST['id_loja'];

$estado = $_POST['estado'];

$nome = $_POST['nome'];

$nome2 = $_POST['nome2'];

$cidade = $_POST['cidade'];

$uf = $_POST['uf'];

$estado = $_POST['estado'];

 

$sql = mysql_query("SELECT id_loja, foto, loja, texto, mapa FROM lojas WHERE estado = '$estado' LIMIT 1 ")

or die(mysql_error());

if(@mysql_num_rows($sql) <= '0') echo '<center><h1 style="color:#F00;">Nenhuma franquia foi encontrada</h1></center>';

else{

while($res=mysql_fetch_array($sql)){

$id_loja = $res[0];

$foto = $res[1];

$loja = $res[2];

$texto = $res[3];

$mapa = $res[4];

 

?>

 

Nessa linha:

$sql = mysql_query("SELECT id_loja, foto, loja, texto, mapa FROM lojas WHERE estado = '$estado' LIMIT 1 ")

Qual motivo do Limit 1 ?

 

Pode postar a estrutura das tabelas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o limit 1 porque tava listando tudo de uma vez quando eu Selecionava o estado de são paulo... mas, assim funciono. mas o estado de são paulo que tem mais ele pega somente uma cidade e quando eu seleciono outro cidade ele mostra a mesma...

 

vo dar uma olhada nesse código que você me passo

 

voce viu o projeto que to fazendo la voce pode ter base do que preciso...

 

http://www.riolax.com.br/2013/onde-comprar-banheiras-riolax.php

 

voce seleciona o estado de sao paulo algumas vezes e ve o que acontece...

Compartilhar este post


Link para o post
Compartilhar em outros sites
$sql = mysql_query("SELECT id_loja, foto, loja, texto, mapa FROM lojas WHERE estado = '$estado' and cidade='$cidade' LIMIT 1 ")


você tem que colocar o id da cidade na loja e puxar pelo id do estado e cidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

o limit 1 porque tava listando tudo de uma vez quando eu Selecionava o estado de são paulo... mas, assim funciono. mas o estado de são paulo que tem mais ele pega somente uma cidade e quando eu seleciono outro cidade ele mostra a mesma...

 

vo dar uma olhada nesse código que você me passo

 

voce viu o projeto que to fazendo la voce pode ter base do que preciso...

 

http://www.riolax.com.br/2013/onde-comprar-banheiras-riolax.php

 

voce seleciona o estado de sao paulo algumas vezes e ve o que acontece...

 

é eu vi lá, peguei seus codigo e to criando um teste aqui pra se consigo, mas precisava na estrutura das tabelas, quem é chave primária quem é a estrangeira, como fez o relacionamento.

 

 

$sql = mysql_query("SELECT id_loja, foto, loja, texto, mapa FROM lojas WHERE estado = '$estado' and cidade='$cidade' LIMIT 1 ")
você tem que colocar o id da cidade na loja e puxar pelo id do estado e cidade

 

Então isso que queria ver como é a estruturada da tabela pra saber se a query ta retornando o que ele quer. ótima observação.

Compartilhar este post


Link para o post
Compartilhar em outros sites


segue as tabelas

 

caso queira segue o link do banco

http://www.riolax.com.br/2013/riolax-2013.sql

 

-- ----------------------------

-- Table structure for `estados`

-- ----------------------------

DROP TABLE IF EXISTS `estados`;

CREATE TABLE `estados` (

`id` int(2) unsigned zerofill NOT NULL AUTO_INCREMENT,

`uf` varchar(10) NOT NULL DEFAULT '',

`nome` varchar(20) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;


-- ----------------------------

-- Table structure for `lojas`

-- ----------------------------

DROP TABLE IF EXISTS `lojas`;

CREATE TABLE `lojas` (

`id_loja` int(11) NOT NULL AUTO_INCREMENT,

`foto` varchar(200) DEFAULT NULL,

`loja` varchar(200) DEFAULT NULL,

`estado` int(11) DEFAULT NULL,

`cidade` varchar(100) DEFAULT NULL,

`email` varchar(100) DEFAULT NULL,

`texto` longtext,

`mapa` longtext,

PRIMARY KEY (`id_loja`)

) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

segue as tabelas-- ------------------------------  Table structure for `estados`-- ----------------------------DROP TABLE IF EXISTS `estados`;CREATE TABLE `estados` (  `id` int(2) unsigned zerofill NOT NULL AUTO_INCREMENT,  `uf` varchar(10) NOT NULL DEFAULT '',  `nome` varchar(20) NOT NULL DEFAULT '',  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
-- ------------------------------  Table structure for `lojas`-- ----------------------------DROP TABLE IF EXISTS `lojas`;CREATE TABLE `lojas` (  `id_loja` int(11) NOT NULL AUTO_INCREMENT,  `foto` varchar(200) DEFAULT NULL,  `loja` varchar(200) DEFAULT NULL,  `estado` int(11) DEFAULT NULL,  `nome` varchar(100) DEFAULT NULL,  `email` varchar(100) DEFAULT NULL,  `texto` longtext,  `mapa` longtext,  `nome2` varchar(100) DEFAULT NULL,  PRIMARY KEY (`id_loja`)) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

Bom se não me engano ta faltando a tabela de cidades, liga as lojas somente a cidades pois se está em uma cidade logo estará em um estado, isso facilitará a busca. Eu faria algo do tipo

 

 

 
create database ajuda;
use ajuda;
 
CREATE TABLE IF NOT EXISTS `cidades` (
  `cid_id` int(11) NOT NULL AUTO_INCREMENT,
  `est_cod` int(11) NOT NULL,
  `cid_nome` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`cid_id`),
  KEY `est_cod` (`est_cod`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
INSERT INTO `cidades` (`cid_id`, `est_cod`, `cid_nome`) VALUES
(1, 1, 'Volta Redonda'),
(2, 2, 'São José dos Campos'),
(3, 1, 'Niterói'),
(4, 2, 'São Paulo');
CREATE TABLE IF NOT EXISTS `estados` (
  `est_cod` int(11) NOT NULL AUTO_INCREMENT,
  `est_nome` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`est_cod`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `estados` (`est_cod`, `est_nome`) VALUES
(1, 'Rio de Janeiro'),
(2, 'São Paulo');
CREATE TABLE IF NOT EXISTS `filiais` (
  `fil_id` int(11) NOT NULL AUTO_INCREMENT,
  `cid_id` int(11) NOT NULL,
  `fil_nome` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`fil_id`),
  KEY `cid_id` (`cid_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

ALTER TABLE `cidades`
  ADD CONSTRAINT `cidades_ibfk_1` FOREIGN KEY (`est_cod`) REFERENCES `estados` (`est_cod`);
ALTER TABLE `filiais`
  ADD CONSTRAINT `filiais_ibfk_1` FOREIGN KEY (`cid_id`) REFERENCES `cidades` (`cid_id`);
 
 

 

Onde filiais são as lojas ok ? Com essa estrutura ficaria mais simples qualquer consulta.

 

Por exemplo.

 

select c.cid_nome from cidades c, estados e where e.est_cod=1 and e.est_cod=c.est_cod

 

Buscaria todas a cidades que tivesse como estado o estado de cod igual a 1 que no caso seria o Rio de Janeiro, o Resultado dessa Query deve retornar: Volta Redonda e Niterói. Que são as cidades cadastradas com o código de estado 1.

 

Ah mas rodolfo preciso colocar todas as cidades na mão ? Faz um csv , importa com phpmyadmin isso é o de menos.

 

Mas acredito que não serão tantas pois só serão as que tiverem filiais, resolvido o problema do banco de dados partimos para o php.

 

Primeiro precisamos garantir que os dados estão retornando corretamente.

 

Ps.: Uma de suas tabelas é to tipo InnoDB e ou do tipo MyISAM , isto é, uma da suporte e chaves estrangeiras outra não, isso pode ser um problema.

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodolfo, muito obrigado deu certo.. consegui usando os código que você passo.

Fiz algumas adaptações e agora funciona perfeito..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodolfo, muito obrigado deu certo.. consegui usando os código que você passo.

Fiz algumas adaptações e agora funciona perfeito..

 

Beleza !! Usou os códigos php ou do banco de dados ?

 

Depois posta a solução e se realmente entendeu qual era o problema, isso é o mais importante.

 

Ps.: Gostei do layout do sistema! Parabéns!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Rodolfo,

Eu não tava usando as tabelas como era para ser usar de verdader. ex: eu tava usando na tabela estado id, e nome. nesse nome eu tava colocando os estados. na tabela lojas eu usava o id, loja, foto, texto. então, tava confundindo a cabeça. ai peguei tua explicação com umas parte do código e implementei no meu sistema. não usei tudo mas algumas partes.. o certo é usar os nomes nos código igual ta no banco para não confundir..

 

obrigado pela ajuda e o novo site da Riolax está ficando legal mesmo. pelo menos meus patroes estão gostando..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Rodolfo,

Eu não tava usando as tabelas como era para ser usar de verdader. ex: eu tava usando na tabela estado id, e nome. nesse nome eu tava colocando os estados. na tabela lojas eu usava o id, loja, foto, texto. então, tava confundindo a cabeça. ai peguei tua explicação com umas parte do código e implementei no meu sistema. não usei tudo mas algumas partes.. o certo é usar os nomes nos código igual ta no banco para não confundir..

 

obrigado pela ajuda e o novo site da Riolax está ficando legal mesmo. pelo menos meus patroes estão gostando..

 

Entendi, muito bom!

 

Sempre faça um esboço do m.e.r meu caro, esses problemas são evitados na fase de projeto, por mais simples que seja a implementação deve ter algo pra auxiliar. E cada vez mais seus projetos vão evoluindo. Um abraço e bom trabalho !

Compartilhar este post


Link para o post
Compartilhar em outros sites

oe, coloquei o projeto no ar. agora funciona tudo certinho. se quiser acessar http://www.riolax.com.br/2013/onde-comprar-banheiras-riolax.php

 

o problema é que esse e feito do estado e cidade não funciona no internet explorer porque?

 

aí é mais relacionado com o css / javascript , No ie, da um clique com botão direito e clique em algo relacionado a ver o código fonte, aqui é em francês algo do tipo "afficher la source" dever ser algo do tipo visualizar código fonte. E verifique se o php ta gerando o html como você precisa. Se sim e não tiver aparecendo é algo no js/css mesmo.

 

Temos que ter certeza que a consulta funciona. Se estiver retornando os dados corretamente, basta verificar o que acontece com seu javascript / css na hora de alternar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Segue o link do arquivo eu não consegui ver nenhum erro...


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


cidades.php


<?php

include"config.php";

$estado = $_POST['estado'];

$cidade = $_POST['cidade'];

$sql = "SELECT * FROM lojas WHERE estado = '$estado' ORDER BY cidade ASC";

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


if(mysql_num_rows($qr) == 0){

echo '<option value="0">'.htmlentities('Nada foi encontrado').'</option>';

}else{

while($res = mysql_fetch_assoc($qr)){

echo '<option value="'.$res['cidade'].'">'.$res['cidade'].'</option>';

} }

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Segue o link do arquivo eu não consegui ver nenhum erro...
<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>
cidades.php

<?php
include"config.php";
$estado = $_POST['estado'];
$cidade = $_POST['cidade'];
$sql = "SELECT * FROM lojas WHERE estado = '$estado' ORDER BY cidade ASC";
$qr = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($qr) == 0){
echo '<option value="0">'.htmlentities('Nada foi encontrado').'</option>';
}else{
while($res = mysql_fetch_assoc($qr)){
echo '<option value="'.$res['cidade'].'">'.$res['cidade'].'</option>';
} }
?>

Então esse código gera um html no navegador ve se o código ta sendo gerado direitinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Rodolfo.

eu conseguir descobrir porque no ie porque não tava mostrando as cidades. eu coloquei um script para ele tirar o negocio de compatibilidade

 

(

 

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" /> <script type="text/javascript">$(document).ready(function(){ $.CSS3ForIE(); });</script>

 

)

 

mas, agora é o seguinte,quando eu coloco no banco de dados as acentuação. tipo (São José do Rio Preto) ele não printa na tela erro de acentuação e quando eu listo a cidade ele não mostra a loja, quando eu coloco no banco dedados a codificação para ( São José do Rio Preto ) ele printa certo na tela só que também quando eu listo a cidade ele não mostra a loja também...

 

eu já coloquei

 

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

e não vai, será que tem alguma coisa que eu coloco direto no php para ele codificar as acentuação?

 

LEMBRANDO, que ele somente está fazendo isso no Internet Explorer e no Mozilla. no Google chrome está tudo OK..

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.