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

Cara, muito legal sua

Anônimo on 7 Janeiro, 2009 - 21:21
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

erickalves on 8 Janeiro, 2009 - 06:32

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

Anônimo on 8 Janeiro, 2009 - 17:38
Observe que foi uma pergunta viu? Nem sei se teria problema iniciar as variaveis no construtor.

Não ha problemas em iniciar

erickalves on 8 Janeiro, 2009 - 19:22

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

Anônimo on 8 Janeiro, 2009 - 19:19
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

erickalves on 9 Janeiro, 2009 - 13:56

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

Wilson miranda (não verificado) on 9 Janeiro, 2009 - 07:13

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

Opa.. valeubrother...

erickalves on 10 Janeiro, 2009 - 21:54

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

Isso erick show de bola e

Alexssandro (não verificado) on 9 Janeiro, 2009 - 20:58
Isso erick show de bola e muito importante distribuir conhecimento

Opa, aprendi muito com vc la

erickalves on 10 Janeiro, 2009 - 21:51

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