PHP

Em por

No artigo de hoje aprenderemos como fazer um combobox em HTML totalmente dinâmico através do PHP e MySql, utilizando a antiga API MySql do PHP, e com o método mais utilizado hoje em dia o PDO.

Preencher um select/combobox não é uma tarefa difícil como talvez possa parecer, mas é claro que necessita de um conhecimento prévio da linguagem PHP e Banco de Dados para manipular os dados.

No arquivo conexao.php estabelecemos a conexão com a base de dados MySql, para preencher com dados da tabela o (select/combobox). O arquivo conexão é o responsável por fazer a conexão de sua aplicação com seu banco de dados.

OBS: Você pode criar seu Bando de Dados usando a interface de alguma ferramenta como o phpMyAdmin, que na qual mostro nesse artigo Como Criar Banco de Dados, ou você pode cria-lo diretamente com php, fica de sua preferência.

conexao.php

 mysql_connect('localhost','root','') or die(mysql_error()); mysql_select_db('banco_exemplo') or die(mysql_error()); 

Esse trecho de código é o responsável pela conexão, na qual ele recebe como parâmetro o servidor em que você está, o nome de usuário e a senha de usuário, e depois ele seleciona o banco de dados que você deseja trabalhar, muito simples. Existe outra maneira de se fazer a conexão usando o método PDO do PHP, na qual ficaria dessa maneira:

 public function conectar() { try { $this->pdo = new PDO("mysql:host=localhost;dbname='banco_exemplo'", "root",//usuario "",//senha array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } } 

Tendo ele a mesma função porém escrito de outra maneira.

Feito a conexão, vamos ao BD, caso você ainda não tenha criado seu BD, ou prefira cria-lo via script vou mostrar um exemplo de como se fazer via PHP.

 //estabelecemos conexão com o banco de dados mysql_connect('localhost','root','') or die(mysql_error()); //criamos o banco de dados através 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()); } } 

Pronto você criou seu BD via PHP e inseriu dados nele para fazermos o select no combobox.

No arquivo index.php, logo abaixo, foi criado o formulário com o select/combobox para receber os dados da sua tabela produto criada anteriormente.

Logo no início do script, incluímos o arquivo conexao.php de conexão com o MySql para podermos realizar as consultas.

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.

E através da função mysql_fetch_array() criamos um array com os dados da varável $query.

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 conexao.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>Selecione um produto</label> <select> <option>Selecione...</option> //abrimos um contador while para que enquanto houver registros ele continua no loopin <?php while($prod = mysql_fetch_array($query)) { ?> <option value="<?php echo $prod['id'] ?>"><?php echo $prod['descricao'] ?></option> <?php } ?> </select> </form> 

Pronto, feito isso já temos um select preenchido dinamicamente através da tabela produto criada anteriormente, você pode implementar da forma que quiser, mas o conceito é praticamente o mesmo, vou mostrar também como seria em PDO, é muito parecido mudando algumas coisas apenas na forma de programar, mas a lógica segue a mesma.

 <label >Produto:</label> <select name="produto" id="produto" > <?php require_once('class/Conexao.class.php'); $pdo = new Conexao(); $resultado = $pdo->select("SELECT * FROM categoria"); $pdo->desconectar(); if(count($resultado)){ foreach ($resultado as $res) { ?> <option value="<?php echo $res['id’];?>" ><?php echo $res[‘descricao'];?></option> <?php } } ?> </select> 

Bem semelhante não ?! Porém é usado o conceito de classe e métodos, e lembrando que a classe instanciada e o método utilizado não foram mostrados, pois o foco é o select e não sobre classes, para saber mais sobre classe com php acesse no artigo Criando Classe com PHP.

Dúvidas, críticas ou sugestões deixe seu comentário, e bom estudo !

Veja Também:

Artigos Relacionados a categoria: PHP

Olá, deixe seu comentário para Preenchendo um Select em HTML dinamicamente com Banco de Dados

Já temos 8 comentário(s). DEIXE O SEU :)
Yuri

Yuri

Perfeito cara, muito obrigado, só estou com dificuldade de fazer o selected quando volta o formulário pra nao perder o dado, mas estou pesquisando. vlw
★☆☆☆☆ DIA 31.03.15 15h03 RESPONDER
N/A
Enviando Comentário Fechar :/
gedmilson medeiros delgado filho

gedmilson medeiros delgado filho

tem como você explicar um pouquinho melhor sobre a função conexao e desconectar?
★☆☆☆☆ DIA 09.05.15 15h05 RESPONDER
N/A
Enviando Comentário Fechar :/
gedmilson medeiros delgado filho

gedmilson medeiros delgado filho

Estou precisando fazer isso com PDO mas essas duas funções que você fez a de conectar e a de desconectar é que eu não estou entendendo
★☆☆☆☆ DIA 09.05.15 15h05 RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Olá gedmilson, conexao é uma classe que ao ser instanciada, ela se conecta com o Banco de Dados, através do método _construct, desta forma:
//método construtor da classe
function __construct($pdo = null) {
$this->pdo = $pdo;
if ($this->pdo == null)
$this->conectar();
}

Quando você instanciar uma classe, ela só vai conectar novamente caso esteja desconectada. Porque numa página podemos ter várias chamadas para listar um conteúdo no site e desta forma, prevenimos várias chamadas.

Já o desconectar é um método, que sempre depois de fazermos conexão com o BD, devemos fechá-la. Regra básica, abriu tem que fechar.
★☆☆☆☆ DIA 20.05.15 21h05 RESPONDER
N/A
Enviando Comentário Fechar :/
Pablo

Pablo

Amigos gostaria do seguinte, eu já tenho uma conexão queria somente um scrip que puxa a tabela do banco e também o combobox buscando essa tabela... tentei mais não achei uma solução
★☆☆☆☆ DIA 28.07.15 16h07 RESPONDER
N/A
Enviando Comentário Fechar :/
rafael

rafael

amigo estou criando uma tabela para colocar tds os campos para combobox e listbox, essa tabela eu tenho as colunas:produtos,memoria,hd,gabinete etc... com isso o keyuser pode editar incluir e deletar itens da lista html, a minha duvida é a seguinte como faço o select só da coluna especifica e nao da tabela inteira?
★☆☆☆☆ DIA 09.03.16 10h03 RESPONDER
N/A
Enviando Comentário Fechar :/
Leonardo Martins

Leonardo Martins

Fala Rafael, obrigado pelo seu comentário, quanto a sua dúvida, você pode nessa tabela, adicionar mais uma coluna com o ID do usuário, assim quando for fazer o select você utiliza o WHERE id_tabela = id_user assim os dados que virão em seu select, será somente os do usuário. Acho que foi essa sua dúvida, qualquer coisa comente que tentarei te ajudar! abraço e bons estudos !
★☆☆☆☆ DIA 11.03.16 08h03 RESPONDER
N/A
Enviando Comentário Fechar :/
Octacilio Nazare

Octacilio Nazare

Sou Octacilio e fiz a copia q vc colocou no seu exemplo q parece muito bom mas, não funcionou ainda. Tou tentando a varios dias e não consigo fazer o pegar os dados da tabela. Segue um trecho do codigo:
< class="form-control">
Selecione


>





Agradeço qq ajuda. email:octanaza@gmail.com
★★★★☆ DIA 13.06.16 20h36 RESPONDER
N/A
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora