Você está na página 1de 8

Neste tutorial irei mostrar como criar uma aplicao de insero e leitura de dados utilizando PDO para conexo

ao banco de dados. Primeiramente precisamos criar o nosso banco dados: create database oo; use oo; Agora vamos a tabela categorias:

CREATE TABLE categorias ( 'cat_id' int(10) unsigned NOT NULL auto_increment, 'cat_nome' varchar(45) NOT NULL, PRIMARY KEY ('cat_id') ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
Vamos inserir algumas categorias:

INSERT INTO categorias (cat_nome) VALUES ('Telefonia'), ('Livros'), ('Cds, Dvds e Games'), ('Esporte e Lazer'), ('Informtica');
Vamos agora criar a tabela produtos:

CREATE TABLE produtos ( 'id' int(10) unsigned NOT NULL auto_increment, 'nome' varchar(60) NOT NULL, 'valor' double NOT NULL, 'quantidade' int(10) unsigned NOT NULL, 'categoria' varchar(45) NOT NULL, PRIMARY KEY ('id') ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8
Vamos a Classe Produto.class.php:

<?php class Produto{ //declaracao de variaveis publicas e privadas public $user; private $con; public $pass; public $var; public $val; private $nome; private $valor; private $quantidade; public $cat_id; public $cat_nome;

// Metodo construtor setamos aqui o que queremos que ele faa ao criar o objeto function __construct(){ //Estou incluindo a classe DAO, que far todas as transaes com o banco de dados. include_once('ProdutoDao.class.php'); } /* O metodo __set e responsavel por receber o nome da propriedade e o valor a ser atribuido, podendo atribuir ou nao*/ function __set($var, $val){ $this->$var = $val; } //Estamos gerando aqui os Gets e Sets para a sua devida utilizao no DAO public function setNome( $nome ){ $this->nome = $nome; } public function setValor( $valor){ $this->nome = $valor; } public function setQuantidade( $quantidade ){ $this->nome = $quantidade; } public function setCategoria( $categoria ){ $this->nome = $categoria; } public function getNome(){ return $this->nome; } public function getValor(){ return $this->valor; } public function getQuantidade(){ return $this->quantidade; } public function getCategoria(){

return $this->categoria; } function setProduto(){ $DAO = new ProdutoDao(); //realiza o insert no banco de dados passando os valores do objeto criado $insertProdutos = $DAO->inserir($this); if($insertProdutos){ $resposta="Inserido com sucesso"; }else{ $resposta ="Erro ao inserir"; } return $resposta; } function getProduto(){ $DAO = new ProdutoDao(); //Estou chamando a funco que criar no DAO que me retorna todos os produtos da categoria informada. $getProdutos = $DAO>ListarProdutosPorCategoria($this->cat_id); //este while serve para ir pegando os dados do select e enquanto existirem serem atribuidos a sua variavel e logo apos mostra-los na tela while($l = $getProdutos->fetch(PDO::FETCH_ASSOC)){ $this->nome = $l["nome"]; $this->valor = $l["valor"]; print '<br>Nome:'.$this->nome."<br>"; print 'Valor: R$ '.$this->valor."<br>"; } } /* funcao que criei para fazer um select na tabela categorias e retornar todas as catergorias cadastradas dentro de um combo box(select) */ function getSelect(){ $DAO = new ProdutoDao();

//Funco que criar no DAO que me retorna todos as categoria cadastradas. $getSelect = $DAO->ListaCategorias(); print "<label for='Categoria'>Categoria:<br>"; print "<select name='Categoria'>"; while($l = $getSelect->fetch(PDO::FETCH_ASSOC)){ $this->cat_id = $l["cat_id"]; $this->cat_nome = $l["cat_nome"]; /*veja que o value do option e o cat_id e o cat_nome e apenas o que aparece para o usuario. E este cat_id que ser salvo na tabela categorias no campo categoria, para podermos fazer a nossa associacao*/ print "<option value='{$this->cat_id}'>{$this>cat_nome}</option>"; } print "</select>"; print "</label>"; } } ?>
Classe ProdutoDao.class.php:

<?php class ProdutoDao { // ir receber uma conexo public $p = null; // construtor public function ProdutoDao(){ //retorna a conexo com o banco de dados Utilizando o PDO include_once('Conexao.class.php'); $this->p = new Conexao(); } // realiza o insert do produto public function inserir($produto){ try{ $stmt = $this->p->prepare("INSERT INTO produtos (nome, valor, quantidade,categoria) VALUES (?, ?, ?, ?)"); $stmt->bindValue(1, $produto->getNome() ); $stmt->bindValue(2, $produto->getValor() );

$stmt->bindValue(3, $produto->getQuantidade() ); $stmt->bindValue(4, $produto->getCategoria() ); $stmt->execute(); // fecho a conexo $this->p = null; // caso ocorra um erro, retorna o erro; }catch ( PDOException $ex ){ echo "Erro: ".$ex>getMessage(); } } //Lista todos os produtos da categoria escolhida public function ListarProdutosPorCategoria($cat_id){ try{ $stmt = $this->p->query("select * from produtos as p, categorias as c where p.categoria = '$cat_id' and p.categoria = cat_id "); $this->p = null; return $stmt; }catch ( PDOException $ex ){ echo "Erro: ".$ex>getMessage(); } } //Lista todos as categorias public function ListaCategorias($query=null){ try{ if( $query == null ){ $stmt = $this->p->query("SELECT * FROM categorias"); }else{ $stmt = $this->p->query($query); } $this->p = null; return $stmt; }catch ( PDOException $ex ){ echo "Erro: ".$ex>getMessage(); } } } ?>
Agora a Conexao.class.php:

<?php

//ela herdar os mtodos e atributos do PDO atravs da palavra-chave extends class Conexao extends PDO { //criando a conexo com o banco de dados no localhost(127.0.0.1) e falando o nome do banco, no nosso caso "oo" private $dsn = "mysql:host=127.0.0.1;dbname=oo"; private $user = "root"; private $password = ""; public $handle = null; function __construct() { try { //aqui ela retornar o PDO em si, veja que usamos parent::_construct() if ( $this->handle == null ) { $dbh = parent::__construct( $this->dsn , $this->user , $this>password ); $this->handle = $dbh; return $this->handle; } } catch ( PDOException $e ) { echo "Conexo falhou. Erro: " . $e->getMessage( ); return false; } } //aqui criamos um objeto de fechamento da conexo function __destruct( ) { $this->handle = NULL; } } ?>
E por fim o index.php, onde vamos criar nosso objeto e chamar as funces criadas utilizando os formulrios:

<?php include_once('Produto.class.php'); // pega a variavel GET que passamos no action do form if (isset($_GET['acao'])){

$acao = $_GET['acao']; // Verifica qual formulario foi submetido switch($acao) { //se for setProduto case "setProduto":{ //Criando e Instanciando o objeto $produto1 = new Produto; //Atribuindo valores ao objeto $produto1->nome = $_POST['Nome']; $produto1->valor = $_POST['Valor']; $produto1->quantidade = $_POST['Quantidade']; $produto1->categoria = $_POST['Categoria']; //chamando a funcao que faz o insert $produto1->setProduto(); } break; //se for setProduto case "getProduto": { $getProduto = new Produto; $getProduto->cat_id = $_POST['Categoria']; $getProduto->getProduto(); } break; } } ?> <html> <body> <p>Incluir Dados</p> <form action="<?php $SELF_PHP;?>?acao=setProduto" method="post" > <label for="Nome"> Nome: <br /> <input type="text" name="Nome"/></label> <br /> <label for="Valor">Valor: <br /> <input type="text" name="Valor" /></label> <br />

<label for="Quantidade">Quantidade: <br /> <input type="text" name="Quantidade" /></label> <br /> <?php $getSelect = new Produto; $getSelect->getSelect(); ?> <br /> <br /> <input type="submit" value="Enviar" /> </form> <p>Resgatar Dados</p> <form method="post" action="<?php $SELF_PHP;?>?acao=getProduto" > <?php $getSelect->getSelect(); ?> <input type="submit" value="Listar Produtos" /> </form> </body> </html>