Orientação a Objetos com PHP - Criar Classes e Inserir dados no banco de dados MYSQL

Galera encontrei uma tremenda dificuldade em encontrar um material bom e de fácil entendimento na internet sobre orientação a objetos no php, mostrando não só como criar um objeto e dar valores a ele, mas também como inserir e resgatar os dados no banco MYSQL. Então resolvi criar este tutorial para facilitar a sua vida :) ( e com as dicas de alguns amigos esta é a V2.0 do tutorial sobre object orientation in php Tabajara kkkkkkkk)

A ideia é criar um formulário onde possam ser incluidos produtos e um formulário para listar estes produtos por categoria.

Vamos criar dois arquivos o Produto.class.php que vai ser a nossa classe, onde vamos escrever nossas functions e tudo mais, e o arquivo objeto.php que vai ser onde vamos colocar o form e chamar a classe para executar as functions.

Mas primeiramente vamos criar nosso banco de dados, para criarmos precisamos executar uma query(um código na linguagem sql).

Você pode acessar o painel de controle do seu site e entrar diretamente no phpmyadmin, mas eu prefiro utilizar o MySQL GUI Tools que é um pacote com uma série de ferramentas da própria Mysql. Neste pacote tem o Mysql Query Browser que é onde podemos nos conectar ao banco de dados e executar a nossa Query.

Obs.: Se você estiver em alguma hospedagem que não deixa você criar uma tabela pelo código, você terá que entrar no seu painel de controle e criar la, e geralmente ela fica assim: login_tabela.

Vamos ao Código ( execute bloco a bloco de código para evitar erros)

Banco de dados

create database oo;
use oo;

Agora vamos criar 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;

No código acima estamos criando a tabela categorias, os campos cat_id e cat_nome e dizendo que cat_id é a chave primária e ela possui auto-incremento.

Agora vamos inserir dados nela: 

INSERT INTO categorias (cat_nome) VALUES
 ('Telefonia'),
 ('Livros'),
 ('Cds, Dvds e Games'),
 ('Esporte e Lazer'),
 ('Informática');

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;

A mesma coisa que a categoria, só que agora é produtos e possúi mais campos.

Agora vou postar os codigos em php e na propria página irei colocar comentarios explicando as linhas necessárias

Produto.class.php

<?php

class Produto{
    //declaracao de variaveis publicas e privadas
    public $conexao;
    public $banco;
    public $db;
    public $var;
    public $val;
    public $id;
    private $nome;
    private $valor;
    private $quantidade;
    public $cat_id;
    public $cat_nome;

    // Metodo construtor setamos aqui o que queremos que ele faça ao criar o objeto
    function __construct(){
        //criamos a nossa conexao com o banco de dados e selecionamos o banco
        $conexao = mysql_pconnect("localhost","root","123456") or die (mysql_error());
        $banco = mysql_select_db("oo");
    }
    /* 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;
    
    }
    function setProduto(){
        //realiza o insert no banco de dados passando os valores do objeto criado
        $insertProdutos = mysql_query("insert into produtos values(null,'$this->nome','$this->valor', '$this->quantidade','$this->categoria')");

        if($insertProdutos){
            $resposta="Inserido com sucesso";
        }else{
            $resposta ="Erro ao inserir";
        }
       
        return $resposta;
    }  
    function getProduto(){
        /* realiza o select no banco de dados e seleciona e guarda as informações na variavel $getProdutos,
        note que foi usava a chave estrangeira(utilizamos quando precisamos fazer alguma relacao com as tabelas) categoria que esta na tabela produto.
        */
        $getProdutos = mysql_query("select * from produtos, categorias where categoria = '$this->cat_id' and categoria = 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 = mysql_fetch_array($getProdutos)){
            $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(){
        $getSelect = mysql_query("select * from categorias");
        print "<label for='Categoria'>Categoria:<br>";
        print "<select name='Categoria'>";
        while($l = mysql_fetch_array($getSelect)){
            $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>";
    }
}


?>

objeto.php

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

 Então é isso ai galera, espero que funcione.

Gostaria de agraceder ao pessoal que me ajudou com as criticas e sugestões nos comentários e também no orkut

Valeu!

 

0
Your rating: Nenhum

Comentários

Cara, muito legal sua

Cara, muito legal sua iniciativa. Estava com a sua mesma dificuldade. Comentando... Ao invés de atribuir cada propriedade (nome, valor, etc) através de $produto1->Nome = $_POST[Nome]; pq não criar um metodo construtor e passar os dados do form como parâmetro e atribuir esses valores automaticamente na instanciação do objeto produto1. Isso teria algum problema?

Realmente está muito simples

Opa cara blz?

Realmente preciso dar um UP no tutorial, voudar uma melhorada nele nesta questão e também colocar o construtor e mostrar como pegaria os valores do banco também.

Valeu!

Observe que foi uma pergunta

Observe que foi uma pergunta viu? Nem sei se teria problema iniciar as variaveis no construtor.

Não ha problemas em iniciar

Não ha problemas em iniciar as variaveis no construtor, na verdade é até melhor... é como eu disse ainda vou melhorar este tutorial :D

 

mto legal msm

boa iniciativa cara... só alguns toques: seria mais interessante criar um objeto para conexao ao db e execução de query etc acho que vc eskeceu de dar um $_GET['acao']; para poder vaildar essa linha: acao=insert

Opa, Vou atualizar ele... ja

Opa,

Vou atualizar ele... ja até preparei  a construtora conectando ao banco e tudo mais...

realmente nao botei o $_GET['acao']; na verdade esqueci de botar a parte do if  tambem mas vou editar tudo agora

muito bom

muito bom mesmo bom tutorial pra quem ta começando a apreender classes valeu cara

Opa.. valeubrother...

Opa.. valeubrother... melhorei este tutorial mas tem um mais fácil ainda para bemm iniciante em OO

Isso erick show de bola e

Isso erick show de bola e muito importante distribuir conhecimento

Opa, aprendi muito com vc la

Opa, aprendi muito com vc la na GEJ valeu mesmo por tudo que tem feito. :D

Comentar

O conteúdo deste campo é privado não será exibido ao público.