Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);
?>Sim, você deveria ter duas tabelas e criar relacionamento entre elas.
Tabelas:
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
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.
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
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
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
boa, irei tentar aqui, logo ja respondo o resultado ..
Obrigado por enquanto ..
é .. não estou conseguindo fazer a comparação, eu entendi a lógica, porem nao consigo montar no código ..
como está fazendo? mostre o código que está usando
<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
Mas você postou o mesmo código do primeiro post. Eu estava falando do código que recebe o valor selecionado do formulário.
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>Você resgata um valor do form assim:
$cidade = $_POST['cid'];
Depois basta comparar com os valores do arquivo, com um loop semelhante ao qual você já usou
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.
Mostre como fez. Sem isso, não tenho como saber onde pode estar errado :)
upei no one drive,
poste o código aqui. fica como referência para buscas futuras. E use as tags CODE. O botão pra isso fica ao lado do botão de inserir imagens
<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>Troque
substr( $linha, -4, -5 )
por isto
substr( $linha, -2, 2 )
ainda erro =(
/applications/core/interface/imageproxy/imageproxy.php?img=http://i62.tinypic.com/t0q008.jpg&key=f6bdb2f4099b7bc7d5976546ff0bea21f650d56b8ad563539b652a5b4f9525a9" alt="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>em vez disto:
echo substr($linha)
use isto
echo $linha
cara, so o select da pagina 2 que ficou listando todas cidades, porem as que nao são de terminado estado ficam em branco .. ai fiz normal msm, sem select ..
Tbm tive que alterar essa parte do codigo, mas deu certo
if (substr($linha, -4, -2) == $estado){
Enfim, deu certo ..
Muito Obrigado, estou grato pela ajuda de vocês..
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.