Linguagem PHP: 3ª Parte (Criando o Banco de Dados no phpmyadmin) – Criando uma Agenda de Contatos.


Criando uma Agenda de Contatos – Criando o Banco de Dados no phpmyadmin

Jbwebmaster João Batista Dantas Bezerra Júnior

Olá pessoal, seguindo a sequência do tutorial, vamos criar o banco de dados. Para isso vamos usar o phpmyadmin que já vem no próprio xampp ou wampp, verá que é bem simples de usar e que também é bastante completo, não ficando pra traz de nenhum outro programa para criação de banco de dados.

Para começar digite no seu navegador localhost/phpmyadmin/, seguida na tela inicial você já poderá digitar o nome do banco de dados que desejar, no nosso caso será agendatel tudo junto e minúsculo, além disso você deverá escolher a collate utf8_unicode_ci , pois é um padrão internacional que suporta 65 mil caracteres, permitindo considerar todos os diferentes caracteres de todos idiomas falados no mundo. Deverá ficar assim:

Tela inicial do phpmyadmin, nome do banco de dados.

Feito isso vamos criar a primeira tabela chamada de agenda e que possui 5 campos, do jeito que está na imagem:

Criando a Tabela Agenda.

Agora vamos dar nomes aos campos e configurar seu tipo, tamanho, se é not null ou nul, auto_increment e etc. Feito o que está na imagem clique no botão salvar.

Nomeando as campos e configurando!

Criando a tabela menu que possui 4 campos.

Tabela Menu

Agora configurando essa tabela do mesmo modo que fizemos com a tabela agenda.

Nomeando e configurando os dados da tabela menu.

Pronto seu banco de dados está criado, agora precisa apenas inserir os dados na tabela menu, no nosso caso temos apenas dois link, então para não perder tempo vou mostrar como você poderá preencher os campos com seus respectivos valores, porém vou importar os dados executando na query do phpmyadmin.

Bem para colocar os dados um a um você clica na aba inserir e em seguida digita os dados:

Inserindo dados na tabela.

Para importar usando a query do phpmyadmin vá até a aba sql, digite ou copie e cole o código abaixo:

INSERT INTO `menu` (`id`, `nomeMenu`, `link`, `title`) VALUES
(null, 'Cadastrar um Número', 'CadAgenda.php', 'Cadastrar Números na agenda.'),
(null, 'Números da Agenda', 'ListaAgenda.php', 'Listar  os Números da Agenda');
Inserindo os dados na tabela menu usando a aba sql.

Bem agora até o próximo post, valeu!

Linguagem PHP: 2ª Parte (Classe para inserir, deletar e atualizar) – Criando uma Agenda de Contatos.


Criando uma Agenda de Contatos – Classe para inserir, deletar e atualizar.

Jbwebmaster João Batista Dantas Bezerra Júnior

Olá pessoal, continuando o tutorial, vamos desenvolver a classe que realizará a manutenção do sistema, sendo a responsável por inserir, deletar e atualizar. Nesse tutorial iremos intender, dentre várias instruções, o conceito de ter uma classe abstrata.

  • Crie uma classe chamada Modelo.class.php no diretório Classes.
  • O nome da classe será Modelo (class Modelo { } ).

Agora vamos a sua construção:

Para começar, vamos precisar estender a classe Conexao, para isso chamamos a instrução include_once, que além de incluir o arquivo somente uma vez ainda avalia-o, depois do nome da classe usamos extends em seguida Conexao. Mais informações. Ficando assim:

abstract class Modelo extends Conexao { }

Entendendo quando usar a palavra chave abstract:

Usamos uma classe abstrata sempre que precisamos utilizar seus métodos mais vezes e para vários objetos, dessa forma ao invés dela servir a um único propósito ela pode ser generalizada e usada para outros objetivos. De acordo com a Caelum, usamos a palavra chave abstract também para impedir que ela possa ser instanciada. No nosso caso, a classe Modelo é abstrata, pois podemos usar em várias outras classes seus métodos para inserir, deletar e atualizar, servindo de molde para todas as classes que a herdarem e para evitar o erro de tentar instancia-la. Como por exemplo, você possui a classe Vectra e Palio sendo que os dados comuns a essas classes poderiam ficar numa classe chamada Carro, dessa forma a classe Carro seria abstrata e as outras herdam dela os dados comuns:

exemplo de classe abstrata

Como deve estar até agora:

/*
 * ******************************************************************************
 *    JBWEBMASTER - CLASSE MODELO PARA MANIPULAÇÃO COM O BANCO DE DADOS        *
 *                AUTOR: JOAO BATISTA DANTAS BEZERRA JUNIOR                    *
 *                E-MAIL: jbtrab@gmail.com                                     *
 *                        DATA: 18/12/2010                                     *
 * *****************************************************************************
 */

