• Home
  • Posts RSS
Blue Orange Green Pink Purple

PHP ARTE

PHP ARTE seu curso de PHP online completamente gratuito passo a passo. Semanalmente estaremos colocando aulas para vocês seguindo o conteúdo programático para que você não se perca. Nossa intenção não é corrigir seu script ou criar um script para você, mas sim fazer com que você aprenda a criar e corrigir seus próprios scripts.

Aula 19 - Classe Mysql Simples

Primeiramente desculpe pela demora, mas o bicho tá pegando, quase recebemos nossa segunda doação de R$10,00 mas infelizmente foi cancelada rssss. Então continuamos com apenas 1 doação em praticamente 1 ano de BLOG rsss, mas enfim fazer o que né.

Bem galera não está dando para seguir o planejamento das aulas devido ao tempo que está curto, estou tento que pegar vários freelas baratinhos para pagar as contas, e isso acaba que toma o tempo todo.

Hoje vou postar para vocês um exemplo de como podemos abstrair tarefas simples e rotineiras como o update, delete, insert e select em um banco de dados.

Para os críticos, obsecados por designer patterns, segurança e tudo mais, antes de me fazer perder meu tempo lendo seu comentário leia com bastante atenção a linha abaixo:

"Estas classes tem como propósito apenas o estudo de como utilizar orientação a objetos para abstrair tarefas rotineiras, estas classes não são a solução do universo e o mundo inteiro vai utilizar, é apenas para as pessoas que acompanham o blog começarem a se interagir com o que aprenderam + prática"

Bem dito isto, vamos lá nossa idéia então é fazer uma classe para conectar no banco e outra para minimizar a tarefa de atualizar, deletar, inserir e selecionar, minha conexão não permite gravar vídeo então vou postar os códigos coloquei o máximo de comentários possível rsss por isso parece grande, mas creio que todos vão conseguir entender, senão é só mandar um comentário.

Como ficou tudo embolado então estou disponibilizando os arquivos para download, se tiver link quebrado ou coisas do tipo manda um comentário:

DOWNLOAD 1 - Classe Mysql
DOWNLOAD 2 - Classe Mysql

Criando nossa classe de conexão
conexao.class.php


<?php

class Conexao
{
    /**
     * Constante responsável por armazenar o servidor do banco
     *
     */
    const DB_HOST='localhost';
   
    /**
     * Constante responsável por armazenar o nome do banco
     *
     */
   
    const DB_NOME='emig';
   
    /**
     * Constante responsável por armazenar o nome do usuário do banco
     *
     */
   
    const DB_USER='root';
   
    /**
     * Constante responsável por armazenar a senha do banco
     *
     */
    const DB_PASS='';
   
    /**
     * Método construtor, executado "automaticamente" quando iniciada classe
     */
    function __construct()
    {
       
    }
   
    /**
     * Método responsável por conectar no banco
     */
    public function Conecta()
    {
       
        //lembrando que self referencia a própria classe no nosso caso
        //estamos chamando uma constante que está definida nesta classe
        //então conectar ao banco
        $con = mysql_connect(self::DB_HOST,self::DB_USER,self::DB_PASS) or die ('Erro ao conectar: ' .mysql_error());
       
        //Agora vamos selecionar o banco de dados
        $db = mysql_select_db(self::DB_NOME) or die ('Erro ao selecionar o banco: ' .mysql_error());
       
    }
  
}
?>

Bem acho que não tem praticamente nada para eu explicar ai não né? rsss

Agora vamos criar a classe que vai fazer aquela tarefa de atualizar, remover, inserir e selecionar

manipulasql.class.php

<?php
class ManipulaSql extends Conexao
{
    /**
     * Propriedade responsável por retornar os resultados das querys
     *
     */
    public $content;
  
    /**
     * Método responsável por executar um SELECT no banco de dados
     *
     * Utilização:
     *
     * $sql = "SELECT Codigo, Nome, Descricao FROM produtos";
     * $s = new ManipulaSql();
     * $s->Seleciona($sql);
     * if(!empty($s->content))
     * {
     *     foreach ($s->content as $v)
     *     {
     *         echo 'Código: ' .$v[0]. '
';
     *         echo 'Nome: ' .$v[1]. '
';
     *         echo 'Descrição: ' .$v[2]. '
';
     *         echo '
';
     *     }
     * } else {
     *         echo 'Não foram encontrados registros em sua pesquisa.';
     * }
     *
     * @param string $qry
     * @return array
     */
    public function Seleciona($qry)
    {
        //como extendemos a classe Conexao, então podemos utilizar
        //os metodos herdados pela mesma (não vou entrar em detalhes sobre visibilidade)
        //conecta no banco de dados
        $con = Conexao::Conecta();
      
        //executa a query
        $exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
        //faço um loop nos resultados e vou armazendo em nossa variável $content
        //que é responsável por nos retornar os dados da consulta
        while($row = mysql_fetch_array($exec)) {
               $this->content[] = $row;
           }

        //retorno os dados
        return $this->content;
  
    }
  
    /**
     * Método responsável executar um INSERT no banco
     *
     * Utilização:
     *
     * $sql = "INSERT INTO tabela(campo1) VALUES ('algo1')";
     * $i = new ManipulaSql();
     * $i->Insere($sql);
     * if(!empty($i->content))
     * {
     *         echo 'O registro ' .$i->content. ' foi adicionado a base de dados.';
     * } else {
     *         echo 'Nenhum registro foi adicionado.';
     * }
     *
     * @param string $qry
     * @return int
     */
    public function Insere($qry)
    {
      
        //conecta no banco de dados
        $con = Conexao::Conecta();
      
        //executa a query
        $exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
        //reonsável por armazenar o ID gerado
        //em nossa variável de retorno $this->content
        $this->content = mysql_insert_id();

        //retorna o id do cadastro
        return $this->content;
  
    }
  
    /**
     * Método responsável executar um UPDATE no banco
     *
     * Utilização:
     *
     * $sql = "UPDATE tabela SET campo1='algo1' WHERE campo='algo'";
     * $a = new ManipulaSql();
     * $a->Atualiza($sql);
     * if(!empty($a->content))
     * {
     *         echo 'Foi(ram) atualizado(s) ' .$a->content. ' registro(s)';
     * } else {
     *         echo 'Nenhum registro foi atualizado.';
     * }
     *
     * @param string $qry
     * @return int
     */
    public function Atualiza($qry)
    {
      
        //conecta no banco de dados
        $con = Conexao::Conecta();
      
        //executa a query
        $exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
        //reonsável por armazenar o número de linhas alteradas
        //em nossa variável de retorno $this->content
        $this->content = mysql_affected_rows();

        //retorna o id do cadastro
        return $this->content;
  
    }
  
    /**
     * Método responsável executar um DELETE no banco
     *
     * Utilização:
     *
     * $sql = "DELETE FROM nome_tabela WHERE campo='algo'";
     * $r = new ManipulaSql();
     * $r->Remove($sql);
     * if(!empty($r->content))
     * {
     *         echo 'Foi(ram) removido(s) ' .$r->content. ' registro(s).';
     * } else {
     *         echo 'Nenhum registro foi removido.';
     * }
     *
     * @param string $qry
     * @return int
     */
    public function Remove($qry)
    {
      
        //conecta no banco de dados
        $con = Conexao::Conecta();
      
        //executa a query
        $exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
        //reonsável por armazenar o número de linhas alteradas
        //em nossa variável de retorno $this->content
        $this->content = mysql_affected_rows();

        //retorna o id do cadastro
        return $this->content;
  
    }
  
  
}
?>

E por fim vamos mostrar como utilizar apesar que já coloquei como utilizar na propria classe, mas vou mostrar de qualquer forma para ficar bem claro!

index.php
<?php
//Primeiramente eu incluo as nossas duas classes
require_once('conexao.class.php');
require_once('manipulasql.class.php');



#Fazendo um select

