Preenchendo um select com dados do MySQL

Preencher um select/combobox não é uma tarefa muito difícil como talvez possa parecer, mas é claro, necessita de um conhecimento prévio da linguagem PHP.

No arquivo conn.php estabelecemos a conexão com a base de dados MYSQL, para prencher com dados o select/combobox. O arquivo cria a conexão com o MYSQL, cria o banco de dados que será utilizado nos exemplos, cria a tabela e preenche com alguns dados.

Observe que você pode fazer tudo isso utilizando a interface do phpmyadmin. Apenas a conexão com o banco de dados é importante. você pode resumir seu arquivo a isso:

conn.php


#estabelecemos conexão com o banco de dados
mysql_connect('localhost','root','') or die(mysql_error());

#seleciona o banco de dados
mysql_select_db('banco_exemplo') or die(mysql_error());

Mas caso queira criar seu banco e tabela via script, apenas altere o hostname, usuário e senha de acesso ao MYSQL.

conn.php


#estabelecemos conexão com o banco de dados
mysql_connect('localhost','root','') or die(mysql_error());

#criamos o banco de dados atraves do script php
$create_base = mysql_query("CREATE DATABASE IF NOT EXISTS banco_exemplo;") or die(mysql_error());
#seleciona o banco de dados
mysql_select_db('banco_exemplo') or die(mysql_error());