include_once("Conexao.class.php");

abstract class Modelo extends Conexao { }

Feito isso, vamos construir o método que verifica a chave primária, para quem não sabe o que significa, chave primária corresponde a um campo ou mais da tabela do banco de dados em que seus valores nunca se repetem, sendo geralmente o identificado da tabela em questão (ID), deixando essa linha única.

Para a construção desse método se faz necessário os conceitos:

  • get_object_vars – Retorna uma matriz associativa com as propriedades do objeto (Manual PHP).
  • Foreach – funciona somente com arrays, e lançará um erro se tentar utilizá-lo em uma variável de qualquer tipo diferente ou em variáveis não inicializadas. O foreach varre uma matriz e em cada iteração atribui um valor avançando seu ponteiro interno para o próximo elemento (apostilas.fok).
  • If – é um estrutura de controle que permite a execução de parte do código.
  • Array – Um array no PHP é atualmente um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves. Este tipo é otimizado de várias maneiras, então você pode usá-lo como um array real, ou uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção, pilha, fila e provavelmente mais. Como você pode ter outro array PHP como um valor, você pode facilmente simular árvores (Manual PHP).

Vamos chamar nosso método de chavePrimaria, public function chavePrimaria() { }, criamos uma variável para saber em que posição do loop vai estar que é $c, a variável $var receberá as propriedades da classe em questão assim: $var = get_object_vars($this); . Agora construímos um loop através do foreach, pois se trata de um array, dessa forma em cada iteração verificamos se na primeira posição do valor emitido pelo loop a $nome, se possui um _ (anderline) e se $c for zero (0), então a variável $cp (chave primária) recebe o valor de $nome.

Chave primária:

    /**
     * FUNCAO USADA PARA RETORNAR A CHAVE PRIMARIA DA TABELA.
     * @return UMA STRING COM O ATRIBUTO CHAVE PRIMARIA.
     */
    public function chavePrimaria() {
        $c = 0;
        //vai pegar nomes e conteudos das propriedades dos objetos
        $var = get_object_vars($this);
        foreach ($var as $nome => $valor) {
            //SE A PRIMEIRA POSICAO FOR UM ANDERLINE E
            // O $c ESTIVER NA PRIMEIRA POSIÇÃO (ZERO) ENTÃO É UMA CHAVE PRIMARIA
            if ($nome[0] == "_") {
                if ($c == 0) {
                    $cp = $nome;
                }
            }
            $c++;
        }
        return $cp;
    }

Agora vamos construir o método para inserir os dados no banco de dados MySql, sendo necessário conhecer:

OBS: Só colocarei o que ainda não estudamos até agora, então fique atento e caso queira saber dos demais, volte e leia as informações do outros métodos.

Manual PHP:

  • strtolower – Converte uma string para minúsculas.
  • get_class – Retorna o nome da classe de um objeto.
  • strlen – Retorna o tamanho de uma string.
  • Deve conhecer um pouco de SQL.

Chame o método de inserir, public function inserir() { }, a variável $var irá receber as propriedades da classe ($var = get_object_vars($this);), iniciamos a construção do sql: $sql = “INSERT INTO ” . strtolower(get_class($this)) . ” (“; , veja que o nome da classe será a que estiver instanciada, dessa forma o get_class retorna o nome da classe instanciada e o strtolower transforma tudo em minúsculos. Continuando a instrução sql agora temos que passar as variáveis, para isso foi utilizado o foreach e instruções de controle if, os dois juntos vão retornar todas as variáveis da classe em questão, o problema fica no final que receberia aspas simples e um sinal de virgula a mais. Para resolver esse problema foi utilizado strlen que retorna o tamanho da string e substituímos os últimos caracteres para vazio.

Terminado essa etapa instanciamos a classe Conexão, chamamos o método conectar, executamos o sql que foi feito e desconectamos.

Inserir:

/**
     * FUNCAO PARA INSERIR OS DADOS NO BANCO DE DADOS
     */
    public function inserir() {

        $var = get_object_vars($this);
        //CONSTRUINDO A INSTRUÇÃO SQL
        //UTILIZANDO strtolower PARA DEIXAR TUDO EM MINÚSCULO
        //get_class($this) PEGA A CLASSE ATUAL, QUE FOI INSTANCIADA
        $sql = "INSERT INTO " . strtolower(get_class($this)) . " (";
        foreach ($var as $nome => $valor) {
            //VERIFICANDO SE É CHAVE PRIMÁRIA - $nome[0] != "_" - CASO NÃO
            //CONTINUA A CONCATENAR OS $campos .= "$nome,"; E $valores .= "$valor','";
            if ($nome[0] != "_") {
                $campos .= "$nome,";
                $valores .= "$valor','";
            }
        }
        /*
         * utilizamos strlen para contar quantos caracteres existem na string,
         * mas também modificar acessando um de seus caractéres.
         */
        $uc = strlen($campos);
        //no nosso caso modificamos o último caracter que seria "," por " ".
        $campos[$uc - 1] = ' ';
        $uc = strlen($valores);
        $valores[$uc - 1] = ' ';
        $valores[$uc - 2] = ' ';
        //concatenar para formar uma instrução sql para inserir os dados.
        $sql = $sql . $campos . ") VALUES ('" . $valores . ")";
        //instanciando a classe conexão
        $con = new Conexao();
        //conectando ao mysql
        $con->conectar();
        //executando o sql passado
        $con->execSQL($sql);
        //desconectando
        $con->desconectar();
    }

Método para atualizar os dados do banco de dados. Utiliza-se das mesmas instruções php vistas no método inserir. As mudanças ficam a cargo da forma da construção do sql, por exemplo: UPDATE agenda SET nome = ‘joao’, numero = ‘33333333’, dataInclusao = ’11/01/03′, comentario = ‘teste’ WHERE idList=1.O foreach possui uma mudança, agora é verificado se o campo que o loop está retornando não é a chave primária, pois no sql de atualização só é necessário o id na condição WHERE, para isso passei por parâmetro $ch, $id. O resto permanece igual ao método inserir.

Atualizar:

/**
     * FUNCAO PARA ATUALIZAR OS DADOS DO BANCO DE DADOS
     * @param <String> $ch CHAVE PRIMARIA.
     * @param <String> $id ID FORNECIDO, NESSE CASO POR GET.
     */
    public function atualizar($ch, $id) {
        $var = get_object_vars($this);
        //CONSTRUINDO A INSTRUÇÃO SQL
        //UTILIZANDO strtolower PARA DEIXAR TUDO EM MINÚSCULO
        //get_class($this) PEGA A CLASSE ATUAL, QUE FOI INSTANCIADA
        $sql = "UPDATE " . strtolower(get_class($this));
        $sql .= " SET ";
        foreach ($var as $campo => $valor) {
            if ($campo[0] != "_") {
                if ($campo != $this->chavePrimaria()) {
                    $sql .= " $campo = '$valor',";
                }
            }
        }
        $uc = strlen($sql);
        $sql[$uc - 1] = ' ';
        $sql .= "WHERE $ch=$id";
        //instanciando a classe conexão
        $con = new Conexao();
        //conectando ao mysql
        $con->conectar();
        //executando o sql passado
        $con->execSQL($sql);
        //desconectando
        $con->desconectar();
    }

Função deletar é a mais simples, só é necessário passar o id e o valor do id por parâmetro para o sql e deletar, as instruções php também já foram explicados.

Deletar:

/**
     * DELETAR OS DADOS DO BANCO DE DADOS
     * @param <String> $ch CHAVE PRIMARIA.
     * @param <String> $id ID FORNECIDO, NESSE CASO POR GET.
     */
    public function deletar($ch, $id) {
        //CONSTRUINDO A INSTRUÇÃO SQL
        //UTILIZANDO strtolower PARA DEIXAR TUDO EM MINÚSCULO
        //get_class($this) PEGA A CLASSE ATUAL, QUE FOI INSTANCIADA
        // A CONDIÇÃO PARA QUE OCORRA UMA EXCLUSÃO É QUE $ch = '$id', CHAVE PRIMÁRIA
        // IGUAL AO ID RECEBIDO POR GET.
        $sql = "DELETE FROM " . strtolower(get_class($this)) . " WHERE $ch = '$id'";
        //instanciando a classe conexão
        $con = new Conexao();
        //conectando ao mysql
        $con->conectar();
        //executando o sql passado
        $con->execSQL($sql);
        //desconectando
        $con->desconectar();
    }

Agora todo o código fonte:

<?php

/*
 * ******************************************************************************
 *    JBWEBMASTER - CLASSE MODELO PARA MANIPULAÇÃO COM O BANCO DE DADOS        *
 *                AUTOR: JOAO BATISTA DANTAS BEZERRA JUNIOR                    *
 *                E-MAIL: jbtrab@gmail.com                                     *
 *                        DATA: 18/12/2010                                     *
 * *****************************************************************************
 */

include_once("Conexao.class.php");

abstract class Modelo extends Conexao {

    /**
     * FUNCAO USADA PARA RETORNAR A CHAVE PRIMARIA DA TABELA.
     * @return UMA STRING COM O ATRIBUTO CHAVE PRIMARIA.
     */
    public function chavePrimaria() {
        $c = 0;
        //vai pegar nomes e conteudos das propriedades dos objetos
        $var = get_object_vars($this);
        foreach ($var as $nome => $valor) {
            //SE A PRIMEIRA POSICAO FOR UM ANDERLINE E
            // O $c ESTIVER NA PRIMEIRA POSIÇÃO (ZERO) ENTÃO É UMA CHAVE PRIMARIA
            if ($nome[0] == "_") {
                if ($c == 0) {
                    $cp = $nome;
                }
            }
            $c++;
        }
        return $cp;
    }

    /**
     * FUNCAO PARA INSERIR OS DADOS NO BANCO DE DADOS
     */
    public function inserir() {

        $var = get_object_vars($this);
        //CONSTRUINDO A INSTRUÇÃO SQL
        //UTILIZANDO strtolower PARA DEIXAR TUDO EM MINÚSCULO
        //get_class($this) PEGA A CLASSE ATUAL, QUE FOI INSTANCIADA
        $sql = "INSERT INTO " . strtolower(get_class($this)) . " (";
        foreach ($var as $nome => $valor) {
            //VERIFICANDO SE É CHAVE PRIMÁRIA - $nome[0] != "_" - CASO NÃO
            //CONTINUA A CONCATENAR OS $campos .= "$nome,"; E $valores .= "$valor','";
            if ($nome[0] != "_") {
                $campos .= "$nome,";
                $valores .= "$valor','";
            }
        }
        /*
         * utilizamos strlen para contar quantos caracteres existem na string,
         * mas também modificar acessando um de seus caractéres.
         */
        $uc = strlen($campos);
        //no nosso caso modificamos o último caracter que seria "," por " ".
        $campos[$uc - 1] = ' ';
        $uc = strlen($valores);
        $valores[$uc - 1] = ' ';
        $valores[$uc - 2] = ' ';
        //concatenar para formar uma instrução sql para inserir os dados.
        $sql = $sql . $campos . ") VALUES ('" . $valores . ")";
        //instanciando a classe conexão
        $con = new Conexao();
        //conectando ao mysql
        $con->conectar();
        //executando o sql passado
        $con->execSQL($sql);
        //desconectando
        $con->desconectar();
    }

    /**
     * FUNCAO PARA ATUALIZAR OS DADOS DO BANCO DE DADOS
     * @param <String> $ch CHAVE PRIMARIA.
     * @param <String> $id ID FORNECIDO, NESSE CASO POR GET.
     */
    public function atualizar($ch, $id) {
        $var = get_object_vars($this);
        //CONSTRUINDO A INSTRUÇÃO SQL
        //UTILIZANDO strtolower PARA DEIXAR TUDO EM MINÚSCULO
        //get_class($this) PEGA A CLASSE ATUAL, QUE FOI INSTANCIADA
        $sql = "UPDATE " . strtolower(get_class($this));
        $sql .= " SET ";
        foreach ($var as $campo => $valor) {
            if ($campo[0] != "_") {
                if ($campo != $this->chavePrimaria()) {
                    $sql .= " $campo = '$valor',";
                }
            }
        }
        $uc = strlen($sql);
        $sql[$uc - 1] = ' ';
        $sql .= "WHERE $ch=$id";
        //instanciando a classe conexão
        $con = new Conexao();
        //conectando ao mysql
        $con->conectar();
        //executando o sql passado
        $con->execSQL($sql);
        //desconectando
        $con->desconectar();
    }

    /**
     * DELETAR OS DADOS DO BANCO DE DADOS
     * @param <String> $ch CHAVE PRIMARIA.
     * @param <String> $id ID FORNECIDO, NESSE CASO POR GET.
     */
    public function deletar($ch, $id) {
        //CONSTRUINDO A INSTRUÇÃO SQL
        //UTILIZANDO strtolower PARA DEIXAR TUDO EM MINÚSCULO
        //get_class($this) PEGA A CLASSE ATUAL, QUE FOI INSTANCIADA
        // A CONDIÇÃO PARA QUE OCORRA UMA EXCLUSÃO É QUE $ch = '$id', CHAVE PRIMÁRIA
        // IGUAL AO ID RECEBIDO POR GET.
        $sql = "DELETE FROM " . strtolower(get_class($this)) . " WHERE $ch = '$id'";
        //instanciando a classe conexão
        $con = new Conexao();
        //conectando ao mysql
        $con->conectar();
        //executando o sql passado
        $con->execSQL($sql);
        //desconectando
        $con->desconectar();
    }

}

?>

Posts seguintes:

  • Criação do banco de dados no phpmyadmin.
  • Formulário da Agenda.
  • Script usando os métodos inserir, deletar e atualizar os dados.

Até a próxima e só pra empolgar uma imagem do formulário:

 

Imagem do formulário da agenda de contatos

Espero que tenham gostado e boa sorte!