Select dinâmico com PHP, Javascript e MySQL

Aprenda a fazer um select que, quando seu valor é alterado, é automaticamente realizado uma ação sem necessidade de usar um botão post.

[ Hits: 199.598 ]

Por: Gustavo de Oliveira Corrêa em 24/05/2005


Implementando com MySQL



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);
?>

<select name="sele" onChange="getStates(this);">
<option value="">selecione seu estado</option> <?php
while ($row = mysql_fetch_row($result)){
$est = $row[1];
$id = $row[0];
?>
<option value=<?echo $id;?> <? if ($estado==$id){ echo "SELECTED";} ?> > <? echo $est; ?> </option> <?
}
?>
</select>

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.

Gustavo de Oliveira Corrêa

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Primeiro exemplo
   3. Implementando com MySQL
   4. Script exemplo.php
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Dicas simples para dar mais usabilidades aos formulários

Verificando a consistência de um formulário com JavaScript

Verificando a consistência de CPF e CNPJ em um formulário com JavaScript

Formulários HTML: Problemas com campos desabilitados?

Instalando plugin do Java no Firefox 0.8

  
Comentários
[1] Comentário enviado por ygorth em 25/05/2005 - 09:54h

Muito legal seu artigo. Já precisei disso antes e sempre tive problema.

[2] Comentário enviado por jllucca em 25/05/2005 - 13:41h

Tipo esse "truque" tem mais haver com javascript do que php. Mas, é realmente útil.

[3] Comentário enviado por kandrus em 26/05/2005 - 23:50h

Muito util esta dica e tava atras de algo assim

[4] Comentário enviado por Hernando em 27/05/2005 - 09:46h

Bom mesmo mais tenho um outro que faz um triple combo box dinamico que interage php + mysql + javascript... Mesmo assim valeu!!!

Abraços...

Ps.:Numa melhor posto o meu triple combo box!!! Onde seguindo a lógica pode se chegar a infinitos combos...

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

while ($row = mysql_fetch_row($result)){
$city = $row[1];
$id2 = $row[0];
echo "<option value=$id2> $city </option>";
}

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:

while ($row = mysql_fetch_row($result)){
$city = $row[1];
echo "<option value=$city> $city </option>";
}

Enfim, não é nenhum erro terrível nesse script.
Gustavo.

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

[12] Comentário enviado por comfaa em 28/10/2008 - 11:42h

muito bom !!

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

obrigado

[15] Comentário enviado por Gabriel_Silva em 29/01/2011 - 17:41h

muito bom

[16] Comentário enviado por albertguedes em 23/02/2011 - 01:45h

Cara, chorei ao ler seu artigo. Não sabe como eu estava atrás de uma solução simples dessa.

Saiba que isso me ajudou pacas. Valeu amigo ! Abraços.

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

E vocês usuários, o que pensam desta idéia?

[18] Comentário enviado por rrh em 02/08/2011 - 18:12h

Como ficaria para implementar mais um select? Exemplo: Estado > Cidade > Ruas

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


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts