PHP

Page 1

TREINAMENTO PHP & MySQL

Instrutor: Bruno Freixo Duração: 12 horas Instituição de Ensino: UniCarioca 1


Pré-requisitos para o treinamento: • Noções em HTML; • Noções em programação; •

Um computador com Sistema Operacional Windows (XP/Vista/7/98/2000/2003/8).

2


SUMÁRIO

Parte 1 – Conceitos Fundamentais .......................................................... 5 1. O que é PHP?..................................................................................... 6 2. Easy PHP............................................................................................ 6 3. Introdução à sintaxe PHP................................................................. 14 4. Misturando PHP com HTML............................................................ 14 5. Variáveis.......................................................................................... 15 6. Tipos................................................................................................ 16 7. Estruturas de dados......................................................................... 16 8. Vetores............................................................................................ 18 9. Processamento de formulários........................................................ 20 Parte 2 – Banco de dados .........................................................................24 10. O que é um banco de dados?......................................................... 25 11. O que é SQL?.................................................................................. 25 12.Componentes da linguagem............................................................ 25 13. SGBD............................................................................................... 25 14. Modelagem de dados..................................................................... 26 14.1) Entidades e atributos..............................................................26 14.2) Modelagem da prática............................................................26 14.3) MER – Modelo entidade x relacionamento............................28 14.4) Chaves primária e estrangeira................................................30 15. Normalização de dados...................................................................32 15.1) 1FN................................................................................33 15.2) 2FN................................................................................33 16. SQL Scripts.......................................................................................33 16.1) Criar um novo banco de dados…………………………………………....33 16.2) Exibir todos os bancos de dados………………………………………….33 16.3) Selecionar o banco de dados desejado.....……………………………33 16.4) Criar uma tabela........................................……………………………33 16.5) Inserir registros.........................................……………………………33 16.6) Alterar registros........................................……………………………34 3


16.7) Excluir registros.........................................……………………………34 16.8) Consultar registros....................................……………………………34

Parte 3 – PHP & MySQL ............................................................................35 17. Introdução............................................................................................36 18. Inserindo os dados no banco .............................................................. 37 19. Excluindo registros no Banco .............................................................. 38 20. Alterando registros no Banco ............................................................. 39 Parte 4 - O Projeto .................................................................................... 40 21. Escopo do Projeto ............................................................................... 41 22. Modelagem de dados ......................................................................... 41 23. Construindo o banco usando o PHPMyAdmin .................................... 42 24. Telas do projeto .................................................................................. 46

Referências Bibliográficas ................................................................... 53

4


PARTE 1 CONCEITOS FUNDAMENTAIS

5


1. O que é PHP? PHP é uma linguagem de programação surgida em 1994 e utilizada principalmente para WEB (apesar de existir uma versão que trabalha em ambiente desktop – PHP-GTK), open-source e mundialmente conhecida. Pelo fato de rodar em ambiente WEB, mistura-se ao HTML, facilitando a obtenção de páginas WEB dinâmicas. O PHP é uma linguagem que roda no servidor e não no cliente (como Javascript, por exemplo). Sendo assim, uma página em PHP é apresentada através de um browser/navegador mas depende de um servidor WEB Apache para processá-la. Desde junho de 2004, esta linguagem de programação interpretada está na versão 5. Até o momento que este tutorial foi desenvolvido, o PHP ocupava a 6ª posição no índice do site da TIOBE, que aponta o ranking das linguagens mais utilizadas no mundo. O link é: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Para utilizar o PHP, faz-se necessário a instalação de um servidor WEB Apache local. Para utilizar o PHP com banco de dados, é necessária a instalação do banco a ser usado. O PHP oferece suporte a uma gama de bancos de dados, tais como Postgree, MySQL, Oracle, SQL Server, entre outros. Como o enfoque deste treinamento será baseado no PHP com o banco MySQL, vamos utilizar a melhor solução para tal. Existem softwares disponíveis gratuitamente na internet que podemos baixar para obtenção desse “pacote” de aplicativos que precisamos para rodar o PHP. Um deles é o EasyPHP, que veremos agora.

2. EASY PHP Easy PHP é um pacote de serviços necessário ao desenvolvimento de uma aplicação em PHP. É uma solução baseada em WAMP – Windows, Apache, MySQL, PHP. E o melhor: gratuito! O aplicativo contempla um servidor WEB Apache, banco de dados MySQL, gerenciador do banco PHPMyAdmin e um módulo para programação em PHP, além do arquivo de configuração php.ini.

Instalação É super fácil e prático instalar o EasyPHP. Após o download do software, siga os passos: 6


1) Clique no aplicativo de instalação do EasyPHP:

2) Dê “OK” e prossiga com a instalação, clicando em “Next”.

3) Selecione “I accept the agreement” e clique em “Next”:

7


4) Clique em “Next” para os próximos passos:

8


9


5) Agora escolha a opção “Install”:

10


6) O programa agora estรก sendo instalado na sua mรกquina.

11


7) Ao concluir a instalação clique em “Finish”.

12


Para testar se o EasyPHP foi instalado com êxito em sua máquina, vá até o ícone do aplicativo (lado direito inferior da sua área de trabalho) clicando com o botão direito (em algumas versões o botão do mouse será esquerdo) e escolha abrir uma página do diretório ativo (clique em “Local Web” para abrir o diretório de aplicações pelo navegador) ou abrir o PHPMyAdmin (escolha “Configuration” e depois clique em “PHPMyAdmin” para abrir este gerenciador MySQL). Todos os projetos a ser desenvolvidos a partir de agora, deverão estar no diretório raiz (que é o www), em um diretório parecido com este abaixo: C:\Program Files\EasyPHP-5.3.6.0\www O ideal é criarmos pastas dentro do diretório www para cada projeto, afim de que os arquivos não fiquem “soltos”.

