Ir para conteúdo

POWERED BY:

Arquivado

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

Fernando_Henrique

Select de Estados / Cidades

Recommended Posts

Boa tarde, estou com um trabalho para fazer em PHP que se resumo no seguinte:

Tenho um arquivo txt com todas as cidades do Brasil seguidas do Estado na qual correspondem .. exemplo: São Paulo/SP

e tenho outro arquivo com todos os estados do pais separados em linha.

 

O que eu preciso e estou com dificuldades é o seguinte, preciso que assim que selecionar o estado em um select, o codigo busque as duas ultimas letras da cidade no arquivo txt na qual correspondem ao estado e filtre as cidades do estado selecionado no select.

 

Podem me ajudar.

Grato ..

 

Segue abaixo o codigo:

 

 

<h3>SELECIONE CIDADE E ESTADO</h3>
<?php
echo "</select>";
$arq = fopen("estados.txt", "r");
if ($arq == false) {
die("Não foi possivel abrir o Arquivos");
}
echo "ESTADO: <select name = 'est'>";
while (! feof($arq)) {
$linha = fgets($arq);
echo "<option>";
echo $linha;
echo "</option >";
}
echo "</select>";
echo '<br/><br/>';
$arq = fopen("cidades.txt", "r");
if ($arq == false) {
die("Não foi possivel abrir o Arquivos");
}
echo "CIDADE: <select name = 'cid'>";
while (! feof($arq)) {
$linha = fgets($arq);
echo "<option>";
echo $linha;
echo "</option >";
}
fclose($arq);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, não seria melhor vc criar duas tabelas em seu banco de dados? uma e Estado e outra de Cidades? acho que assim vc resolveria mais fácil esta questão, além de manter os dados mais consistentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, você deveria ter duas tabelas e criar relacionamento entre elas.

 

Tabelas:

 

- Estados

- Cidades

 

A idéia é ter um id_estado na tabela de cidades com o id do estado da tabela "estado" que a cidade pertence. Quando o usuário seleciona o estado num select, o outro é carregado com as cidades daquele estado. Dessa forma fica mais organizado.

 

Existe tabelas dessas prontas. Vou tentar achar e coloco aqui o link.


Ta aqui o link: http://blog.oliverio.eti.br/programadores/bancos/sql_cidades_estados.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigos.

Sim, sem duvidas pelo banco de dados resolveria o problema, mas acontece que na verdade o trabalho é de uma amiga que esta cursando o primeiro ano de sistemas de informação e ela nao pode aplicar o que ainda nao aprendeu no exercicio, ou seja, ela tera que trabalhar somente com o código e os dois arquivos txt.

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa ler o arquivo, linha a linha, de forma semelhante à como fez para exibir as cidades. A diferença é que, em vez de exibir a linha, terá de compará-la com a cidade selecionada no formulário.

 

Só não entendi ainda a lógica do funcionamento. você disse que o usuário deve selecionar um estado apenas, mas seu exemplo monta combobox de estados e de cidades

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, não estou conseguindo compara-los.

O objetivo é, por exemplo, escolho o estado MG no select e atraves do formulario busco no arquivo cidades.txt todas as cidades que possuem o /MG e imprimo na tela.

Acredito que tambem tenha que ler caractere por caractere certo ?

 

Não sei se fui muito claro na duvida, mas qualquer coisa explico melhor..

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, são dois passos (2 telas):

 

1. Uma tela que mostra apenas os estados. Após o submit, passo 2

 

2. Recebe a sigla do estado, abre o arquivo e busca por todas as cidades cujo estado foi o selecionado no form.

 

Para comparar o estado, não precisa ler caractere por caractere. Você pode usar a função substr() para pegar só os dois últimos caracteres de cada linha, para comparar com a sigla selecionada.

 

PS: se não me engano, fgets() retorna, também, a quebra de linha (\n). Por isso, você precisa descartar o último caractere antes de pegar a sigla. Isso equivale a usar substr() considerando o parâmetro "start" em -2 em vez de -1

Compartilhar este post


Link para o post
Compartilhar em outros sites
<html>

<head>

<title></title>

</head>

<body>


<?php

$arq=fopen("cidades.txt","r");

echo "cidade: <select name = 'cid'>";

while (!feof($arq)){

$linha = fgets($arq);

echo "<option>";

echo substr($linha, 0, -5).'<br/>';

echo "</option >";

}

fclose($arq);

?>


</body>

</html>




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



Não consegui fazer a condição, onde devo "capturar" o Estado e compara-lo com o escolhido na tela anterior ..


Segue o codigo todo para download http://1drv.ms/1uJFToL

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, o que eu nao sei é fazer pra receber o valor e fazer as condições ..

se puder me ajudar ..


<html>
<head>
<title></title>
</head>
<body>
<?php
$est = $_POST['est'];
?>
<?php
$arq=fopen("cidades.txt","r");
echo "CIDADE: <select name = 'cid'>";
while (!feof($arq)){
$linha = fgets($arq);
echo "<option>";
if (substr($linha, -4, -3) == $est){
echo substr($linha). '<br/>';
}
echo "</option >";
}
fclose($arq);
?>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi .. estamos quase la, porém quando clico no botao, a segunda tela (das cidades) retorna com o select todo vazio .. parece que nao resgata nada ... tem alguma dica do que posso esta fazendo errado ?

 

E desculpe o incomodo, mas ficarei muito grato ao concluir o trabalho com sua ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<html>

<head>

<title>Cidade - Estado</title>

</head>

<body>

<h3> SELECIONE O ESTADO </h3>

<form action="cidades.php" method="post" >

<?php

$arq = fopen("estados.txt", "r");

if ($arq == false) {

die("Não foi possivel abrir o Arquivos");

}

echo "ESTADO: <select name = 'est'>";

while (! feof($arq)) {

$linha = fgets($arq);

echo "<option>";

echo $linha;

 

echo "</option >";

}

echo "</select><br/><br/>";

 

echo "<input type='submit' value='ENVIAR' />";

fclose($arq);

?>

</form>

</body>

</html>


 


<html>

<head>

<title></title>

</head>

<body>

 

<?php

$estado = $_POST['est'];

?>

 

<?php

$arq=fopen("cidades.txt","r");

echo "CIDADE: <select name = 'cid'>";

while (!feof($arq)){

$linha = fgets($arq);

echo "<option>";

if (substr($linha, -4, -5) == $estado){

echo substr($linha). '<br/>';

}

echo "</option >";

}

fclose($arq);

?>

 

</body>

</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda erro =(

 

t0q008.jpg

<html>
<head>
	<title></title>
</head>
<body>

<?php
	$estado = $_POST['est'];
?>

<?php	
	$arq=fopen("cidades.txt","r");
	echo "CIDADE: <select name = 'cid'>";
	while (!feof($arq)){
	$linha = fgets($arq);
	echo "<option>";
	if (substr($linha, -2, 2) == $estado){
	echo substr($linha). '<br/>';
	}
	echo "</option >";
  }
	fclose($arq);
?>

</body>
</html>

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.