No MySQL crie um banco de dados com o nome "brasil", por exemplo.
Crie a tabela estados (com os campos id->auto_increment e estado) e
outra chamada cidades (id e cidade). Na tabela cidades as cidades de
mesmo estado devem ter o mesmo id. O primeiro select ficaria assim:
<?php
$estado=$_GET['estado'];
$conexao=mysql_pconnect("localhost","usuário","senha");
mysql_select_db("brasil", $conexao);
$query = "select * from estados order by id";
$result = mysql_query($query) or die(mysql_error());
$query = stripslashes($query);
?>
Isso, a primeira vista, ficou mais complicado e maior do que o anterior.
Mas imagine que você queira colocar todos os estados e não só 5 como
feito no exemplo, ou que você quer tirar algum estado ou acrescentar,
então basta fazer isso no MySQL, evitando alterar o script. Para o select das cidades:
<?php
$query = "select * from cidades where id='$estado'";
$result= mysql_query($query) or die(mysql_error());
$query = stripslashes($query);
if ($estado){ ?>
<select name="cidade">
<option value="">selecione sua cidade</option> <?php
while ($row = mysql_fetch_row($result)){
$city = $row[1];
$id2 = $row[0];
echo "<option value=$id2> $city </option>";
}
?>
</select>
<?php }
?>
Que ficou sem sombra de dúvidas muito mais elegante que o script sem o MySQL.
Finish... basta agora que você implemente o script para suas necessidades.
Espero que o artigo seja tão gratificante para vocês o quanto foi para mim
escrevê-lo em horário de serviço.
[5] Comentário enviado por leofsouza em 31/12/2005 - 16:41h
Como faço para que apos selecionar o estado os outros campos do formulario nao sejam apagado... por exemplo: nome e outras coisas. pq quando clico no estado ele atualiza o documento e apaga a os outros dados.
[6] Comentário enviado por leomuriae em 05/02/2007 - 09:54h
Sr.Gustavo,
Teoricamente seria fantástico, porém, há um erro terrível cometido neste script.
Quando incrementamos com mysql, até a hora de selecionar tudo bem, ele vai perfeitamente, porém, na hora de transferir as informações vira o SAMBA DO CRIOLO DOIDO. Ele não passa as informações que foram selecionadas e sim números completamente diferentes das opções selecionadas.
Por gentileza coloca o script onde, dê para passar as informções corretamente.
Grato pela atenção,
Léo
[7] Comentário enviado por gocorrea em 05/02/2007 - 11:39h
Leo, obrigado pelo comentário mas gostaria de lembrar que esse artigo é muito antigo, e eu conhecia muito pouco sobre javascript, não recomendo que isso seja feito dessa maneira, recomendo que você use ajax. Quanto ao seu problema, veja essa parte do codigo:
no meu caso eu precisava que fosse transferido números ao invés do nome da cidade, uma vez que cada cidade esta associado a um número, para min ficou mais fácil trabalhar assim. Mas como você deseja que seja transferido o nome da cidade faça assim:
[8] Comentário enviado por leomuriae em 05/02/2007 - 17:12h
Obrigado Senhor Gustavo, novamente salvando o dia, este é o cara, foi mal pela exagero, era só pra chamar atenção e alguém me socorrer.
Porém, só mais uma dúvida, o estado vem descrito ainda como número, e eu gostria de repassar as informção de estado como letras, entende?
Salve a gente outra vez...
[9] Comentário enviado por gocorrea em 06/02/2007 - 08:19h
Basta substituir os campos value das opções do select pelo nome das cidades aos inves de números:
<html>
<body>
<select name="select" size=1 value=2 onChange="getStates(this);">
<option value="">selecione o estado</option>
<option value="Minas Gerais"> Minas Gerais </option>
<option value="São Paulo"> São Paulo </option>
<option value="Rio Grande do Sul"> Rio Grande do Sul </option>
<option value="Amazonas"> Amazonas </option>
<option value="Pernambuco"> Pernambuco</option>
</select>
</body>
</html>
[10] Comentário enviado por leomuriae em 06/02/2007 - 13:43h
Não, meu velho!!!
Tô falando encrementando com mysql, não é o estático não, o estático já fiz e deu certinho igual dedo no nariz...
Quando der nos responda e ajude a salvar dia novamente.
Valew brother...
[11] Comentário enviado por gocorrea em 07/02/2007 - 12:03h
ah cara vc vai ter reestruturar seu bando de dados para que na tabela cidades tenha o campo estado e cidade, e quando for fazer a consulta no mysql faça assim
$query = "select * from cidades where estado='$estado'";
lembrando que você deve alterar o select de estados como mostrado no comentário anterior.
[13] Comentário enviado por hudson.carlos em 20/03/2009 - 20:53h
$conexao=mysql_pconnect("localhost","Hudson","123456") or die("CONEXÃO INATIVA" . mysql_error());
mysql_select_db("brasil",$conexao) or die("NOME OU SENHA INVÁLIDOS!" . mysql_error()); O Internet Explorer retorna erro afirmando que falta o objeto solicitado na linha correspondente a esta variável, por isso ele não retorna o segundo combo. Como resolver este problema? Se puder me ajudar, agradeço, pois estou precisando de um sistema de combos múltiplos. Reitero que todas as modificações que são relatadas nos comentários foram feitas, e nem por isso o erro deixou de aparecer...
[14] Comentário enviado por rodmaru em 18/02/2010 - 00:29h
Ola
gostei muito da simplicidade do artigo.
estou precisando adicionar mais um select mas estou tendo dificuldade para implementa-lo.
poderia me dar uma dica?
[17] Comentário enviado por RR em 28/03/2011 - 23:19h
Sabe uma coisa que adoraria aprender?
Criar um site do zero, tipo, instalar Apache, php, mysql, criar modelos (templates), tudo em bancos de dados, albuns de fotos, sem que tem diversas apostilas na net... Porém seria interessante por usar essa ideia e reformar o site... e os usuarios/ colaboradores poderiam dar ideias, e ajudar a deixar o Viva o Linux mais com a cara da comunidade..... e com essa atividade poderiam ser criados video aulas / artigos explicando passo a passo a implementação destes itens....
[19] Comentário enviado por lucianomoraes69 em 13/03/2013 - 07:00h
Muito obrigado Gustavo.
Muito interessante e bom o seu post.
Ainda que você conhecia pouco de javaScript, na época em que escreveu, o seu post é muito importante.
Mas parece que tem gente que estava com inveja, falando em "erro grave", etc. Um estressado, é o cara que
escreveu desta maneira.