13


3. Introdução à sintaxe PHP Os delimitadores de código da linguagem são os seguintes: <?php // escreva o código aqui ?> ou <? // escreva o código aqui ?> Sendo o primeiro exemplo o mais indicado. A linha cinza representa um comentário. Os comentários em PHP podem ser descritos tanto da forma anterior (para delimitar uma linha) quanto desta forma: <?php /* este tipo de delimitador serve para receber comentários em várias linhas */ ?> Para escrever nosso primeiro script em PHP, eis o código abaixo: <?php echo “Meu primeiro script em PHP”; ?> Os comandos echo e print têm o mesmo valor sintático, ou seja, servem para escrever na saída.

4. Misturando PHP com HTML Um dos maiores poderes do PHP é sua capacidade de se misturar ao HTML, tornando mais fácil a geração de páginas WEB dinâmicas. Veja abaixo um exemplo que mostra o PHP embutido no HTML: 14


<input type="text" name="cpf" value="<?php echo $_POST['cpf'] ?>" /> HTML embutido no PHP: <?php echo “<input type=\"hidden\" name=\"id\" value='{$id}' />”; ?> Note que quando embutimos HTML no script PHP, nas tags são embutidas contrabarras (“\”), após o sinal de atribuição (=) e antes das primeiras aspas (“); e antes da segunda aspas (“).

5. Variáveis As variáveis em PHP são representadas pelo sinal dólar ($), este, seguido de um nome qualquer. Exemplo: “$nome”. No PHP não há a necessidade de se declarar tipos. A linguagem já se encarrega de fazer isso pelo programador. O PHP não é uma linguagem como o Java, por exemplo, fortemente “tipada”. OBS.: lembrando que o nome de uma variável é case-sensitive, isto é, o PHP diferencia maiúsculas de minúsculas. Exemplo: <?php $nome = “João”; $NOME = “Maria”; echo $NOME; ?> Neste caso, a saída será: “Maria”.

Concatenando as variáveis: <?php $nome = “João”; $outro_nome = “Maria”; echo $nome. “ e ” .$outro_nome; ?> A saída será: “João e Maria”. 15


A concatenação se dá pelo sinal de ponto (“.”).

6. Tipos Conforme foi falado anteriormente, no PHP não há a declaração de tipos, a própria tecnologia já faz isso pelo desenvolvedor. Existem 8 tipos básicos divididos em 3 grupos: 1) Escalares 1.1)Inteiros (Int); 1.2)Ponto flutuante (Float, Double ou Real); 1.3)String; 1.4)Booleanos; 2) Compostos 2.1) Arrays; 2.2) Objetos; 3) Especiais 3.1) Recursos; 3.2) Null

7. Estruturas de dados Sequência Exemplo: elaborar algoritmo que, recebidos 2 valores da entrada, calcule e escreva na tela seu produto: <?php $x = 35; $y = 47; echo $x * $y; ?> O resultado na saída será: “1645”.

Condicional (if, else) 16


Exemplo: desenvolver programa que, recebidos 2 valores da entrada equivalentes às notas de um aluno, calcule sua média aritmética e determine: a) Se a nota for maior ou igual a 7 = “Aprovado”; b) Se a nota for abaixo de 7 = “Reprovado”; <?php $x = 10; $y = 4; $ma = ($x + $y) / 2; if ($ma >= 7) { echo "Aprovado"; } else { echo "Reprovado"; } ?>

Repetição (while e for) Exemplo: representar algoritmo que imprima números de 1 a 100 usando as seguintes estruturas de repetição: a) while; b) for; ----------------------------------------------------------------------------------------------a) while: <?php $i = 1; while ($i <= 100) { echo $i . "<br>"; $i++; } ?> b) for: <?php 17


for ($i=1; $i<=100; $i++) { echo $i . "<br>"; } ?>

OBS.: note que quando usamos a estrutura WHILE precisamos iniciar a variável, valorando-a antes do laço. Depois, precisamos incrementá-la dentro do laço. Você pode experimentar não incrementá-la dentro do laço e observar o que acontece. É claro que, o uso do WHILE ou do FOR dependerá do contexto do programa criado, ficando a cargo do programador escolher um ou outro.

8. Vetores Exemplo: programar algoritmo que, recebidos os nomes dos 11 jogadores titulares do Vasco da Gama, imprima na tela o nome do goleiro, o nome do craque do time e o jogador mais velho do time. Obs.: utilizar somente uma variável. <?php $nome[] = ”Fernando Prass”; $nome[] = ”Fágner”; $nome[] = ”Renato Silva”; $nome[] = ”Dedé”; $nome[] = ”Thiago Feltri”; $nome[] = ”Rômulo”; $nome[] = ”Eduardo Costa”; $nome[] = ”Juninho Pernambucano”; $nome[] = ”Felipe”; $nome[] = ”Eder Luis”; $nome[] = ”Alecsandro”; echo "Goleiro: " . $nome[0] . "<br>"; echo "Craque do time: " . $nome[3] . "<br>"; echo "Mais velho do time: " . $nome[7] . "<br>"; ?> Outra forma de se fazer: “imprimir todos os nomes recebidos”. 18


<?php $jogadores = array(‘Fernando Prass’,’Fágner’,’Renato Silva’,’Dedé’,’Thiago Feltri’,’Rômulo’,’Eduardo Costa’,’Juninho Pernambucano’,’Felipe’,’Eder Luís’,’Alecsandro’); foreach ($jogadores as $indice => $valor) { echo $indice . " - " . $valor . "<br>"; } ?>

OBS.: repare que o índice no PHP começa com zero (“0”) e não com um (“1”).

Ordenação simples Exemplo: fazer algoritmo que receba os nomes dos jogadores do Vasco e imprima-os em ordem alfabética, utilizando ordenação simples:

19


9. Processamento de formulários A partir de agora vamos começar a parte prática do treinamento, antecedendo o projeto. Tendo isto em vista, inicie o EasyPHP e, com o botão direito no ícone do aplicativo (no lado direito inferior do desktop) escolha a opção “Local WEB”, ou simplesmente vá até o navegador e digite “127.0.0.1”. Se não funcionar, digite “127.0.0.1:8080”. Ao preencher os dados num formulário, essas informações precisam ser processadas de alguma forma: enviando os dados por email; cadastrando os dados num banco de dados; escrevendo os dados na própria tela, dentre outros fins. Para que isso seja satisfeito, em se tratando de programação WEB, precisamos ter um arquivo (ou página) com um formulário HTML e um outro arquivo com os scripts do processamento.

20


Crie uma pasta no diretório www (Disco Local / Arquivos de programas / EasyPHP / www) chamada “treinamento-php”. Abra o Dreamweaver e, dentro desta pasta, crie um arquivo pelo nome “index.html”. Vamos criar um formulário dentro deste arquivo. Veja:

Existem duas maneiras de se processar formulário em PHP: GET e POST. GET e POST são arrays associativos e, quando definimos no formulário que o método é GET, todos os dados resgatados do formulário e processados no servidor WEB Apache aparecerão na URL ou barra de endereço do navegador, o que não representa segurança para o programa (imagine passar informações de senha numa URL...). Já o método POST é o mais seguro, mantendo as informações processadas no servidor sem passá-las pela URL, e sim, somente quando são requisitadas na página. Vamos resgatar os dados deste formulário primeiramente pelo método GET:

index.html

Agora vamos criar um arquivo chamado processa_formulario.php. processa_formulario.php 21


Como aparecerĂĄ no navegador, depois de preenchido (observe a URL):

Vamos fazer o mesmo processo anterior, porĂŠm agora utilizando POST:

index.html

processa_formulario.php

22


Veja como aparecerĂĄ no navegador (note que nĂŁo aparecem os dados na URL):

23


PARTE 2 BANCO DE DADOS

24


10. O que é um banco de dados? É um sistema que tem por propósito armazenar informações. Um banco de dados relacional é assim chamado porque os dados relacionam-se ou criam laços entre si. É constituído por tabelas.

11. O que é SQL? SQL (Structured Query Language) ou linguagem de consulta estruturada é o conjunto de comandos para manipulação de banco de dados. Não é considerada uma linguagem de programação e sim uma linguagem de pesquisa declarativa.

12. Componentes da linguagem A linguagem SQL é dividida em componentes: • DDL (Data Definition Language): responsável por criar os componentes do banco de dados, entre eles, as tabelas. Os principais comandos DDL são: CREATE DATABASE; CREATE TABLE; ALTER TABLE; DROP TABLE. •

DML (Data Manipulation Language): manipula os dados armazenados no banco. Comandos: INSERT; DELETE; UPDATE.

DQL (Data Query Language): permite a consulta de dados no banco. Seu comando é “SELECT”.

13. SGBD SGBD é uma sigla para Sistema Gerenciador de Banco de Dados (ou DBMS, do inglês Data Base Management System). Um SGBD é um software responsável por gerenciar o banco de dados. Exemplos de SGBD’s: MySQL, PostgreeSQL, Oracle, SQL Server, Sybase, etc.

25


14. Modelagem de dados A modelagem de dados é literalmente a construção de um modelo de dados que seja capaz de representar os requisitos de um determinado negócio do mundo real. Temos na internet várias ferramentas boas e gratuitas que auxiliam na modelagem de dados, como o Workbench (que já vem na instalação do MySQL) e o DBDesigner, entre tantas outras ferramentas CASE.

14.1) Entidades e atributos: No modelo físico, uma entidade é a tabela e o atributo é a coluna.

14.2) Modelagem na prática: Vamos imaginar a modelagem de dados de um sistema de catálogo de filmes de uma locadora. Nesse catálogo dever-se-á conter dados como nome do autor do filme, assim como o nome do filme, produtora, preço da locação, gênero e a série. O preço da locação está diretamente relacionado à série a qual o filme pertence: SÉRIE OURO DIAMANTE PRATA

PREÇO DA LOCAÇÃO R$5,00 R$4,50 R$4,00

Resolução: 1) CRIAR O NOME DO BANCO – “LOCADORA”; 2) CRIAR A TABELA “FILME”:

AUTOR

NOME

PRODUTORA

SÉRIE

Spielberg Spielberg

E.T. Jurassic Park As minas do Rei Salomão Tropa de Elite

Universal Universal

Prata Diamante

PREÇO DA GÊNERO LOCAÇÃO R$4,00 Ficção R$4,50 Ficção

Paramount

Diamante

R$4,50

Aventura

Zazen

Ouro

R$5,00