if($create_base) {

 #criamos a tabela no banco de dados
 mysql_query("CREATE TABLE IF NOT EXISTS produto (
 id INT(11) AUTO_INCREMENT,
 descricao VARCHAR(100) NOT NULL,
 preco FLOAT NOT NULL,
 PRIMARY KEY(id)
 );") or die(mysql_error());

 #verifica se existe registros no banco
 $query = mysql_query("SELECT id, descricao, preco FROM produto");

 #se não existir registros então insere os valores abaixo
 if(empty($query)) {
 #insere alguns dados para os exemplos
 mysql_query("
 INSERT INTO produto(descricao, preco) VALUES
 ('Notebook', '2800'),
 ('Nobreak', '800'),
 ('Roteador Wireless', '180');
 ") or die(mysql_error());
 }
}


echo 'O Banco e a tabela já foram criados.';

No arquivo index.php, logo abaixo, foi criado o formulário com o select/combobox para receber os dados do MYSQL.

  1. Logo no início do script, incluímos o arquivo conn.php de conexão com o MYSQL.
  2. Na função mysql_query() passamos a string SQL de seleção de dados no banco e atribuímos o valor retornado para a variável $query.
  3. E através da função mysql_fetch_array() criamos um array com os dados da varável $query.
  4. Por fim, percorremos o array $prod apresentando cada registro dentro do select/combobox.

index.php

<?php
#chama o arquivo de configuração com o banco
require 'conn.php';

#seleciona os dados da tabela produto
$query = mysql_query("SELECT id, descricao, preco FROM produto");


# abaixo montamos um formulário em html
# e preenchemos o select com dados
?>
<form name="produto" method="post" action="">
<label for="">Selecione um produto</label>
<select>
<option>Selecione...</option>

<?php while($prod = mysql_fetch_array($query)) { ?>
<option value="<?php echo $prod['id'] ?>"><?php echo $prod['descricao'] ?></option>
<?php } ?>

</select>
</form>

Espero que tenham entendido o processo de preenchimento de um select/combobox.

Caso tenham alguma dúvida sobre isso ou aquilo, não hesitem em perguntar. Responderei diretamento ou criando um novo artigo abordando as novas dúvidas

Até a próxima!


Comentários

sergio | 20/02/2018 12:56:48

muito boa a explicação, tu tem alguma coisa explicando como fazer parcelas tio crediário

Josean Matias:

Olá Sergio, infelizmente artigo falando sobre parcelamento não teria no momento. Quem sabe em uma publicação futura incluirei esse tema.

Israel Telles | 25/12/2017 22:11:52

Olá, estou com um problema aqui.. Tenho um select onde alimento ele por sql..
Ex.:




Nele consigo buscar direitinho os dados do banco que criei especificamente para obter essas informações dinamicas, porem, nao estou conseguindo, é na hora de reabrir o foormulario para "Editar", fazer com que ele tenha todas as opções anteriormente citadas e que venha setado a opção escolhida e salva no banco..

já utilizei Value = echo $dados_banco_salvo e deixei o while, já inseri echo no inicio, fim e meio do while, e nada, ou ele aceita o echo SEM o while, OU ele ignora esse echo e acaba matando o while.. tens como me dar uma luz ?? Obrigado.

Josean Matias:

Olá Israel,

Esse tipo de situação é complexa de se orientar, pois cada código pode ser implementado de formas diferentes. Mas para salvar o formulário em um banco você deverá criar um registro completo do formulário com todos os campos. E para editar precisará abrir o formulário buscando e preenchendo com esse registro específico que foi salvo.

Seria somente comparar o valor do SELECT salvo com cada item do while ao preencher o SELECT novamente, se for igual a algum deles, marca o OPTION com o atributo selected="selected". Pelo que descreveu esse "$dados_banco_salvo" não tem realmente o valor do banco, senão ele exibiria valor em qualquer parte da página.

augusto cezar pinheiro | 10/12/2017 15:17:46

showww valeu mano

Nayane | 25/11/2017 18:48:03

Olá! Eu tô tentando fazer isso com PDO, mas não estou conseguindo. Uma luz?

Josean Matias:

olá Nayane, o uso do PDO vai mudar apenas as funções utilizadas para interagir com o banco de dados, mas a lógica proposta no artigo para preencher o select permanece a mesma. Seria somente consultar as funções em PDO equivalentes as utilizadas no artigo.

Rafael Guerra | 03/10/2017 13:52:50

Ola Josen!
Acabei chegando até seu site estou com uma dificuldade no option quando eu populo o selct trazendo outra opção assim que o usuario seleciona a primeira !

Meu problema seria o seguinte como o segundo é chamado pelo id do 1º como faço que no banco va o nome do id e não o numero do id?
 

Josean Matias:

Olá Rafael,

O que será enviado pelo formulário será o valor colocado no atributo VALUE do OPTION, neste caso seria somente adicionar no VALUE o valor desejado referente ao ID.

Eduardo | 02/10/2017 17:30:39

Boa tarde , Pessoal,
ainda não sei nada em html e nem PHP, ja tentei aprender uma ver com o php 4 e agora estou usando o php 7.1 o que percebo em varios forums é que o comando mysql_* mudou para mysqli_* entao agora estou prestando muito atenção para isso. o teste correu certo porem tive que corrigir alguns parâmetros.
muito obrigado.

RENATO | 12/09/2017 16:28:20

Ajudo bastante, bem prático.

Rodrigo | 27/07/2017 14:08:41

Boa tarde, estou fazendo da forma como vc fez, mas esta dando erro na hora de gravar a informação selecionada. Obrigado

Josean Matias:

Olá Rodrigo,

Podem ocorrer diversos problemas que impedem a gravação no banco de dados, se um erro é gerado é preciso que o erro seja analisado para encontrar a origem do problema. Mas na maioria dos casos não grava no banco devido a problemas estruturais da QUERY sql.

Naimar | 24/05/2017 16:06:35

Meu querido,
No caso de uma form de EDIÇÃO DE CADASTRO (Produto, cliente...) além de eu popular o select com dados do mysql (Lista Geral) eu precisaria deixar setada (selecionada) a opção que foi gravada durante o cadastramento daquele item , para que o usuário visualize e conforme a necessidade,possa mudar para outro item da lista. Uma troca de categoria, uma troca de função etc...

Consegue me dar uma dica ???

Abraços...
 

Josean Matias:

Olá Naimar,

Precisaria comparar o que foi gravado no banco de dados se é igual a algum dos itens da lista, se for, só marcar o OPTION com o atributo SELECTED.

Danielle | 05/04/2017 13:50:44

Tenho duas tabelas, tb_cliente e tb_profissao. No registro de clientes preciso selecionar no combo a profissão do cliente, que está na tabela tb_profissao. Alguém me ajude, por favor.

Josean Matias:

Seguindo as instruções do post seria possível exibir as profissões no combo, apenas ajustando para as informações das suas tabelas. Depois seria somente salvar um ID da profissao dentro da tabela do cliente.

Henrique Rolim | 01/02/2017 23:56:34

Obrigado pela ajuda!

Porém agora quero enviar o dado que eu selecionei para outro banco via POST, como faço?

Meu Combobox ficou assim:


E o arquivo que recebe para dar o INSERT está assim:

$sigla = $_POST['sigla'];
$nome = $_POST['nome'];


$query = "INSERT INTO tb_cidade (nome, id_estado, criado) VALUES (
'{$nome}',
'{$sigla}',
NOW())";

Josean Matias:

Aparentemente o código está correto. Só teria que verificar se realmente os dados estão chegando no arquivo de inserção e se a conexão com banco de dados está funcionando.

Wellington | 01/12/2016 18:39:27

Olá, tenho a seguinte dúvida:
Fiz um Dropdown e este está com informações vindas de uma tabela de um banco de dados.
Por exemplo, na minha página web, quero que o usuário escolha uma das opções exibidas no Dropdown (opções vinda do banco) e ao finalizar quero que esta informação da seleção do Dropdown seja enviada à uma outra tabela do banco de dados, ou seja, a o id (primary key) e o outro campo da tabela.
Como eu faço isso? Já fiz a exibição no Dropdown vindo do banco, agora quero enviar esta informação para outra tabela.

Obrigado.

Josean Matias:

Olá Wellington,

Depende de como o dropdown foi criado e também da necessidade de segurança na página. Se o dropdown for um SELECT, poderá pegar o valor via javascript e enviar para outro página por GET ou simplemente acionar o submit via javascript quando ocorrer o evento "onchange" no SELECT.

Cbc | 10/11/2016 19:56:51

Ola, aqui deu tudo certo, mas gostaria de saber o que deveria fazer para enviar os dados que foram preenchidos o select para outro banco? já tentei varias formas e nenhuma foi, só preciso que os dados que puxei do banco que está sendo mostrado no select seja enviado para outro banco.

Josean Matias:

Olá, você precisará criar um script em arquivo separado que receberá os dados do POST para inserir no banco de dados. No formulário onde tem o select colocar o endereço desse arquivo no ACTION.

OBS: Será necessário um conhecimento razoável em PHP e MYSQL para criar o script.

Fernando Oliveira | 23/08/2016 13:27:01

Olá,
Parabéns pelo conteúdo.
Gostaria de tirar uma dúvida, pois, sou iniciante em no desenvolvimento.
Como eu faria esse exemplo acima em arquivos separados? Html num arquivo e PHP em outro arquivo?
Muito Obrigado.

Josean Matias:

Olá Fernando, da forma que deseja só seria possível com uso de AJAX para ligar o HTML ao PHP.

Ricardo Oliveira dias | 21/03/2016 10:44:12

Então..estou usando mysql_fetch_OBJECT
ESTOU preenchendo o combo select com os dados, trazendo dentro do combo o nome dos setores , E NA CONSULTA chamo tbm o id do setor...como vc faz acima...fetch array podem depois preciso recuperar o id do setor numa variavel e passar por $_Post para o action do form pra na outra página fazer o inserir
Só q não consigo recuperar o id do select. .sendo a o mesmo está preenchido do banco

Josean Matias:

Olá Ricardo, se entendi corretamente o problema seria recuperar o valor em outra página. Pelo que descreveu, talvez o formulário não esteja com METHOD como "post" ou o endereço em ACTION não é o mesmo do arquivo que deseja recuperar os valores.

yuri | 04/03/2016 13:42:50

Olá!
Como seria o caso, usando drop-down?

Tks!

Josean Matias:

Olá Yuri, o preenchimento de um drop-down é o mesmo procedimento de um select, mudando apenas o HTML.

Reiner | 17/11/2015 00:11:44

Boa noite amigo...Como ficaria o atualizar com o selected?

Josean Matias:

Olá Reiner, para utilizar o "selected", você precisa pegar o ID que foi passado via GET ou POST e comparar com os IDs do while. No "option", onde os IDs forem iguais adiciona o selected.

Ex: $_GET['id'] == $prod['id']

Wanessa | 22/09/2015 14:48:05

Olá, Josean! Seu artigo me ajudou muito. Sou novíssima nesse mercado e estou começando a programar em php... Então é o seguinte, tô com um probleminha... Tenho um formulário em abas (jquery)e na hora que minha index tem que ser .php, por causa da combo, o conteúdo das abas (que estão em divs)simplesmente desaparece. Sabe me dizer o que pode estar errado? Muito obrigada pela ajuda!

Josean Matias:

Olá Wanessa,

Talvez seja apenas conflito no código javascript que está sendo utilizado. Neste caso poderá utilizar um debugador de javascript para verificar o erro.

Adalberto Lima | 22/09/2015 08:59:55

Bom dia Josean era exatamente isto que eu estava procurando, no meu caso eu precisaria quando selecionar o produto preenchesse também mais dois campos no formulario que é o modelo e tipo, poderia dar uma força quanto a isso? desde já agradeço muito. Abraços e boa semana

Josean Matias:

Olá Adalberto,

Provavelmente após selecionar o produto será necessário utilizar AJAX para preencher os demais campos. É possível encontrar vários exemplos na web com essa operação.

Daniel Souza | 21/09/2015 14:50:44

Olá!

tudo bem por ai? Cara sou novato no php e estou fazendo um cadastro parecido com o que você mostrou ai. Gostaria de saber se tem como eu salvar no banco de dados o id e o nome ao mesmo tempo?

Claudio | 11/09/2015 13:42:03

Ola fiz exatamente como vc fez mas, nw esta puxando os registros da database?

Josean Matias:

Olá Claudio, seria necessário conferir se o banco de dados foi realmente criado ou se o dados de acesso ao mysql estão realmente corretos.

Geoge | 31/08/2015 13:03:53

ops resolvi cara, no painel eu tinha colocado um id de teste que carregava um registro qualquer,
mas no processador ajax ele pegava outro id definido por session kkk q mancada !!
quando eu clicava o processador alterava um outro id e eu pensava que tava alterando corretamente, desculpa ! :)

Josean Matias:

Olá Geoge,

Legal! Com certeza os erros de lógica nos ajudam mais que os erros de sintaxe, pois apuram nossa atenção na análise de código.

Geoge | 31/08/2015 12:55:31
Parabéns pela atitude ^^ eu to com um probleminha chato aqui cara, é que meu select de estados é ajax sabe, vc clica e ele muda o valor no banco de dados, ta funcionando, ae eu atualizo a página só pra ver e o valor antigo aparece como se não tivesse sido mudado!! mesmo que ele ja foi mudado no banco. o que vc sugere?
Leandro Carvalho | 15/05/2015 16:36:12

Ótimo Post ... estou com uma dificuldade e gostaria muito de sua ajuda ... estou fazendo um cadastro de usuário ... e estou realizando os inputs através de um select ... porém gostaria de realizar uma seguinte ação ... no primeiro campo por exemplo, pra selecionar o Estado (SP, RJ, ETC) e no campo abaixo, conforme a seleção do campo acima (Estado), abrir os municípios somente daquele estado ... poderia me ajudar com esta dúvida??

Josean Matias:

Olá Leandro,

Acredito que este outro post poderá ajudá-lo:

http://www.joseanmatias.com.br/preenchendo-um-select-com-dados-de-outro-select

R2 Tecnologia | 27/04/2015 10:37:17

Parabéns, Simples e eficaz...

Felipe | 04/04/2015 14:23:00
Olá, estou com um probleminha, tenho 3 é preenchido, ele não preenche os outros.
Detalhe, os dados que puxo são os mesmos nos 3
e por baixo tenho as respectivas cidades
Cidade
Estes dados vem da base de dado e este passo ja esta a funcionar.
So que o que eu quero é implementar um preço no meu projecto, por exemplo uma funçao que saiba qual o estado selecionado e a respectiva cidade e o seu preço.
Tenhamos em conta que um estado tem muitas cidades.
Esa é a ideia, mas o projecto não é sobre cidades ma sim vistos de cada pais e os seus vistos disponiveis para aquele pais.
Grato e aguardo a a resposta

Andre Nogueira | 14/07/2014 16:27:27
Parabens, estou procurando algo simples assim a muito tempo. e voce foi o unico q deixou isso bem claro
Vlw
Eduardo Ribeiro | 04/07/2014 14:49:09
Boa tarde;

Gostaria de partilhar uma duvida, criei um backoffice para um site que desenvolvi, e na secção de inserir os produtos, criei um sistema de upload de ficheiros .CSV para o mysql, ate aqui esta tudo a funcionar, contudo apos inserir os produtos, falta preencher 2 campos, a familia e a categoria, ou seja passo a exemplificar;

Lista de produtos(704) sem familia e sem categoria (fazem parte de 2 tabelas distintas) como faço para adicionar a cada registo a familia e a categoria atraves de combobox? podem me ajudar? ou atraves de outra maneira que neste momento nao estou a ver como!

Obrigado, fico aguardar!

Eduardo Ribeiro
Josean Matias:

Olá Eduardo, neste caso você terá que criar um formulário com no mínimo três campos: primeiro campo oculto contendo o ID do produto e dois comboboxs para familia e categoria. Com isso você poderá fazer um UPDATE na tabela de produtos utilizando o ID como referência.