//Monto minha query de consulta
$sql = "SELECT Codigo, Nome, Descricao FROM produtos";
//Instancio a classe de manipulação
$s = new ManipulaSql();
//executo o método reponsável por selecionar os dados passando como parametro
//a nossa query
$s->Seleciona($sql);
//nosso método retorna o objeto content que contém os dados da consulta
//então vamos verificar se nossa consulta retornou alguma informação
if(!empty($s->content))
{
    //caso sim, então vamos listar estes dados encontrados
    foreach ($s->content as $v)
    {
        //se você está se perguntando o que são este 0,1,2 é simples, observe nossa
        //query: SELECT Codigo, Nome, Descricao FROM produtos, olhou viu alguma
        //relação com o 0,1 e 2? Pois bem, este índices da array, nos retornam
        //exatamente na ordem que especificamos na query, como as array se iniciam
        //do 0(zero), logo $v[0] é o Codigo, e assim por diante. Moleza?
        echo 'Código: ' .$v[0]. '
';
        echo 'Nome: ' .$v[1]. '
';
        echo 'Descrição: ' .$v[2]. '
';
        echo '
';
    }
  
//Caso a nossa consulta não tenha retornado nenhum resultado, então exibe o erro
} else {
    echo 'Não foram encontrados registros em sua pesquisa.';
}

#fazendo um insert

//Monto minha query de inserir
$sql = "INSERT INTO tabela(campo1) VALUES ('algo1')";
//Instancio a classe de manipulação
$i = new ManipulaSql();
//executo o método reponsável por inserir os dados passando como parametro
//a nossa query de inserir
$i->Insere($sql);
//nosso método retorna o objeto content que contém informações sobre a ação efetuada
//no caso o INSERT
//então vamos verificar se nossa consulta retornou alguma informação
if(!empty($i->content))
{
    echo 'O registro ' .$i->content. ' foi adicionado a base de dados.';
  
//Caso a nosso insert não tenha sido efetuado, então exibe o erro
} else {
    echo 'Nenhum registro foi adicionado.';
}

#fazendo um update

//Monto minha query de Atualizar
$sql = "UPDATE tabela SET Campo='Algo' WHERE Campo='algumacosa'";
//Instancio a classe de manipulação
$a = new ManipulaSql();
//executo o método reponsável por atualizar os dados passando como parametro
//a nossa query de update
$a->Atualiza($sql);
//nosso método retorna o objeto content que contém informações sobre a
//ação efetuada no caso o UPDATE
//então vamos verificar se nosso update retornou alguma informação
if(!empty($a->content))
{
    echo 'Foi(ram) atualizado(s) ' .$a->content. ' registro(s)';
  
//Caso a nosso UPDATE não tenha sido efetuado, então exibe o erro
} else {
    echo 'Nenhum registro foi atualizado.';
}


#fazendo um delete

//Monto minha query de Remover
$sql = "DELETE FROM nome_tabela WHERE campo='algo'";
//Instancio a classe de manipulação
$r = new ManipulaSql();
//executo o método reponsável por atualizar os dados passando como parametro
//a nossa query de DELETE
$r->Remove($sql);
//nosso método retorna o objeto content que contém informações sobre a
//ação efetuada no caso o DELETE
//então vamos verificar se nosso delete retornou alguma informação
if(!empty($r->content))
{
    echo 'Foi(ram) removido(s) ' .$r->content. ' registro(s).';

//Caso a nosso DELETE não tenha sido efetuado, então exibe o erro
} else {
    echo 'Nenhum registro foi removido.';
}
?>






Se possível deixe um cafezinho para a gente!

+Ler mais 4 comentários | Postado por Marco | edit post

4 comentários

  1. Tutorial City on 7 de setembro de 2010 às 20:46

    É difícil encontrar tutoriais em português nesse nível, então vou aproveitar pra parabenizar e incentivar que continue postando!

    Quanto ao tutorial...
    Acho que o tutorial cumpriu bem a missão de mostrar como criar uma simples classe e facilitar a vida na interação com o banco de dados.
    De cara eu só faria uma mudança simples, baseado em uma das principais ideias de OOP, que é evitar duplicação de código (DRY). Repare como os métodos 'remove', 'atualiza', 'insere', e 'seleciona' sempre executam o mesmo código 'mysql_query(...) or die(...)', se num futuro próximo você quiser lançar exceções ao invés de usar a função 'die' por exemplo, logo de cara teria que mudar o código em 4 locais diferentes. Pra corrigir isso eu ciraria um método protegido (talvez público) somente pra executar essa parte do código, assim ficaria muito mais simples pra editar depois.
    Outras mudanças que eu faria seria mudar de 'conexao::conecta()' pra 'parent::conecta()' e tornaria a classe 'conecta' abstrata, mas isso foge um pouco do escopo desse tutorial.

    Abraços

     
  2. Marco on 8 de setembro de 2010 às 10:37

    Olá City, primeiramente gostaria de parabenizar a você pelo comentário produtivo, por ter pegado a idéia que não é criar algo que vá salvar o mundo mas sim ir pegando a lógica da coisa e claro ter dado dicas para quem estiver estudando aproveitar e ir aprimorando e cada vez mais ir pegando o jeito.

    Bem espero que todos que tiverem sugestões legais irem mandando assim todos poderão compartilhar e aprender cada dia mais assim nós construiremos um Blog bacana, pois como sabem não sou mestre programador, sou apenas um cara que curte programar e trabalho com isso e aprendi alguma coisa perguntando muitoooo hehehe

    Abraços até o próximo post quem sabe eu pego as dicas e implemento na classe e vamos criando um sisteminha baseado no que aprendemos.

     
  3. Vinicios Morás on 13 de setembro de 2010 às 14:49

    É meio chato pedir, mas estou começando a estudar informática agora, e quero apresentar uma surpresa para o professor por isso não busquei ele, mas tem um código que o endereço é dado lá e tem o segmento que é por:

    /RDP/RDP_ mais uma data.html

    Não consigo entender como é o formato desta data, será que pode me ajudar?

    O Código a seguir:
    -----------------------------
    function selecionaData(dia,mes,ano){

    varDia = String('00' + dia)
    varDia = varDia.substring(varDia.length -2,varDia.length)

    varMes = String('00' + mes)
    varMes = varMes.substring(varMes.length -2, varMes.length)

    varAno = String(ano)
    varAno = varAno.substring(varAno.length -2, varAno.length)


    //alert('Dia = ' + varDia + ' mes = ' + varMes + ' ano = ' + varAno)


    location.href = 'RDP/RDP_' + varDia + varMes + varAno + '.html'
    -------------------------------

    Desculpe atrapalhar, e não posso pagar por isso, o máximo divulgar em orkut e twitter e para pessoas em geral.
    Abraço e obrigado desde já.

    vinymoras@gmail.com - para contato

     
  4. Marco on 13 de setembro de 2010 às 19:20

    lembrando que nosso blog é focado para o PHP não para o JS, mas de qualquer forma
    vou tentar esclarecer a dúvida dentro do meu conhecimento.

    Sua dúvida é referente ao entendimento do script


    Se for é só analisar
    function selecionaData(dia,mes,ano)
    ou seja uma função que recebe 3 parametros dia mes e ano, provavelmente no formato
    13,11,2010

    ai blz..

    primeiro ele atribui o valor a variável varDia sendo ele do tipo string '00' + dia ou seja
    logo varDia terá o valor 0013

    Logo depois ele utiliza a função substring(x,y)
    x = número de caracteres que serão exibidos
    y = sera iniciado a partir do próximo caracter estipulado no X até o limite de Y
    e o .length pega o tamanho da string

    lembrando que ele converteu para String porque o .lenght só funciona com string.

    Então imagine

    varDia.substring(varDia.length -2,varDia.length)
    //visualizando ficaria assim
    substring(4 - 2, 4)
    //fazendo os calculos
    substring(2, 4)
    //retorno final baseado na variavel varDia
    substring(2,4)
    //então exibe 2 caracteres até o limite de 4 caracateres
    //sendo que vai começar a partir do segundo logo fica 13

    e assim se repete pelas outras variáveis
    por fim tem

    location.href = 'RDP/RDP_' + varDia + varMes + varAno + '.html'

    que na verdade ele monta o nome do arquivo, que visualizando fica

    'RDP/RDP_131110.html'

    e o location.href tem a função de redicionarar para está página

    Espero que dê para entender, acho que minha didática para JS não é muito boa
    HAUAEHueHueHUEA fuiz

    E para falar a verdade nem sei se falei bobagem aehueahuea mas é por ai!

     


Postar um comentário

Postagem mais recente Postagem mais antiga Página inicial

PHP ARTE

  • Sobre nós

      Follow-me @fmacedos Fernando:
      Trabalho com desenvolvimento web e irei passar um pouco sobre PHP, tanto para quem está iniciando ou para quem já conhece a linguagem que deseja se manter atualizado, conhecer as novas tendências desta tecnologia que vem crescendo e sendo cada vez mais utilizada no mundo WEB.
      .

      Marco:
      Sou de Lavras Novas, trabalho com desenvolvimento freelancer e auxiliar de serviços gerais em um pousada e vou tentar passar um pouco do que sei para vocês sobre PHP de uma forma que fique fácil de aprender !
      Não sou um especialista, nem formado com pós graduação e milhões de certificado, sou apenas um usuário que aprendeu a programar na raça e estou tentando passar um pouco disto que aprendi para frente!


  • Contato

      E-mail: phparte@gmail.com
  • Busca


  • Forum Código Fonte
    Forum Código Fonte




  • Tags

    • apache (1)
    • apresentação (1)
    • atributos (1)
    • aula (8)
    • basico (11)
    • classe (1)
    • comparacao (1)
    • cookies (1)
    • correcao (1)
    • CRUD (1)
    • curso (3)
    • curso php (2)
    • curso php gratis (1)
    • curso php mysql gratuito (2)
    • curso php via skype (1)
    • doacao (1)
    • encapsulamento (2)
    • escopo (1)
    • estrutura de controle (1)
    • evento (1)
    • exercicio (2)
    • fim do blog (1)
    • gratis (3)
    • IDE (1)
    • include (1)
    • instalação (1)
    • introducao (1)
    • logicos (1)
    • login (1)
    • loops (1)
    • matematicos (1)
    • métodos (1)
    • mysql (2)
    • off (1)
    • OOP (1)
    • operadores (3)
    • orientação à objeto (2)
    • painel controrle (1)
    • parametros get (1)
    • PHP (19)
    • php oop poo (1)
    • php aula function (1)
    • php aula servidor (1)
    • php clausulas mysql (1)
    • php mysql (1)
    • require (1)
    • session (1)
    • variaveis sistema (1)
    • xampp (1)

    Arquivo

    • ►  2011 (4)
      • ►  30 outubro - 6 novembro (1)
      • ►  22 maio - 29 maio (1)
      • ►  13 março - 20 março (1)
      • ►  16 janeiro - 23 janeiro (1)
    • ▼  2010 (15)
      • ►  19 dezembro - 26 dezembro (1)
      • ►  21 novembro - 28 novembro (1)
      • ►  17 outubro - 24 outubro (1)
      • ►  26 setembro - 3 outubro (1)
      • ▼  29 agosto - 5 setembro (1)
        • Aula 19 - Classe Mysql Simples
      • ►  1 agosto - 8 agosto (1)
      • ►  27 junho - 4 julho (2)
      • ►  6 junho - 13 junho (1)
      • ►  2 maio - 9 maio (1)
      • ►  7 março - 14 março (1)
      • ►  28 fevereiro - 7 março (1)
      • ►  21 fevereiro - 28 fevereiro (1)
      • ►  31 janeiro - 7 fevereiro (1)
      • ►  3 janeiro - 10 janeiro (1)
    • ►  2009 (20)
      • ►  20 dezembro - 27 dezembro (1)
      • ►  6 dezembro - 13 dezembro (1)
      • ►  29 novembro - 6 dezembro (1)
      • ►  15 novembro - 22 novembro (2)
      • ►  8 novembro - 15 novembro (1)
      • ►  18 outubro - 25 outubro (1)
      • ►  11 outubro - 18 outubro (1)
      • ►  4 outubro - 11 outubro (1)
      • ►  27 setembro - 4 outubro (3)
      • ►  20 setembro - 27 setembro (5)
      • ►  13 setembro - 20 setembro (3)
    • Home
    • Posts RSS

    © Copyright PHP ARTE - Vídeo aula PHP e Mysql Grátis. All rights reserved.
    Bloggerized by FalconHive.com

    Voltar ao topo