Ação

Spielberg

José Padilha

Repare quantos registros repetidos nas colunas: AUTOR, PRODUTORA, SÉRIE, PREÇO DE LOCAÇÃO e GÊNERO. Isso infere diretamente na quantidade de registros que será 26


armazenada e no grau de clareza do meu modelo de dados, obviamente que estamos falando de espaço e qualidade das informações. Colunas onde seus registros se repetem com frequência devem não mais ser colunas e passarem a ser TABELAS. Devemos sempre, ao desenvolver um projeto de banco de dados, pensar que o objeto pode expandir. Por exemplo, um sistema para um escritório de pequeno porte: se imaginarmos no momento da modelagem de dados que este escritório pode abrir filiais, criar novos departamentos, abrigar novos cargos de funcionários, etc., estaremos pensando corretamente, logo, nosso modelo lógico estará bem definido e o modelo físico, bem estruturado. Se estivéssemos simulando um banco de dados para um sistema de cadastro de clientes, por exemplo, teríamos uma tabela (entidade) chamada Cliente, onde a coluna NOME, por raras exceções, teriam dados repetidos. Mas isso não seria constantemente e, sim, lá uma vez ou outra. Daí não caberia criar uma outra tabela chamada NOME e sim nome continuar sendo uma coluna (atributo) da tabela CLIENTE. Com isso, já temos em mente que, além da tabela FILME, as outras tabelas a criar serão: PRODUTORA, PRECO_LOCACAO, SERIE, GENERO, AUTOR. Veja como ficariam as tabelas do banco de dados LOCADORA:

TABELA PRODUTORA: PARAMOUNT UNIVERSAL TABELA PRECO_LOCACAO: R$5,00 R$4,50 R$4,00 TABELA SERIE: OURO PRATA DIAMANTE TABELA GENERO: FICÇÃO DRAMA TABELA AUTOR: SPIELBERG SPIELBERG 27


Quem já usou o banco de dados Access da Microsoft sabe que as tabelas precisam de uma coluna que funcione como um autoincremento e que não seja passiva de alteração, ou seja, a cada inserção de dados, automaticamente esse campo referente ao registro corrente deverá ser preenchido e NUNCA ser alterado. A esta coluna que receberá os registros que não poderão ser modificados dizemos que é um campo CHAVE PRIMÁRIA da tabela em questão. Veja como ficarão as tabelas modificadas do banco de dados LOCADORA: TABELA PRODUTORA: IDPRODUTORA 1 2

NOME_PRODUTORA PARAMOUNT UNIVERSAL

TABELA PRECO_LOCACAO: IDPRECOLOCACAO 1 2 3

PRECO_LOCACAO R$5,00 R$4,50 R$4,00

TABELA SERIE: IDSERIE 1 2 3

SERIE OURO DIAMANTE PRATA

TABELA GENERO: IDGENERO 1 2

GENERO FICÇÃO AVENTURA

Agora sim as tabelas estão com seus atributos corretamente preenchidos. Mas como elas irão relacionar-se?

14.3) MER - Modelo entidade x relacionamento: Até agora pensamos em criar outras tabelas para melhorar a velocidade do fluxo com a redução de informações repetidas no banco de dados e para termos uma estrutura mais bem definida e preparada para futuras alterações. Mas também devemos pensar em como essas tabelas vão se comunicar ou se relacionar umas com as outras. A abordagem relacional é a utilização desses conceitos de entidade e relacionamento para criação dessas estruturas. 28


Existem 3 tipo de relacionamentos entre tabelas: 1:1 – um para um; 1:m – um para muitos; m:n – muitos para muitos; No nosso sistema de catálogo veremos dois deles. Vamos pensar neste banco de dados que estamos criando: LOCADORA. LOCADORA possui 5 tabelas: PRODUTORA, PRECO_LOCACAO, SERIE, GENERO, FILME. Devemos pensar agora quais tabelas vão relacionar-se entre si. Pensemos na tabela principal: FILME. Um filme pode pertencer a muitas produtoras? A resposta é NÃO. O filme E.T. não pode ser da UNIVERSAL e nem da PARAMOUNT ao mesmo tempo. Ou ele pertence a uma produtora ou pertence à outra. Agora, o processo inverso: uma produtora pode produzir vários filmes? A resposta é SIM. A UNIVERSAL produziu, no nosso exemplo fictício, E.T. e Jurassic Park e outros muitos filmes que ainda serão cadastrados no catálogo. Este exemplo que acaba de ser dado constitui um relacionamento de UM PARA MUITOS, isto é, UMA PRODUTORA PODE TER VÁRIOS FILMES MAS UM MESMO FILME SÓ PODE SER PRODUZIDO POR UMA PRODUTORA. Simboliza-se assim este tipo de relacionamento:

Vamos pensar agora na tabela SERIE e na tabela PRECO. O preço varia de acordo com a série do filme. Sendo assim, uma série (DIAMANTE, por exemplo) pode ter vários preços? A resposta é NÃO. Uma série pode ter um e somente um preço. A mesma coisa ao contrário: um preço só pode se enquadrar em uma série. Não existe R$5,00, por exemplo, para as séries OURO e DIAMANTE. Neste caso, R$5,00 são as locações somente da série OURO. A este caso atribuímos o relacionamento chamado UM PARA UM, isto é, UMA SÉRIE SÓ PODE TER UM E SOMENTE UM PREÇO E UM PREÇO SÓ PODE ESTAR RELACIONADO A UMA E SOMENTE UMA SÉRIE. Simboliza-se assim este tipo de relacionamento:

29


Um filme pode ser escrito por mais de um autor? SIM. E um autor: pode escrever mais de um filme? SIM também. Estamos, neste exemplo, tratando da cardinalidade MUITOS PARA MUITOS (m:n), representada assim:

Vamos abstrair do nosso sistema para dar um outro exemplo de relacionamento MUITOS PARA MUITOS. Imaginemos um sistema de uma loja de roupas. Um cliente entra na loja, faz o pedido de um produto. Vamos nos ater somente a estas 3 entidades: CLIENTE, PEDIDO e PRODUTO. Um cliente pode fazer vários pedidos, pois ele pode voltar à loja outras vezes, mas um pedido, que contém data e hora, só pode ser feito por um cliente. Então, teremos:

Agora vamos pensar: em um pedido podemos colocar vários produtos? A resposta é SIM. E um mesmo produto? Pode estar em vários pedidos? Também SIM. A esse relacionamento denominamos MUITOS PARA MUITOS, ou seja, EM UM PEDIDO PODE CONTER VÁRIOS PRODUTOS E UM MESMO PRODUTO PODE ESTAR EM VÁRIOS PEDIDOS.

14.4) Chaves primária e estrangeira: Vimos que chave primária é um campo ou coluna em que seus registros são imutáveis e que permite identificá-los em uma única ocorrência. OBS.: a questão do autoincremento não tem relação com a chave primária, porém, num banco bem estruturado, na maioria dos casos, a chave primária geralmente é um campo do tipo numérico (INT ou BIGINT – é mais rápido para 30


retornar dados do que um tipo VARCHAR) e autoincrementado à medida que é alimentado. No exemplo anterior, um cliente pode fazer vários pedidos, mas um pedido só pertence a um cliente. A tabela PEDIDO recebe a cardinalidade MUITOS. Isso significa que ela terá que ter uma coluna que receberá a chave primária de CLIENTE. Essa coluna será denominada chave estrangeira. Chave estrangeira é o atributo que permite o relacionamento entre duas ou mais tabelas. Dessa forma teríamos, por exemplo: Tabela CLIENTE: IDCLIENTE 1 2

NOME JOÃO DA SILVA MARIA COELHO

CPF 12345 67890

Tabela PEDIDO: IDPEDIDO 1 2 3

ID_CLIENTE 1 1 2

DATA_HORA 10/06/12 – 17:35 11/06/12 – 08:48 11/06/12 – 08:56

DESCRIÇÃO Lorem ipsum Dolor sit Amet

Agora sim podemos fazer um relacionamento entre essas tabelas, pois elas têm um vínculo, que é justamente a CHAVE ESTRANGEIRA. Chave primária está ligada ao campo único numa tabela e chave estrangeira esta ligada ao relacionamento entre essas tabelas.

Para representar na prática o relacionamento muitos para muitos, vamos lembrar que em um pedido pode conter vários produtos e um mesmo produto pode estar em vários pedidos. Sendo assim, como ficaria a disposição das chaves estrangeiras? Uma chave estrangeira ficaria na tabela PEDIDO e outra chave estrangeira ficaria na tabela PRODUTO? A resposta é NÃO. Quando temos um relacionamento MUITOS PARA MUITOS faz-se necessário a criação de uma terceira tabela, que irá abrigar as chaves de ambas as tabelas envolvidas. Observe: Tabela PEDIDO: IDPEDIDO 1 2 3

ID_CLIENTE 1 1 2

DATA_HORA 10/06/12 – 17:35 11/06/12 – 08:48 11/06/12 – 08:56 31

DESCRIÇÃO Lorem ipsum Dolor sit Amet


Tabela PRODUTO: IDPRODUTO 1 2

NOME_PRODUTO CAMISETA XPTO CALÇA JEANS ZÉ MANÉ

Tabela PEDIDO_PRODUTO: ID 1 2

ID_PEDIDO 3 2

ID_PRODUTO 1 1

Na tabela PEDIDO_PRODUTO as chaves estrangeiras referem-se às colunas ID_PEDIDO e ID_PRODUTO. Perceba que na tabela PEDIDO_PRODUTO, no 1º registro (ID = 1) a coluna chave estrangeira ID_PEDIDO refere-se à coluna com IDPEDIDO = 3 da tabela PEDIDO (11/06/12 – 08:56) e que a outra coluna chave estrangeira ID_PRODUTO refere-se à coluna com IDPRODUTO = 1 da tabela PRODUTO (CAMISETA XPTO). No 2º registro (ID = 2) da tabela PEDIDO_PRODUTO a coluna chave estrangeira ID_PEDIDO refere-se à coluna com IDPEDIDO = 2 da tabela PEDIDO (11/06/12 – 08:48) e que a outra coluna chave estrangeira ID_PRODUTO refere-se novamente à coluna com IDPRODUTO = 1 da tabela PRODUTO (CAMISETA XPTO). OBS.: os atributos de uma tabela que não se devem repetir não incluem campos chave estrangeira, pois estes são considerados registros de referência.

15. Normalização de dados É uma sequência de etapas sucessivas que visam melhorar a qualidade de um projeto de banco de dados, criando um modelo estável. Existem algumas regras que se aplicam a essa técnica chamadas de “Forma Normal”. Existem por volta de 5 Formas Normais e elas são representadas da seguinte maneira: 1FN (1ª Forma Normal) 2FN (2ª Forma Normal) 3FN (3ª Forma Normal) 4FN (4ª Forma Normal) 5FN (5ª Forma Normal) 32


Como fugirá do escopo deste treinamento destrinchar todas as Formas Normais, vamos aprender somente a 1FN e a 2FN.

15.1) Primeira Forma Normal (1FN) Diz-se que uma entidade (tabela) está na 1ª Forma Normal (1FN) quando nenhum de seus atributos possuir repetições. Nesse caso deve-se transformar o ATRIBUTO onde os registros se repetem com frequência em ENTIDADE, ou seja, uma determinada coluna “morre” numa tabela e passa a ser uma outra tabela.

15.2) Segunda Forma Normal (2FN) Diz-se que uma entidade (tabela) está na 2ª Forma Normal (2FN) quando todos os seus atributos não chave dependem da chave desta entidade, forçando com que numa tabela não tenha repetição de registros em suas colunas (1FN), com exceção para repetição de registros do atributo chave estrangeira.

16. SQL SCRIPTS Como vimos anteriormente os comandos DDL, DML e DQL são responsáveis pelo controle e manipulação através de scripts no banco de dados. Os scripts não são case-sensitive, isto é, podem ser escritos com letras maiúsculas ou minúsculas. Vamos conhecer alguns deles agora. 16.1) Criar um novo banco de dados: CREATE DATABASE nome_do_banco; 16.2) Exibir todos os bancos de dados: SHOW DATABASES; 16.3) Selecionar o banco de dados desejado: USE DATABASE nome_do_banco; 16.4) Criar uma tabela: CREATE TABLE nome_da_tabela; 16.5) Inserir registros: INSERT INTO tabela(atributo1,atributoN) VALUES(1, ‘Registro 1’); INSERT INTO tabela(atributo1,atributoN) VALUES(2, ‘Registro 2’); 33


INSERT INTO tabela(atributo1,atributoN) VALUES(3, ‘Registro 3’); 16.6) Alterar registros: UPDATE tabela SET atributo_chave_primaria=1; UPDATE tabela SET atributo_chave_primaria=2; UPDATE tabela SET atributo_chave_primaria=3;

atributo1=’Bruno’,

atributo2=’123’

WHERE

atributo1=’João’,

atributo2=’456’

WHERE

atributo1=’Maria’,

atributo2=’789’

WHERE

16.7) Excluir registros: DELETE FROM tabela WHERE atributo_chave_primaria=1; DELETE FROM tabela WHERE atributo_chave_primaria=2; DELETE FROM tabela WHERE atributo_chave_primaria=3; 16.8) Consultar registros: Faz uma consulta de todos os registros de uma tabela: SELECT * FROM tabela; Faz uma consulta por ordem ascendente do atributo escolhido: SELECT * FROM tabela ORDER BY atributo_chave_primaria ASC; SELECT * FROM tabela ORDER BY atributo_qualquer ASC; Faz uma consulta por ordem descendente do atributo escolhido: SELECT * FROM tabela ORDER BY atributo_chave_primaria DESC; SELECT * FROM tabela ORDER BY atributo_qualquer DESC; Faz uma consulta retornando apenas os últimos 3 registros: SELECT * FROM tabela ORDER BY atributo_chave_primaria DESC LIMIT 3; Faz uma consulta selecionando apenas os atributos que se deseja: SELECT atributo1,atributo2 FROM tabela; Faz uma consulta envolvendo duas tabelas e retornando o valor do registro desejado: SELECT * FROM tabelaA INNER JOIN tabelaB ON tabelaA.atributo_chave_primaria = tabelaB.atributo_chave_estrangeira;

34


PARTE 3 PHP & MySQL

35


17. Introdução O enfoque deste treinamento é PHP com o banco de dados MySQL. Sendo assim, os scripts SQL e as funções em PHP serão direcionados para o banco MySQL. O PHP possui funções nativas para a aplicação “falar” com o banco de dados. A primeira delas é a conexão com o banco pois, sem esta, ficaria impossível fazermos qualquer tipo de ação que precisasse do banco de dados.

Conexão ao Banco MySQL

Como foi dito anteriormente, todo e qualquer tipo de ação da aplicação com o banco de dados requer esta conexão. Para isso, o PHP tem outra função especial, o “include”, em que a aplicação inclui literalmente o conteúdo de outro arquivo PHP. Pensa se ficássemos toda hora tendo que criar um arquivo desse de conexão? Por isso, a partir de agora, passaremos a usar a função “include”. Todo e qualquer tipo de ação para incluir, alterar, consultar ou excluir dados em um banco é preciso utilizar uma função nativa de consulta do PHP. Esta função é a “mysql_query”. Veja: mysql_query(“script SQL da função”); Incluir dados no banco: mysql_query(“INSERT INTO tabela (atributo1,atributo2) VALUES ($var1,$var2)”); Alterar dados no banco: mysql_query(“UPDATE tabela SET atributo1=’$var1’, atributo2=’$var2’, atributo3=’$var3’ WHERE chave-primaria=’$variavel_que_representa_chaveprimaria’”); Excluir dados no banco: mysql_query(“DELETE FROM tabela primaria=’$variavel_que_representa_chave-primaria’”); Consulta no banco: mysql_query(“SELECT * FROM tabela”); 36

WHERE

chave-


OBS.: tecnicamente usamos o termo “CRUD” para nos referenciar às ações no banco: CREATE, RETRIEVE, UPDATE, DELETE, ou, respectivamente: INSERIR, CONSULTAR, ALTERAR, EXCLUIR.

18. Inserindo os dados no Banco Primeiro vamos criar um banco para que possamos incluir dados nele. Copie e cole o código abaixo na aba SQL da tela principal do PHPMyAdmin ou, se preferir, faça-o com auxílio do próprio gerenciador (sem precisar colocar código). CREATE DATABASE banco; USE banco; CREATE TABLE usuario ( Id INT(10) AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(255), email VARCHAR(255), senha VARCHAR(12) ) ENGINE = InnoDB;

Agora, crie um formulário para inserir dados no banco: index.html

processa_cadastro.php

37


Pronto! Os dados foram inseridos no banco com sucesso.

19. Excluindo registros no Banco O banco precisa saber qual ĂŠ a chave primĂĄria do registro a se excluir. Veja: deletar.html

deletar.php

38


20. Alterando registros no Banco Assim como para excluir um registro o banco precisa saber qual a chave primĂĄria, tambĂŠm o farĂĄ para alterar dados. Veja: alterar.html

alterar.php

39


PARTE 4 O PROJETO

40


21. Escopo do Projeto O projeto deste treinamento é desenvolver uma aplicação que armazene informações do usuário de um sistema qualquer. Essas informações são apenas: NOME, CPF, EMAIL Os passos serão: 1) modelar os dados para criar o banco de dados; 2) criar os formulários; 3) criar os arquivos de processamento do formulário, com o CRUD e as validações necessárias ao bom funcionamento do sistema.

22. Modelagem de dados Primeiramente teremos que ter em mente que, toda vez que se modelar um banco, precisaremos deixar as informações o menos redundante possível. Isso implica diretamente na quantidade e qualidade de tabelas que teremos para nossa aplicação. Vamos pensar: 1) Um usuário pode ter mais de um nome? 2) Um usuário pode ter mais de um CPF? 3) Um usuário pode ter mais de um email? Parece que a única alternativa que podemos responder que sim é a alternativa 3. Sim, um usuário pode ter mais de um email. E um mesmo email? Pode ser de vários usuários? Normalmente que não! Seguindo essa linha de raciocínio fechamos então a modelagem do nosso banco, que terá duas tabelas, portanto: USUARIO EMAIL

Veja o esquema: Agora poderemos montar o nosso banco de dados com essas informações.

41


A tabela usuário terá 3 atributos (ou colunas): ID, NOME, CPF. A tabela email terá 3 atributos (ou colunas), sendo que, um deles, será a chave estrangeira de usuario: ID, ID_USUARIO, EMAIL.

23.Construindo o banco usando o PHPMyAdmin Poderemos simplesmente construir o banco utilizando o script. Veja: CREATE DATABASE projeto_uni; USE projeto_uni; CREATE TABLE usuario ( id INT(10) AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(255), cpf VARCHAR(14) ) ENGINE = InnoDB; CREATE TABLE email ( id INT(10) AUTO_INCREMENT PRIMARY KEY, id_usuario INT(10), email VARCHAR(255), FOREIGN KEY (id_usuario) REFERENCES usuario(id) ) ENGINE = InnoDB;

Ou seguir os passos conforme as ilustrações a seguir, para criar o banco de dados com auxílio do PHPMyAdmin: 1) Ao abrir o console do PHPMyAdmin, clique na aba “Banco de Dados”:

42


2) Digite o nome do banco de dados: projeto_uni. Clique em “Criar”.

3) No lado esquerdo, há a relação dos bancos existentes. Procure o banco que você acabou de criar (projeto_uni) e clique em cima. Veja:

4) Vamos agora criar as tabelas desse banco, que serão duas (USUARIO e EMAIL). Digite na caixa de nome a 1ª tabela que iremos criar: usuario. O seu número de colunas é 3. Veja:

43


5) Preencha o formulário que segue na janela que se abriu com os dados ilustrados abaixo:

6) Clique em “Salvar” e veja a tela que segue:

7) Para criar a outra tabela, EMAIL, vá até a aba “Operações” e, em “Criar nova tabela no Banco de Dados projeto-uni”, digite “email” dentro da caixa Nome, com 3 colunas: 44


8) Após clicar em “Executar”, preencha os dados conforme ilustra a figura abaixo:

9) Pronto! Após clicar em “Salvar”, o banco de dados da nossa futura aplicação já estará pronto.

45


24.Telas do projeto Tela inicial Podemos pensar na página inicial do projeto como sendo uma tabela única, com todos os dados do usuário: NOME, CPF e EMAIL. Afinal, ao usuário do sistema, que é leigo, não interessa saber o ID do cliente ou o ID do email ou então não faz sentido apresentar duas tabelas (USUARIO e EMAIL). O nosso formulário terá uma “cara” parecida com esta:

Ou seja, numa única página, que é a página inicial, o usuário do sistema já teria todas as opções disponíveis: Cadastrar novo usuário, Alterar e Excluir registros, além de ser uma tela de Consulta, com todos os usuários cadastrados até o momento. Para criarmos esta tela, veja como ficará o código ilustrado na imagem abaixo:

46


Entendendo o código: A variável $consulta irá guardar na memória a consulta ao banco, através da função nativa do PHP mysql_query(), tendo como parâmetro uma SELECT, que é um script SQL. A variável $rows irá fazer uma contagem de registros nas tabelas em questão (usuario e email), através de uma outra função nativa do PHP, “mysql_num_rows()”, esta que terá como parâmetro a variável $consulta, que armazenou uma consulta ao banco. A lógica para que cada registro apareça sequencialmente na tabela é fazer um laço atribuindo à variável $exibir todos os registros encontrados na consulta, através da função do PHP mysql_fetch_array(). Assim, $exibir[‘nome’], por exemplo, esse “nome” é um atributo ou coluna da tabela USUARIO da nossa base de dados. As opções de ALTERAR e EXCLUIR envolvem, respectivamente, janela POPUP e janela ALERT de confirmação de exclusão. 47


Tela de cadastro de usuário É o formulário onde os dados do usuário serão cadastrados. Através da “action” do formulário a página que fará o processamento desse formulário será chamada, com o nome escolhido, neste caso, de “processa_cadastro.php”. Veja:

A 2ª linha faz requisição ao servidor para fazer os procedimentos somente pelo método POST. 48


As linhas de 4 a 6 armazenam em variáveis os dados preenchidos no formulário, utilizando-se de funções nativas como htmlentities (transforma caracteres de acentuação e outros em entidades HTML) e o parâmetro ENT_QUOTES (conversão de aspas). A linha 8 inclui o arquivo de configuração do banco de dados. Da linha 10 até a linha 14 são realizadas consultas de registros nas tabelas USUARIO e EMAIL. O objetivo é saber se já existe algum registro igual ao que o usuário está preenchendo no momento, para que não haja redundância de dados. A linha 16 atribui à variável $dados um array com todas as variáveis que armazenam dados resgatados no formulário. A partir da linha 20 são feitas as condições, dentro de um switch-case. A 1ª condição verifica se o usuário já existe pelo número de CPF (linhas 20 a 23). A 2ª condição verifica se o email já existe (linhas 25 a 28). Das linhas 30 a 33 é verificado se o campo nome foi preenchido no formulário. Das linhas 35 a 38 usou-se uma expressão regular, que verifica se o CPF foi digitado corretamente. Parte-se do princípio que um CPF tem o seguinte formato: 999.999.999-99.

Usa-se a função nativa “preg_match(expressão, parametro)” para validar campos com determinada ordem de strings. Neste exemplo, podemos observar que a função afirma: “se ! preg_match, ou seja, se o campo não respeitar a ordem de strings que serão colocadas a seguir, exibir um erro”. CPF será um campo alfanumérico, ou seja, terão números e caracteres como ponto (.) e traço (-). Logo, no 1º colchete [0-9] é colocada uma numeração de 0 a 9, seguido de chaves {3}, indicando, portanto, que só devem ser exibidos números nos três primeiros caracteres antes do 1º ponto, que é antecedido obrigatoriamente por um sinal de escape (\). Logo depois, repete-se o mesmo processo (três dígitos seguidos de um ponto) e no último, um traço, indicando literalmente um traço antes dos dois caracteres numéricos finais. Das linhas 40 a 43, validação de email, através da função nativa “filter_var”, seguida da variável que indica o email e o parâmetro pré-definido “FILTER_VALIDATE_EMAIL”. A linha 45 quer dizer: “Se não houver mais erros, faça os procedimentos”. O 1º procedimento é inserir usuário, indicado na linha 47. A tabela email também precisa ser preenchida. Mas como, se ela tem um campo chave estrangeira da tabela USUARIO que não foi preenchido pelo usuário? 49


Um “segredo” para isso é pegar o ID do último registro inserido na tabela USUARIO (que aconteceu nesse instante). Essa consulta é realizada na linha 49. A consulta é feita e a linha 52 resgata esse dado e guarda na variável $id_usuario, para, aí sim, na linha 55, ser feito o “insert” na tabela EMAIL.

Tela de alteração Na página index.php, aparecem os links para EXCLUIR e ALTERAR os dados. Vamos nos atentar para tela deste último. Para alterar os dados, o programa deverá saber o campo chave primária a ser mudado: o ID. Mas o usuário não sabe e nem deve saber o ID do usuário porque não lhe interessa. O usuário sempre vai preferir tudo “mastigado”. Desta forma, na tela index.php, já indicamos a abertura de uma janela popup referenciando o parâmetro ID a ser passado pelo link. Assim sendo, quando o usuário clicar no ícone de alteração, já vai abrir uma janela popup com o ID referenciado na URL ou endereço. Veja o trecho:

Perceba o trecho ampliado abaixo:

Veja o código da tela alterar.php:

Repare que na linha 12 iremos passar para o formulário que processará essa alteração um parâmetro de um campo oculto. Isso porque, esse campo, irá assumir o valor resgatado da chave primária, o ID. Observe a página que irá processar a alteração, coincidentemente com o nome alteracao.php: 50


E finalmente, a página de exclusão: deletar.php: Esta página também é referenciada por um link dinâmico na página index.php, que usa uma alert javascript para confirmar exclusão do registro. Veja:

OBS.: os links dinâmicos também são chamados de “Query Strings”. 51


O “@” em PHP é um operador de controle de erro. Quando este sinal precede uma palavra reservada da linguagem ou precede uma variável (antes do ‘dólar’ - $) qualquer mensagem de erro será ignorada. Primeiramente é excluído o registro da tabela dependente, no caso, a tabela EMAIL. Por último são excluídos os registros da tabela USUARIO.

52


REFERÊNCIAS BIBLIOGRÁFICAS PHP 5 – Conceitos, Programação e integração com Banco de Dados - Soares, William. Editora Érica. SQL – Curso Prático - Oliveira, Carlos Henrique Poderoso. Editora Novatec.

53


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.