Afane Eduardo Momade | 02/07/2014 04:07:36
Muito obrigado, isso ajudou-me
Mário Sérgio Parga | 29/06/2014 18:01:44
Funcionou perfeito. Agora da um erro quando pego os valores selecionados e tento enviar para o banco. O que pode ser?
Josean Matias:

Olá Mário, dependendo de como esse script foi implementado podem surgir erros, neste caso para identificar a causa só mesmo conhecendo qual o erro apresentado.

Xavier | 27/06/2014 17:19:42
Muito bom companheiro.
Simples e funcional.
"Matô a pau!!!" Parabéns, me ajudou muito.
Rogerio Soares | 08/05/2014 14:07:37
Valeu, era justamente isso que eu estava procurando. Parabéns pela sua iniciativa de ajudar aos outros e fazer um mundo melhor.
Vlw
Rodrigo | 21/11/2013 21:57:58
Muito Obrigado Amigo o Google tem tantas respostas hoje em dia que fica difícil encontrar soluções para problemas simples.
Valew
Flávio Barbosa | 19/11/2013 16:18:33
Muito bom, tava procurando algo neste estilo ajudou muito
Jordelson | 17/10/2013 16:26:08
Muito bom mesmo... Me ajudou bastante, já estava procurando por essa função há algum tempo.

Muito Obrigado.
ismael cortez | 28/09/2013 13:24:50
amigo...."funcionou"....quer dizer...o filtro esta ok...porem as categorias nao podem ser lidas....estou com 3 opçoes...que filtram....porem aparecem em branco
Josean Matias:

Olá Ismael, esse erro pode ocorrer caso os dados não estejam vindos corretamente do banco de dados. Dê uma olhada na sua consulta, talvez seja isso. Abraços!

Carlos | 15/08/2013 14:46:10
Bom
Robsom | 03/05/2013 10:08:56
Parabéns! Ficou bem explicado e atendeu minha necessidade.
GILSONEY | 21/04/2013 13:02:28
O nome da minha tabela é produtos tem os campos:id, codproduto, descricao, valor, data de cadastro e marca. Como ficaria o código. Já substituir de varias formas e não deu
Bruno | 06/02/2013 21:41:23
É surpreendente como técnicos como você compartilha conhecimento sem querer receber algo em troca. Essa é sem dúvida uma das formas mais nobre de mostrar que o conhecimento não é apenas uma moeda.
Parabéns! Sua informação me ajudou muito!
ROQ | 12/11/2012 15:00:34
Cara muito bom, bom mesmo hihi em vc poderia me ajudar car queria um exemplo com um formulario que pega ainformação no banco de dados e gera um relatorio em pdf apartir das informações que o usuario informou/selecionou no formulario de pesquisa...é no sentido do seu so que to quebrando a cabeço com esse detalhe aguardo uma resposta
Adriana Toledo | 23/10/2012 15:24:23
Boa tarde.
Sou designer e procurando um programador para fazer um ajuste no banco mysql de um cliente. Vocês fazem esse tipo de trabalho ou podem indicar alguem q faça...?
Obrigada.
leo alves | 06/01/2012 13:29:31
eh uma coisa simples, mas depois de horas criando linhas e mais linhas de código esse seu post salvou minha mente.
obrigado!
Stan | 16/11/2010 21:19:34
Parabéns pelo artigo, mas gostaria de saber caso eu queira passar o resultado da combobox para outro formulario como eu poderia fazer. Obrigado.
Josean Matias: Se o método de envio for POST, você poderá pegar com $_POST['nome_do_campo_de_origem'] e colocar como valor do campo de destino no outro formulário. Ex: value="".$_POST['nome_do_campo_de_origem']."" Se os dois formulários estiverem na mesma página, então só deixar o action do form vazio para enviar os valores para mesma página.
Alexandre | 12/11/2010 11:47:11
Muito bom teu script, me ajudou muito, mas eu tenho outra duvida: usando seu script, com eu faria para devolver a 3 input os dados do item selecionado no combo? Se puder ajudar agradeco muito.
Josean Matias: Alexandre, isso normalmente é feito com jquery ou utilizando a variável $_POST do PHP. O artigo Pegando o valor do input talvez esclareça sua dúvida, veja também Preenchendo um select com dados de outro select. Se não esclarecer, comenta aqui ou me manda um email que farei um artigo sobre isso.
junior | 24/08/2010 03:16:37
Concerteza ajudou muito meu velho , valeu pelo tuto ^^

Comentar