Você está na página 1de 92

Programao para Web

Jean Eduardo Glazar

Curso Tcnico em Informtica

Programao para Web


Jean Eduardo Glazar

IFES Instituto Federal do Esprito Santo 2011

Presidncia da Repblica Federativa do Brasil Ministrio da Educao Secretaria de Educao a Distncia

Instituto Federal do Esprito Santo Este Caderno foi elaborado em parceria entre o Instituto Federal do Esprito Santo e a Universidade Federal de Santa Catarina para o Sistema Escola Tcnica Aberta do Brasil e-Tec Brasil.
Equipe de Elaborao Instituto Federal do Esprito Santo IFES Coordenao Institucional Guilherme Augusto de Morais Pinto/IFES Joo Henrique Caminhas Ferreira/IFES Coordenao Curso Allan Francisco Forzza Amaral/IFES Professor-autor Jean Eduardo Glazar/IFES Comisso de Acompanhamento e Validao Universidade Federal de Santa Catarina UFSC Coordenao Institucional Araci Hack Catapan/UFSC Coordenao do Projeto Silvia Modesto Nassar/UFSC Coordenao de Design Instrucional Beatriz Helena Dal Molin/UNIOESTE e UFSC Coordenao de Design Grco Andr Rodrigues/UFSC Design Instrucional Juliana Leonardi/UFSC Web Master Rafaela Lunardi Comarella/UFSC Web Design Beatriz Wilges/UFSC Mnica Nassar Machuca/UFSC Diagramao Andr Rodrigues/UFSC Brbara Zardo/UFSC Juliana Tonietto/UFSC Marlia C. Hermoso/UFSC Reviso Jlio Csar Ramos/UFSC Projeto Grco e-Tec/MEC

G553p Glazar, Jean Eduardo Programao para web : Curso tcnico em informtica / Jean Eduardo Glazar. Colatina: IFES, 2011. 102 p. : il.

ISBN: 978-85-62934-37-7 1. PHP (Linguagem de programao de computador). 2. Banco de dados. 3. Sites da Web Desenvolvimento. I. Glazar, Jean Eduardo. II. Instituto Federal do Esprito Santo. III. Ttulo. CDD: 005.133

Apresentao e-Tec Brasil


Prezado estudante, Bem-vindo ao e-Tec Brasil! Voc faz parte de uma rede nacional pblica de ensino, a Escola Tcnica Aberta do Brasil, instituda pelo Decreto n 6.301, de 12 de dezembro 2007, com o objetivo de democratizar o acesso ao ensino tcnico pblico, na modalidade a distncia. O programa resultado de uma parceria entre o Ministrio da Educao, por meio das Secretarias de Educao a Distancia (SEED) e de Educao Prossional e Tecnolgica (SETEC), as universidades e escolas tcnicas estaduais e federais. A educao a distncia no nosso pas, de dimenses continentais e grande diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao garantir acesso educao de qualidade, e promover o fortalecimento da formao de jovens moradores de regies distantes, geogracamente ou economicamente, dos grandes centros. O e-Tec Brasil leva os cursos tcnicos a locais distantes das instituies de ensino e para a periferia das grandes cidades, incentivando os jovens a concluir o ensino mdio. Os cursos so ofertados pelas instituies pblicas de ensino e o atendimento ao estudante realizado em escolas-polo integrantes das redes pblicas municipais e estaduais. O Ministrio da Educao, as instituies pblicas de ensino tcnico, seus servidores tcnicos e professores acreditam que uma educao prossional qualicada integradora do ensino mdio e educao tcnica, capaz de promover o cidado com capacidades para produzir, mas tambm com autonomia diante das diferentes dimenses da realidade: cultural, social, familiar, esportiva, poltica e tica. Ns acreditamos em voc! Desejamos sucesso na sua formao prossional! Ministrio da Educao Janeiro de 2010
Nosso contato etecbrasil@mec.gov.br

e-Tec Brasil

Indicao de cones
Os cones so elementos grcos utilizados para ampliar as formas de linguagem e facilitar a organizao e a leitura hipertextual. Ateno: indica pontos de maior relevncia no texto.

Saiba mais: oferece novas informaes que enriquecem o assunto ou curiosidades e notcias recentes relacionadas ao tema estudado. Glossrio: indica a denio de um termo, palavra ou expresso utilizada no texto. Mdias integradas: sempre que se desejar que os estudantes desenvolvam atividades empregando diferentes mdias: vdeos, lmes, jornais, ambiente AVEA e outras. Atividades de aprendizagem: apresenta atividades em diferentes nveis de aprendizagem para que o estudante possa realiz-las e conferir o seu domnio do tema estudado.

e-Tec Brasil

Sumrio
Palavra do professor-autor Apresentao da disciplina Projeto instrucional Aula 1 A linguagem PHP 1.1 O que PHP? 1.2 Instalao 1.3 Sintaxe bsica 1.4 Como testar uma pgina em PHP 1.5 Variveis e tipos 1.6 Operadores 1.7 Estruturas de controle 1.8 Array 1.9 Funes Aula 2 Recebendo dados do formulrio 2.1 Mtodos GET e POST 2.2 Obtendo e validando os dados 2.3 Upload de arquivos 9 11 13 15 15 16 19 21 23 24 25 28 29 31 31 32 36

2.4 Headers 39 Aula 3 Acesso, insero e listagem no banco de dados MySQL 3.1 Criando o banco de dados 3.2 Conectando ao banco de dados 3.3 Inserindo dados 3.4 Listando os dados 3.4.1 Formulrio dinmico Aula 4 Consulta, excluso e alterao no banco de dados MySQL 4.1 Consultando no banco de dados MySQL 4.2 Excluindo no banco de dados MySQL 4.3 Alterando no banco de dados MySQL 43 44 44 47 52 54 57 57 60 62 7

e-Tec Brasil

Aula 5 Gerenciando sesses 5.1 Criando uma sesso 5.2 Manipulando as variveis de uma sesso 5.3 Excluindo a sesso 5.4 Caso de uso: autenticando usurios 5.4.3 Fazer logout Aula 6 Caso de uso: aplicao utilizando o padro MVC 6.1 O que MVC? 6.2 Estrutura do MVC 6.3 Alterando nosso sistema para o MVC Referncias Currculo do professor-autor

73 74 74 75 75 78 79 79 80 81 89 90

e-Tec Brasil

Programao para Web

Palavra do professor-autor
Ol! Estudante! um prazer t-lo conosco. Apesar de se tratar de um curso a distncia, voc no est sozinho nesta jornada. importante que voc conhea toda a equipe envolvida neste curso: coordenadores, professores especialistas, tutores a distncia e tutores presenciais, porque quando precisar de algum tipo de ajuda saber a quem recorrer. Alm disso, temos nossa disposio um ambiente virtual cheio de recursos que podem nos auxiliar neste processo. A Educao a Distncia (EaD), pela sua caracterstica de amplitude e pelo uso de tecnologias modernas, representa uma nova forma de aprender, respeitando sempre o ritmo de aprendizado de cada aluno. Na EaD voc o grande responsvel pelo sucesso da aprendizagem. Seu desempenho ser mais proveitoso medida que for resolvendo os exerccios propostos e participando das discusses com os tutores e demais colegas de curso. Aprender programao requer dedicao e tempo; portanto, organize seu plano de estudo reservando um tempo todos os dias para os estudos, para que as atividades no acumulem. Desejo-lhe sucesso e dedicao! Um grande abrao! Prof. MSc. Jean Eduardo Glazar

e-Tec Brasil

Apresentao da disciplina
Nesta disciplina estudaremos programao para web sob o enfoque do servidor, ou seja, depois de enviado algum dado a partir de uma pgina em HTML. Esta disciplina uma continuao de Fundamentos do Desenvolvimento Web (FDW). Vrias so as linguagens para criao de sistemas web. Vamos nos focar na linguagem PHP, por ser uma linguagem de fcil aprendizado, comparada com as demais, e bastante popular. Como uma linguagem de programao, todos os conceitos aprendidos at agora sero bastante utilizados. Tambm trabalharemos com banco de dados, armazenando e manipulando as informaes via pginas web. Nesse momento, ser muito til o conhecimento adquirido da disciplina Banco de Dados (BD). Por m, veremos uma arquitetura para sistemas web como forma de organizarmos melhor as pginas de um sistema, com a nalidade de obtermos produtividade no desenvolvimento e facilitarmos a manuteno posterior. Lembre-se, a melhor forma de aprender programao praticando!

11

e-Tec Brasil

Projeto instrucional
Disciplina: Programao para Web (carga horria: 60 h). Ementa: Linguagem para estilos. Metalinguagem. Construo de pginas dinmicas. Integrao com banco de dados.
OBJETIVOS DE APRENDIZAGEM
CARGA HORRIA (horas)

AULA

MATERIAIS
Caderno impresso.

Comparar as vantagens e desvantagens do PHP em relao a outras linguagens. Instalar e congurar o ambiente de desenvolvimento web. Conhecer a sintaxe da linguagem PHP. Construir pginas web com PHP.

Ambiente Virtual de Ensino-aprendizagem (AVEA). Sites dos programas de instalao: http://www.php.net/downloads http://www.apache.org http://www.wampserver.com http://www.easyphp.org http://netbeans.org

1. A Linguagem PHP

10

Entender como os dados de um formulrio so manipulados em um servidor com PHP. 2. Recebendo dados do formulrio Aprender e exercitar o envio de um arquivo para o servidor a partir de uma pgina web. Conhecer a forma de gerenciar as informaes de uma conexo com o servidor.

Caderno impresso. Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans).

10

Caderno impresso. Conhecer como o PHP interage com o banco de dados. 3. Acesso, insero e listagem no banco de dados MySQL Construir pginas web para inserir dados em um banco de dados. Construir pginas web para recuperar informaes do banco de dados. Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). Gerenciador de banco de dados (MySQL). 10

13

e-Tec Brasil

AULA

OBJETIVOS DE APRENDIZAGEM

MATERIAIS
Caderno impresso.

CARGA HORRIA (horas)

4. Consulta, excluso e alterao no banco de dados MySQL

Aprender como realizar uma consulta ltrando por determinado campo. Aprender a excluir e a alterar um registro no banco de dados a partir de pginas web em PHP.

Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). Gerenciador de banco de dados (MySQL). Caderno impresso. 10

Aprender para que serve uma sesso em um sistema web e como program-la. 5. Gerenciando sesses Aprender a como utilizar a sesso para autenticar usurios. Construir pginas web para autenticar os usurios.

Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). Gerenciador de banco de dados (MySQL). Caderno impresso. Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). 10

6. Caso de uso: desenvolvendo uma aplicao utilizando o padro MVC

Conhecer o padro de desenvolvimento de sistemas web MVC. Construir um sistema web no padro MVC.

10

e-Tec Brasil

14

Programao para Web

Aula 1 A linguagem PHP


Objetivos
Comparar as vantagens e desvantagens do PHP em relao a outras linguagens. Instalar e congurar o ambiente de desenvolvimento web. Conhecer a sintaxe da linguagem PHP. Construir pginas web com PHP.

1.1 O que PHP?


PHP uma linguagem que permite criar sites web dinmicos, fundamentada nos dados submetidos pelo usurio e derivada dos dados contidos no banco de dados, que so alterados frequentemente. Vamos pegar o exemplo de uma loja virtual. Os produtos esto sempre sofrendo alteraes, seja no preo, na quantidade em estoque, nos produtos em promoes, nos lanamentos, etc. Hoje, quando voc entra em uma loja virtual, ver alguns produtos em promoo, outros em lanamentos, com um determinado preo. Na prxima semana que voc visitar o site, pode ser que os preos estejam mais baixos, por causa de novas promoes, ou aquele produto que voc tinha visto no se encontre mais em estoque, j tenha sido vendido. Passaremos a programar para web sob a viso do servidor. Para isso, utilizaremos a linguagem PHP. Como pr-requisito, necessrio o conhecimento de HTML, principalmente de formulrio, que ser utilizado para enviar dados para o servidor. Portanto extremamente importante que voc revise o contedo visto em Fundamentos do Desenvolvimento Web. O cdigo PHP executado no servidor, sendo enviado para o cliente apenas HTML. Dessa maneira possvel interagir com bancos de dados e aplicaes existentes no servidor, com a vantagem de no expor o cdigo fonte para o cliente.

Aula 1 A linguagem PHP

15

e-Tec Brasil

Pesquise sobre as outras linguagens de programao web e discuta com os colegas e tutores, no ambiente virtual de ensino-aprendizagem, destacando as vantagens e desvantagens de cada uma.

O PHP foi criado em 1995 por Rasmus Lerdorf com o nome de Personal Home Page Tools (Ferramentas Para Pgina Pessoal), para auxiliar no desenvolvimento de pginas simples. Como teve boa aceitao e muitos programadores utilizando-as, novas verses foram desenvolvidas com cada vez mais recursos. Existem outras linguagens de programao que podemos utilizar para criar as pginas dinmicas, como Java, Perl, ASP, etc.

1.2 Instalao
servidor web um programa de computador responsvel por aceitar pedidos HTTP de clientes, geralmente os navegadores, e servi-los com pginas de respostas (em HTML) incluindo dados, imagens, sons e links. Esse programa disponibiliza um local especco no computador servidor (site) para armazenar e processar as pginas de resposta. Apache o resultado de um esforo coletivo de vrios colaboradores, para o desenvolvimento de um software gratuito, robusto e com qualidade, para a implementao de um servidor HTTP. o servidor web mais usado no mundo. capaz de executar cdigos em PHP, Perl, Shell Script, ASP, dentre outros. Sua utilizao mais conhecida a que combina o Apache com a linguagem PHP e o banco de dados MySQL.

Para testar as pginas PHP, no basta dar um duplo clique nos arquivos. php, como se faz com os .htm ou .html. necessrio ter um servidor web congurado para isso. Um dos servidores web mais utilizados o Apache.

1.2.1 Instalao no Windows


Voc pode instalar o Apache e o PHP separados. Para isso basta pegar os arquivos de instalao nos respectivos sites ociais. Porm, conguraes manuais devero ser feitas para os dois funcionarem perfeitamente. A forma mais fcil de instalar utilizar pacotes que instalam e conguram todos os programas necessrios para o desenvolvimento de pginas web de uma nica vez. Um conjunto muito utilizado consiste do Apache (servidor web), MySQL (banco de dados) e PHP (linguagem para as pginas web dinmicas), conhecido como AMP (inicial de cada produto). Quando esses produtos so instalados no Linux, chamamos de LAMP. Quando so instalados no Windows, chamamos de WAMP.

1.2.2 Instalao no Linux (Ubuntu)


Para mais detalhes sobre o Apache, acesse o site ocial: http://www.apache.org Os principais instaladores so: WAMP5 (http://www. wampserver.com) e EasyPHP (http://www.easyphp.org).

No Ubuntu tambm podemos instalar os programas separados, usando algum instalador, como o apt-get. Na mesma linha de comando possvel instalar todos os pacotes necessrios, basta digitar: sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysql php5-mysql Nas verses mais novas do Ubuntu, tambm possvel instalar um pacote com todos os programas. O comando : sudo tasksel install lamp-server

Faa o download do Apache e instale o software em seu computador: http://www.apache.org Aps instalar o Apache, faa o download do PHP e instale-o: http://www.php.net/downloads

e-Tec Brasil

16

Programao para Web

Depois da instalao ser necessrio reinicializar o Apache. Para isso digite: sudo /etc/init.d/apache2 restart

1.2.3 Testando o ambiente


Em qualquer instalao, seja no Windows ou no Linux, um diretrio especco ser criado para colocar as pginas em PHP, chamado www. Quando o Apache recebe uma solicitao para exibir uma pgina, ele ir buscar nesse diretrio. No Windows, o diretrio www ca dentro do diretrio de instalao do produto. Por exemplo, se voc usou o EasyPHP, o diretrio : C:\Arquivos de programas\EasyPHP-5.3.2\www O diretrio EasyPHP pode mudar de nome de acordo com a verso instalada. No Linux, o diretrio : /var/www Podem ser criados subdiretrios dentro do diretrio www. at recomendado que se faa isso, para organizar melhor as pginas. Para testar o ambiente, primeiro devemos vericar se os programas esto em execuo. Voc pode congur-los para iniciar automaticamente, quando o computador for ligado, ou manualmente. Tanto o WAMP5 quanto o EasyPHP colocam um cone prximo ao relgio que contm as opes para inicializar (start) ou parar (stop) os processos. No WAMP5, o cone parecido com um velocmetro de um carro. No EasyPHP, o cone o desenho de letra E. Na Figura 1.1 vemos o exemplo do WAMP5 e na Figura 1.2 vemos o exemplo do EasyPHP.

Para mais detalhes sobre instalao no Linux: https:// help.ubuntu.com/community/ ApacheMySQLPHP

Figura 1.1: Exemplo do menu de opes do WAMP5


Fonte: WAMP5 (2010) instalado no Microsoft Windows XP

Aula 1 A linguagem PHP

17

e-Tec Brasil

Figura 1.2: Exemplo do menu de opes do EasyPHP


Fonte: EasyPHP 5.3.2 (2010) instalado no Microsoft Windows XP

Agora vamos criar um arquivo com extenso .php (teste.php, por exemplo) na pasta base www. Abra-o com qualquer editor de texto e digite: <?php phpinfo(); ?> Salve-o e em seguida digite em seu navegador favorito o seguinte endereo: http://localhost/teste.php. teste.php o nome do arquivo PHP que voc criou. localhost signica que o seu navegador ir procurar o arquivo no seu prprio computador, no diretrio www congurado na instalao. Na internet, como o servidor est em outro local, substitui-se localhost pelo endereo web da empresa, como por exemplo: http://www.empresaxyz.com.br/cadastro.php Se a instalao estiver correta, uma tela com informaes sobre a congurao do PHP dever ser exibida, como indicado pela Figura 1.3 a seguir.

Figura 1.3: Instalao do PHP com sucesso


Fonte: EasyPHP 5.3.2 instalado no Microsoft Windows XP, exibido pelo Mozilla Firefox 3.5

e-Tec Brasil

18

Programao para Web

1.3 Sintaxe bsica


O cdigo do PHP embutido dentro de um arquivo HTML, quando for necessrio algum processamento pelo servidor. Depois que o servidor processar o cdigo PHP, apenas o que for gerado em HTML ser enviado de volta para o usurio; assim, o usurio no conseguir ver o cdigo em PHP, que car apenas no servidor. A Figura 1.4 ilustra o funcionamento de uma pgina web dinmica.
1 Navegador

HTTP HTML
5

2 Executa 4 Servidor Web APACHE Mdulo PHP Pginas .PHP

Banco de Dados

Figura 1.4: Funcionamento de uma pgina dinmica PHP


Fonte: Equipe produo CEAD/IFES (2011)

Passo 1 O usurio em seu navegador solicita uma pgina em PHP, por exemplo, consulta.php. Essa solicitao enviada pelo protocolo HTTP ao servidor web da empresa (por exemplo, o Apache). Passo 2 O Apache chama a pgina PHP que foi solicitada e a executa. Passo 3 A pgina PHP pode ou no fazer acesso ao banco de dados. Passo 4 Ao nal da execuo do programa PHP, uma pgina de resposta em HTML enviada ao Apache. Passo 5 O Servidor web Apache repassa a pgina de resposta para o navegador que a solicitou, que a exibe. Para diferenciar o cdigo PHP dentro da pgina em HTML, podem ser utilizados os delimitadores descritos na Figura 1.5 a seguir.
1) <?php Comandos; ?> 3) <script language=php> Comandos; </script> 2) <? Comandos; ?> 4) <% Commandos; %>

Figura 1.5: Delimitadores de cdigo em PHP


Fonte: Elaborada pelo autor

Aula 1 A linguagem PHP

19

e-Tec Brasil

O primeiro delimitador da Figura 1.5 o padro. O segundo uma simplicao do primeiro. Esses so os mais usados. O terceiro segue o estilo de scripts em HTML. O quarto segue o estilo do ASP. Para utilizar a forma simplicada, bem como o estilo ASP, o arquivo de congurao php.ini deve ser alterado, pelos campos short_open_tags e asp_tags, respectivamente. A Figura 1.6 mostra a estrutura de uma pgina HTML com o cdigo PHP embutido.

Figura 1.6: Exemplo de estrutura de uma programao de uma pgina em PHP


Fonte: Elaborada pelo autor

Pode haver vrios blocos de PHP misturados com vrios trechos de HTML.

1.3.1 Gerando cdigo em HTML


comando echo a instruo que envia para a pgina de sada, em HTML, as informaes processadas em PHP, podendo ser texto, nmeros ou variveis. Essas informaes, na maioria das vezes, so mescladas com os comandos HTML.

Como o cdigo PHP processado no servidor e apenas o HTML enviado como resposta, utilizaremos o comando echo para gerar esse HTML. Veja o exemplo da Figura 1.7 a seguir.

Figura 1.7: Exemplo de programa utilizando o comando echo


Fonte: Elaborada pelo autor

e-Tec Brasil

20

Programao para Web

1.4 Como testar uma pgina em PHP


Existem vrios editores de PHP. Dentre os gratuitos, recomenda-se o PHPEditor. Porm, vamos utilizar um ambiente de desenvolvimento mais moderno, que engloba vrias linguagens e que est sempre em atualizao, o NetBeans. Para vericar se o seu NetBeans possui o mdulo PHP instalado, basta acessar Ferramentas->Plug-ins e vericar, na aba Instalado, se o PHP se encontra ativado; seno, ative-o. Se no estiver na aba Instalado, procure-o na aba Plug-ins disponveis e instale-o ( preciso estar conectado internet). Todos os arquivos devem ser salvos com a extenso .php no diretrio www da instalao do servidor web. Crie subdiretrios dentro do www para melhor organizar seus arquivos. Os subdiretrios dentro do diretrio www devem ter permisso de gravao e escrita. O primeiro passo abrirmos o NetBeans e criarmos um novo projeto. Para isso, realize os seguintes passos: 1. Clique em Arquivo > Novo Projeto. 2. Dentre as opes Categorias da janela aberta, escolha PHP. Dentro de Projetos, escolha Aplicativo PHP. Clique em Prximo. 3. Escolha um nome para o projeto (por exemplo, MeuSitePHP). 4. Na Pasta de cdigos-fonte, escolha o diretrio www, ou algum subdiretrio dentro deste, por exemplo, C:/Arquivos de Programas/ EasyPHP/www/ProgWeb. No Linux seria /var/www/ProgWeb. Clique em Finalizar. Aps criarmos o projeto, ele passa a ser exibido na aba Projetos, que ca no canto esquerdo do NetBeans. Para criar os arquivos em PHP, siga os seguintes passos:
Para mais detalhes sobre o NetBeans e para fazer o download da sua instalao, acesse: http://netbeans.org

Aula 1 A linguagem PHP

21

e-Tec Brasil

1. Na aba de Projetos, clique com o boto direito do mouse no nome de nosso projeto. 2. Escolha as opes Novo > Pgina da Web do PHP. 3. Escolha um nome para a pgina com a extenso .php (por exemplo, PrimeiraPagina.php). Clique em Finalizar. PRONTO!!! Voc j pode programar em PHP. A Figura 1.8 apresenta um trecho da tela mostrada aps a realizao dos passos acima.

Figura 1.8: Criando uma pgina PHP no NetBeans


Fonte: NetBeans IDE 6.8 instalado no Microsoft Windows XP

Voc tambm pode, e deve, criar subdiretrios dentro do seu projeto, para organizar melhor as suas pginas.
Uma arquitetura para desenvolvimento web que organiza a programao das pginas de um sistema, com o objetivo de aumentar a produtividade e facilitar a manuteno, ser vista na Aula 6.

Para criar subdiretrios no NetBeans, siga os passos: 1. Clique com o boto direito do mouse no nome do projeto. 2. Escolha as opes Novo > Diretrio. 3. Escolha um nome para o diretrio. Clique em Finalizar. Quando for criar novas pginas PHP, clique em cima do diretrio no qual deseja colocar as pginas.

e-Tec Brasil

22

Programao para Web

Depois de programar e salvar o arquivo, vamos test-lo. Para isso, abra seu navegador favorito e digite: http://localhost/nomedoarquivo.php, em que: localhost corresponde ao seu computador local; e nomedoarquivo.php nome que voc deu no seu arquivo PHP (no nosso exemplo, PrimeiraPagina.php). Se o servidor web estiver em outro computador, ento troque localhost pelo IP (ou hostname) desse servidor. Caso tenha criado subdiretrios, ento acrescente no endereo do navegador os subdiretrios criados. Exemplo: http://localhost/ProgWeb/cadcliente.php Nesse exemplo foi criado o subdiretrio ProgWeb e dentro dele foi colocada a pgina cadcliente.php.

1.5 Variveis e tipos


As variveis em PHP no precisam ser declaradas. Quando atribumos algum valor para elas, o tipo automaticamente reconhecido. Os tipos suportados so: Inteiros (integer ou long); Reais (oat ou double); Strings; Array (vetores); Objetos*. * Como se trata de um curso bsico, a programao orientada a objetos em PHP no ser vista. Os nomes das variveis devem ser criados com um $ seguido de uma string que deve ser inicializada por uma letra ou _. Exemplos: $x = 10.4; $frase = Exemplo de varivel string; $_cont = 0;

Aula 1 A linguagem PHP

23

e-Tec Brasil

O PHP case sensitive, ou seja, letras maisculas so diferentes de minsculas. Portanto, para facilitar, criem as variveis sempre em minsculo. Os comentrios podem ser de uma linha, utilizando o smbolo //, ou de mais linhas, delimitado pelos smbolos /* e */. Exemplos: $cont = 0; // Exemplo de comentrio de uma linha /* Exemplo de comentrio com mais de uma linha. Preste ateno nos smbolos delimitadores. */

1.6 Operadores
Os principais operadores em PHP esto descritos nos quadros a seguir: os operadores aritmticos podem ser vistos no Quadro 1.4, os operadores lgicos esto descritos no Quadro 1.5, os operadores de comparao so mostrados no Quadro 1.6 e demais operadores importantes esto no Quadro 1.7 a seguir. Quadro 1.4: Operadores aritmticos
+ * / Adio Subtrao Multiplicao Diviso

% Mdulo (resto da diviso) Fonte: Elaborado pelo autor

Quadro 1.5: Operadores lgicos


And Or Xor ! && E Ou Ou exclusivo Negao E

|| Ou Fonte: Elaborado pelo autor

e-Tec Brasil

24

Programao para Web

Quadro 1.6: Operadores de comparao


== != < > <= Igual a Diferente de Menor que Maior que Menor ou igual a

>= Maior ou igual a Fonte: Elaborado pelo autor

Quadro 1.7: Outros operadores importantes


= ++ Concatenao de strings Atribuio Incremento (soma 1)

-Decremento (subtrai 1) Fonte: Elaborado pelo autor

1.7 Estruturas de controle


As estruturas de controle servem para controlar a ordem de execuo das instrues de um programa. As principais so as de seleo e repetio.

1.7.1 Comandos de seleo


Os comandos de seleo servem para escolher um determinado bloco de comandos a partir da avaliao de uma expresso. Os comandos de seleo so: if (e suas variaes) e o switch. Um bloco de comandos delimitado pelos smbolos: { e }. if executa um bloco de comando caso a expresso seja verdadeira (se.. ento). Veja um exemplo na Figura 1.9.

Figura 1.9: Exemplo do comando if


Fonte: Elaborada pelo autor

if...else executa o primeiro bloco de comandos se a expresso for verdadeira e o bloco do else caso a expresso seja falsa. (se...ento...seno). A Figura 1.10 mostra um exemplo.

Aula 1 A linguagem PHP

25

e-Tec Brasil

Figura 1.10: Exemplo do comando if...else


Fonte: Elaborada pelo autor

if...elseif...else o elseif utilizado quando vrias condies precisam ser analisadas. Para cada elseif, uma nova expresso deve ser analisada. Quando todas as expresses forem falsas, ento o ltimo bloco else ser executado. Exemplo na Figura 1.11 a seguir.

Figura 1.11: Exemplo do comando if... elseif... else


Fonte: Elaborada pelo autor

switch funciona semelhante a vrios if juntos. Uma expresso ou varivel analisada e, de acordo com o valor, um entre vrios blocos de comandos executado. Diferentemente do if, cuja expresso somente retorna verdadeiro ou falso, no switch o valor retornado pode ser diverso. A expresso comparada com cada uma das clusulas case at que uma coincida. Quando isso acontece, o bloco de comandos correspondente executado at encontrar o comando break, que interrompe a execuo daquele bloco e naliza o switch. Se nenhuma clusula coincidir, ento o bloco delimitado pelo comando default executado. Na Figura 1.12 temos um exemplo do switch.

Figura 1.12: Exemplo do comando switch


Fonte: Elaborada pelo autor

e-Tec Brasil

26

Programao para Web

1.7.2 Comandos de repetio


Os comandos de repetio servem para executar repetidas vezes o mesmo bloco de comandos, at que uma condio de parada seja atingida. Os comandos so: while,do...while e for. A diferena entre eles est na condio de parada das repeties e no contador de iterao. while a condio de parada testada no incio da iterao. Se for verdadeira, repete o bloco de comandos; se for falsa, interrompe as repeties. Exemplo na Figura 1.13.

Figura 1.13: Exemplo do while


Fonte: Elaborada pelo autor

do...while funciona de maneira semelhante ao while; a diferena que a condio testada depois do bloco de comandos. Isso garante que pelo menos uma vez o bloco de comandos ser executado. Veja um exemplo na Figura 1.14 a seguir.

Figura 1.14: Exemplo do do...while


Fonte: Elaborada pelo autor

for utilizado quando se conhece a quantidade total de iteraes ou quando se pretende contar essas iteraes. Sua sintaxe : for (inicializao; condio; incremento) { . . } Em que: Inicializao uma instruo de atribuio executada apenas uma vez, no incio do lao. Geralmente utilizada para inicializar a varivel que ir controlar o nmero de repeties do lao. Condio a expresso que controla a parada das repeties. Se for verdadeira, o bloco de comandos executado novamente; se for falsa, termina.

Aula 1 A linguagem PHP

27

e-Tec Brasil

Incremento dene a maneira como a varivel de controle do lao ser alterada a cada vez que o lao for repetido. Ela executada ao nal da execuo de cada repetio do corpo do lao. Veja exemplo na Figura 1.15 a seguir.

Figura 1.15: Exemplo do for


Fonte: Elaborada pelo autor

Atividades de aprendizagem 1.1: Crie um cdigo em PHP que exiba uma sequncia de nmeros de 1 a 100. Os nmeros pares devem ser formatados em negrito e os nmeros mpares em itlico.

1.8 Array
Os arrays so estruturas para armazenar valores que precisam ser indexados. Diferentemente do C, em que os ndices so apenas nmeros inteiros e consecutivos, em PHP os ndices podem ser de vrios tipos. Mesmo se forem inteiros no precisam ser consecutivos. Os valores armazenados no precisam ser do mesmo tipo. Veja um exemplo na Figura 1.16, onde print_r mostra todos os elementos do array.

Figura 1.16: Exemplo do array


Fonte: Elaborada pelo autor

Perceba que podemos trabalhar com ndices diferentes em um mesmo array. Outra forma semelhante para inicializar o array pode ser vista na Figura 1.17, que idntica a da Figura 1.16 a seguir.

e-Tec Brasil

28

Programao para Web

Figura 1.17: Outra forma de inicializar o array


Fonte: Elaborada pelo autor

Para mais detalhes sobre funes para manipulao de arrays, consulte: SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007.

Crie um array e preencha com alguns estados, indexados pela sigla, como no programa na Figura 1.16. Faa uma funo que receba esse array e uma sigla como parmetro e mostre o nome do estado.

1.9 Funes
As funes em PHP seguem o mesmo princpio das de outras linguagens. A diferena que como no precisamos declarar os tipos, a lista de parmetros possui apenas o nome das variveis. As funes que retornam valor tambm no precisam informar o tipo de retorno. A sintaxe : function nome_funo (lista de parmetros) { ... } Para organizar melhor o cdigo, as declaraes das funes cam dentro do bloco <HEAD>, em uma pgina HTML. As chamadas das funes cam no <BODY>. Veja exemplos de funes na Figura 1.18 a seguir.

Figura 1.18: Exemplos de funes


Fonte: Elaborada pelo autor

Aula 1 A linguagem PHP

29

e-Tec Brasil

Por denio, a passagem de parmetros por valor. Caso se queira passar os parmetros por referncia, para alterar uma varivel dentro da funo, utiliza-se o smbolo & antes do parmetro. Veja a Figura 1.19 a seguir.

Figura 1.19: Exemplo de funo com passagem de parmetro por referncia


Fonte: Elaborada pelo autor

Com os conceitos e comandos aprendidos nesta aula possvel criar pginas web bsicas em PHP. O conhecimento desses comandos de extrema importncia para os demais recursos que sero abordados nas prximas aulas. Portanto, somente passe para a prxima aula se todos esses conceitos e comandos foram entendidos e bem praticados.

Resumo
Leituras complementares: SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007. GUTMANS, Andi; BAKKEN, Stig Saether; RETHANS, Derick. PHP 5: programao ponderosa. Rio de Janeiro: Alta Books, 2005. Links interessantes: http://www.php.net http://www.apache.org http://pt.wikipedia.org/wiki/PHP

Nesta primeira aula vimos como instalar e congurar o servidor web Apache e o mdulo PHP. Aprendemos a sintaxe do PHP e com isso criamos nossa primeira pgina web, ainda sem muitos recursos e sem interatividade. Na prxima aula entenderemos como os dados de um formulrio so manipulados em um servidor com PHP, aprenderemos a enviar um arquivo para o servidor a partir de uma pgina web e conheceremos a forma de gerenciar as informaes de uma conexo com o servidor.

Atividade de aprendizagem
1. Pesquise nos livros os comandos para pegar a data do sistema. Faa uma funo de saudao da sua pgina. Essa funo dever pegar a hora corrente e mostrar na tela a mensagem abaixo, com sua respectiva formatao.

0 <= Hora < 12 BOM DIA (em vermelho) 12 <= Hora < 18 BOA TARDE (em verde) 18 <= Hora < 24 BOA NOITE (em azul)

e-Tec Brasil

30

Programao para Web

Aula 2 Recebendo dados do formulrio


Objetivos
Entender como os dados de um formulrio so manipulados em um servidor com PHP. Aprender e exercitar o envio de um arquivo para o servidor a partir de uma pgina web. Conhecer a forma de gerenciar as informaes de uma conexo com o servidor. Aps o conhecimento da sintaxe dos comandos em PHP, vamos agora criar as pginas dinmicas tratando as informaes obtidas de outras pginas, como por exemplo, de formulrios. A partir de um formulrio em HTML em um navegador, o usurio envia dados para uma pgina no servidor. Aprenderemos os comandos em PHP para capturar esses dados e fazer sua validao. extremamente importante que vocs revisem o contedo de formulrios HTML vistos na disciplina Fundamentos do Desenvolvimento Web.

2.1 Mtodos GET e POST


Na denio de um formulrio em HTML, trs atributos sero importantes para a criao de pginas em PHP no servidor: action, method e enctype. Vejamos um exemplo na Figura 2.1 a seguir.

Figura 2.1: Exemplo de denio de um formulrio em HTML


Fonte: Elaborada pelo autor

Aula 2 Recebendo dados do formulrio

31

e-Tec Brasil

name nome do formulrio. til para referncia em funes javascript. action arquivo no servidor que ser chamado para tratar os dados do formulrio. A pgina em HTML com o formulrio ir passar os dados para o programa PHP especicado por este campo. method mtodo de envio de dados para o servidor. Dois tipos so permitidos GET e POST. Mais detalhes a seguir. enctype dene o formato de como os dados sero enviados para o servidor. Necessrio para o envio de arquivos, que ser tratado mais adiante. Por enquanto, nem precisamos especicar nada. O exemplo acima mostra o valor padro, que pode ser omitido. A diferena entre GET e POST est na forma como os dados so enviados para o servidor. No mtodo POST, os dados so enviados ocultos. o mtodo recomendado quando se utiliza formulrio. J no mtodo GET, os dados so enviados de forma aberta, na URL, na forma do par campo=valor. Para isso, utiliza-se o smbolo ? depois do nome do arquivo. Os pares campo=valor so separados pelo smbolo &. Essa forma de envio utilizada quando temos poucas informaes a serem passadas, e elas podem ser especicadas direto na URL. Utiliza-se principalmente quando queremos passar dados atravs de um link, sem os campos de um formulrio. Exemplo: http://www.xxx.com/cons.php?nome=Joo&cidade=Colatina Nesse exemplo foi utilizado o mtodo GET, que chama o programa cons.php, passando o campo nome igual a Joo e o campo cidade igual a Colatina.
Um exemplo mais real pode ser visto no site do Google. Depois que voc zer uma pesquisa qualquer, verique o endereo que aparece. Perceba que existem vrios pares campo=valor que so passados para o servidor, mas que no tm formulrio para digitar.

2.2 Obtendo e validando os dados


Para enviar dados para o servidor, vamos criar um formulrio como o da Figura 2.2 a seguir. Preste ateno no nome de cada campo. Esse nome ser usado no programa PHP. Veja tambm o atributo action do <FORM>, ele informa o nome do arquivo PHP.

e-Tec Brasil

32

Programao para Web

Figura 2.2: Exemplo de formulrio para envio dos dados


Fonte: Elaborada pelo autor

Aula 2 Recebendo dados do formulrio

33

e-Tec Brasil

Seja passando os dados via POST ou GET, o programa no servidor para capturar e tratar os dados ser o mesmo. Os dados enviados para o programa PHP sero transformados em um array, $_POST, se o mtodo de envio for o POST, e $_GET, se o mtodo de envio foi o GET. Esses vetores so indexados pelos nomes dos campos. Se o mtodo de envio for o POST, os nomes dos campos sero aqueles informados no atributo name dos comandos HTML. Se o envio for por GET, ento o nome dos campos sero aqueles especicados no endereo pelo par campo=valor. Vamos agora criar um arquivo PHP com o mesmo nome dado no action do formulrio (no exemplo cadcliente.php). Nessa pgina, vamos capturar os dados enviados e mostrar uma pgina de resposta com esses dados. Para pegar cada campo, devemos informar qual o array que contm os dados ($_POST ou $_GET) e entre colchetes [ ] o nome do campo, denido no formulrio HTML. Depois de pegar os dados, podemos vericar se foram preenchidos e se esto corretos. Por exemplo: vericar se o campo foi preenchido, vericar datas, validar CPF, vericar se o e-mail vlido, etc. A Figura 2.3 mostra o cdigo que recebe os dados e verica se alguns campos esto preenchidos; caso no estejam, mostra uma mensagem de erro e, por ltimo, exibe na tela os dados informados. Mais adiante aprenderemos a inserir esses dados no banco de dados.

e-Tec Brasil

34

Programao para Web

Figura 2.3: Pgina PHP que recebe os dados


Fonte: Elaborada pelo autor

A Figura 2.4 mostra a pgina exibida pelo programa acima, com os valores digitados no formulrio.
Funes para validar datas, CPF, e-mail, etc. so facilmente encontradas na internet. Veja alguns links: http://codigofonte.uol.com.br/ codigos/php/validacao http://www.revistaphp.com.br http://www.criarweb.com/php http://phpbrasil.com http://www.codigofonte.net/ scripts/php.

Figura 2.4: Resultado do envio de dados


Fonte: Pgina exibida pelo Mozilla Firefox 3.5

Aula 2 Recebendo dados do formulrio

35

e-Tec Brasil

Note que os valores dos campos do tipo ComboBoxe ListBox so os valores denidos no atributo value da opo escolhida (<option>) e no o nome que aparece no formulrio. No exemplo acima, o estado ES. O valor do campo do tipo RadioButton tambm o valor do atributo value. No exemplo acima, o sexo M ou F. Campos do tipo CheckBox retornam true(verdadeiro) se foram marcados e false (falso), caso contrrio. Pesquise na internet as funes para validar data e CPF. Acrescente essas funes ao programa da Figura 2.3 para validar nosso campo CPF e data de nascimento. Informe as mensagens de erro em vermelho.

2.3 Upload de arquivos


Para enviar um arquivo para o servidor, como por exemplo uma foto, precisamos inserir um campo apropriado no formulrio. Esse campo exibe um boto Procurar que abre a janela para escolher um arquivo. O comando : <INPUT type=le name=nome_do_campo> Para testar, vamos acrescentar um campo ao formulrio da Figura 2.2 para fazer o upload de uma foto. Precisamos mudar a tag <FORM>, adicionando o atributo enctype e colocar mais uma linha, depois da conrmao da senha, para fazer o upload da foto. Os comandos alterados e acrescentados esto na Figura 2.5 a seguir. Para o upload funcionar necessrio acrescentar o atributo enctype dentro da tag <FORM>, assim: enctype=multipart/form-data.

Figura 2.5: Formulrio com campo para upload de arquivo


Fonte: Elaborada pelo autor

e-Tec Brasil

36

Programao para Web

Quando o arquivo enviado para o servidor, vrias informaes so armazenadas em um vetor chamado $_FILES, como o nome, o tipo, o tamanho, etc. Para obter esses dados, devemos informar o nome do campo entre colchetes, assim: $arquivo = $_FILES[nome_do_campo]; A varivel $arquivo foi utilizada para receber o arquivo. A partir desse comando, sempre que pretendermos trabalhar com o arquivo, utilizaremos a varivel $arquivo. Diversas informaes podem ser obtidas a partir dessa varivel, como: cdigos de erros, se ocorrerem, tamanho, tipo e o nome temporrio do arquivo. Se ocorrer algum erro no upload, o cdigo de erro ca armazenado no atributo error. O cdigo zero signica que no ocorreu nenhum erro. Para obter esse cdigo, utilize o seguinte comando: $arquivo[error] As vericaes que podemos fazer so em relao ao tamanho, ao tipo do arquivo, etc. No nosso exemplo, vamos vericar se o arquivo uma imagem (gif, jpg, png, bmp) e se o tamanho menor que 100.000 bytes. Os comandos para pegar o tipo e o tamanho do arquivo, respectivamente, so: $arquivo[type] e $arquivo[size]

O arquivo, propriamente dito, quando chega ao servidor, colocado em um diretrio temporrio, congurado no arquivo php.ini. Para mover para o diretrio denitivo, usa-se o seguinte comando: move_uploaded_le($arquivo[tmp_name], destino) em que: $arquivo[tmp_name] pega o nome do arquivo temporrio; e destino diretrio de destino do arquivo. O diretrio de destino deve existir e com permisso para escrita. Se a cpia for realizada com sucesso, esse comando retorna true. Caso ocorra algum erro, como por exemplo, o diretrio de destino no existe ou no tem permisso de gravao, essa funo retornar false.

Aula 2 Recebendo dados do formulrio

37

e-Tec Brasil

A ltima etapa mostrar a foto que foi enviada. Para isso basta colocar a tag <IMG> com o diretrio destino para onde o arquivo foi copiado. A Figura 2.6 mostra o trecho de cdigo para lidar com o upload do arquivo. Esse cdigo deve ser colocado no programa da Figura 2.3, antes da parte que mostra os dados na tela. A Figura 2.7 mostra o resultado do envio dos dados com a imagem.

Figura 2.6: Pgina PHP que trata um arquivo recebido


Fonte: Elaborada pelo autor

e-Tec Brasil

38

Programao para Web

Figura 2.7: Resultado do envio de dados com foto


Fonte: Pgina exibida pelo Mozilla Firefox 3.5

Teste o programa da Figura 2.6.

2.4 Headers
Os headers servem para o gerenciamento da conexo entre o PHP e o navegador do usurio, podendo trocar informaes contidas no cabealho HTTP de uma pgina. Os headers so informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio, e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras informaes.

Aula 2 Recebendo dados do formulrio

39

e-Tec Brasil

A sintaxe da funo header: header(cabealho) Em que: cabealho um comando j denido para indicar o tipo de cabealho HTTP a ser usado. Por exemplo, o cabealho HTTP/ indica que um cdigo de retorno enviado para o navegador do cliente. O exemplo na Figura 2.8 mostra o envio de uma mensagem de Pgina no encontrada:

Figura 2.8: Exemplo do envio de uma mensagem usando o header


Fonte: Elaborada pelo autor

Uma segunda forma de usar o header para redirecionar para outra pgina. Esse comando muito til para, ao nal de uma pgina puramente em PHP, redirecionar para outra pgina padronizada de resposta ou de erro. Usa-se o comando Location e logo em seguida o nome da pgina que se pretende redirecionar. Veja um exemplo na Figura 2.9:

Figura 2.9: Exemplo de redirecionamento de pgina usando o header


Fonte: Elaborada pelo autor

O comando header deve ser usado antes de qualquer comando de exibio (echo, tags HTML, include). Usaremos o header mais adiante como forma de redirecionamento de pgina. Com os conhecimentos desta aula voc tem a capacidade de criar pginas web dinmicas, nas quais, a partir de um formulrio em HTML em um navegador, o usurio possa enviar dados para um programa no servidor e receber uma mensagem. Esse uxo de informao a base de todas as pginas web dinmicas.

e-Tec Brasil

40

Programao para Web

Resumo
Nesta aula programamos nossa primeira pgina dinmica com recebimento e validao de dados. Tambm aprendemos a enviar um arquivo junto com os dados. Porm, nossas pginas ainda no esto completas. Falta salvar os dados para que eles no se percam. Para isso preciso acessar banco de dados a partir no PHP, que ser nossa prxima Aula.
Leituras complementares: SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007. GUTMANS, Andi; BAKKEN, Stig Saether; RETHANS, Derick. HP 5: programao ponderosa. Rio de Janeiro: Alta Books, 2005. MELO, Alexandre Altair de; NASCIMENTO, Maurcio G. F. PHP prossional. 2 ed. So Paulo: Novatec, 2007.

Atividade de aprendizagem
Acrescente no formulrio da Figura 2.2 mais um campo para fazer o upload de um arquivo do tipo PDF, como se fosse o envio do currculo da pessoa. Altere o programa da Figura 2.3 para receber esse arquivo, fazer as suas validaes (tipo e tamanho) e coloque um link para esse arquivo, com o nome da pessoa, para quando clicar no link, abrir o arquivo PDF.

Aula 2 Recebendo dados do formulrio

41

e-Tec Brasil

Aula 3 Acesso, insero e listagem no banco de dados MySQL


Objetivos
Conhecer como o PHP interage com o banco de dados. Construir pginas web para inserir dados em um banco de dados. Construir pginas web para recuperar informaes do banco de dados. At agora j aprendemos a criar pginas dinmicas que recebem e validam os dados, mas essas informaes esto se perdendo. Precisamos armazen-las em algum lugar. Esse local o banco de dados. Como pr-requisito, fundamental que voc revise a linguagem SQL, estudada na disciplina de Banco de Dados, por ser essa a linguagem universal dos bancos de dados. por meio dela que o PHP ir conversar com o banco de dados. A maioria dos sites dinmicos acessa algum banco de dados. Em alguns casos, somente para tarefas simples, como cadastrar usurios e senhas. Em outros casos, o banco de dados vital para o funcionamento do sistema web, como uma loja virtual. Com o PHP podemos acessar diversos banco de dados, como o MySQL, PostgreSQL, Oracle, SQL Server, Firebird, Sysbase, Informix, SQLite e outros mais. Para os bancos de dados que o PHP no tem um mdulo especco, podemos utilizar os drivers ODBC. Um dos bancos de dados mais utilizados com o PHP o MySQL. O PHP possui um mdulo especco para esse banco. Utilizaremos o MySQL em nossos exemplos por ser um banco simples de operar e utilizar pouco processamento e memria, em comparao com os outros.

Aula 3 Acesso, insero e listagem no banco de dados MySQL

43

e-Tec Brasil

3.1 Criando o banco de dados


Antes de construir o site, devemos modelar os dados a serem manipulados pelas pginas, porque assim teremos uma melhor viso das informaes a serem acessadas em cada pgina. Veja a seo sobre Modelagem de Dados da disciplina Banco de Dados. Para usarmos em nossos exemplos, vamos criar um banco de dados no MySQL com o nome ProgWebBD e construir as tabelas descritas na Figura 3.1 a seguir. Clientes
idClientes: INTEGER Estados_sigla: CHAR(2) (FK) nome: VARCHAR(100) cpf: VARCHAR(14) endereo: VARCHAR(100) dtNasc: DATE sexo: CHAR(1) login: VARCHAR(20) senha: VARCHAR(50) cinema: TINYINT(1) musica: TINYINT(1) info: TINYINT(1)
Fonte: Equipe produo CEAD/IFES (2011)

Rel_01

Estados
sigla: CHAR(2) nome: VARCHAR(50)

Figura 3.1: Tabelas a serem utilizadas nos exemplos

O campo idClientes do tipo autoincremento. Os campos cinema, musica e info armazenam 1 se aquela opo foi marcada, e 0 caso contrrio.

3.2 Conectando ao banco de dados


Em uma pgina PHP, o primeiro passo conectar com o banco de dados. Utilizaremos o comando mysql_connect para criar essa conexo. A conexo a estrada por onde trafegaro os dados da sua pgina at o banco de dados, e vice-versa.

e-Tec Brasil

44

Programao para Web

mysql_connect abre a conexo de uma pgina em PHP com o banco de dados. Sua sintaxe : mysql_connect(servidor, usurio, senha) onde: servidor IP (ou hostname) a porta do servidor onde est o banco de dados, no formato servidor: porta. Se o banco de dados estiver no mesmo computador, pode usar localhost. Se a porta no for informada, ser utilizada a porta padro, que no MySQL a 3306. Usurio e senha cadastrados no banco de dados. Podem ocorrer alguns erros ao se tentar abrir a conexo. Os casos mais comuns so: no encontrar o servidor ou o usurio e a senha no terem permisso de acesso ao banco. Caso ocorra algum erro, o ideal seria mostrar uma mensagem de erro e interromper a execuo da pgina, j que sem a conexo no poderemos acessar o banco de dados. Para isso usaremos a funo die. die funo que exibe uma mensagem e interrompe a execuo da pgina. Sua sintaxe : die(mensagem) A mensagem pode ser concatenada com a funo mysql_error, que informa a mensagem original do erro. Exemplo: die(Erro ao conectar. . mysql_error() ); O ponto . serve para juntar as duas mensagens, ou seja, ele o operador que concatena strings. O die pode ser usado junto com outra funo. Se der erro nessa funo, o die chamado automaticamente. Utiliza-se o operador or para associar o die a alguma funo. O exemplo abaixo chama a funo mysql_connect; se der erro, automaticamente o die executado para mostrar a mensagem e interromper a execuo da pgina. mysql_connect(localhost,root,root) or die(Erro ao conectar. . mysql_error() );

Aula 3 Acesso, insero e listagem no banco de dados MySQL

45

e-Tec Brasil

Caso a abertura da conexo ocorra normalmente, o segundo passo escolher o nome do banco de dados que ser utilizado. Em um servidor de banco de dados podem existir vrios bancos. Usaremos para isso a funo mysql_select_db. mysql_select_db seleciona o banco a ser utilizado no servidor conectado anteriormente. Sua sintaxe : mysql_select_db(nome_banco) Exemplo: Selecionar o banco de dados criado anteriormente para os exemplos. mysql_select_db(ProgWebBD); O programa da Figura 3.2 mostra o exemplo de conexo com o nosso banco de dados de exemplo. O servidor de banco de dados MySQL est no servidor com IP 172.16.43.10, usurio root, senha root e o nome do banco criado foi ProgWebBD.

Figura 3.2: Exemplo de conexo com o banco de dados


Fonte: Elaborada pelo autor

Cada pgina que necessitar acessar o banco de dados dever ter esses dois comandos no incio. Como um sistema web geralmente possui vrias pginas, replicar esses comandos no ser uma boa soluo. Caso tenha que mudar algum parmetro, como por exemplo o IP do servidor, todas as pgina sofrero modicaes. Um trabalho e tanto! Para evitar esse trabalho de manuteno, colocam-se os comandos de conexo com o banco em um nico arquivo e todas as pginas fazem acesso a esse arquivo utilizando o comando:

e-Tec Brasil

46

Programao para Web

include ou include_once include insere pedaos de cdigos PHP de um determinado arquivo na pgina atual. include_once a diferena que este comando verica se o arquivo j foi inserido anteriormente, ou seja, insere somente uma nica vez. Sua sintaxe : include(nome_arquivo.php) ou include_once(nome_arquivo.php) Ento, o cdigo da Figura 3.2 car em um arquivo, por exemplo, conexaobd.php, e todas as outras pginas incluiro esse cdigo da seguinte forma: include_once(conexaobd.php) PRONTO!!! Uma vez conectado com o banco de dados, podemos realizar todas as operaes para manipulao dos dados: inserir, pesquisar, alterar e excluir. O que precisaremos saber para realizar essas operaes sobre a linguagem SQL. Uma conexo estabelecida com o comando mysql_connect encerrada, automaticamente, ao nal da execuo da pgina. Caso queira encerr-la antes disso, deve ser utilizado o comando mysql_close. mysql_close fecha a conexo com o banco de dados. Sua sintaxe : mysql_close(identicador) em que: identicador a varivel que indica a conexo criada. Se o identicador no for fornecido, a ltima conexo estabelecida ser encerrada.

3.3 Inserindo dados


A linguagem padro de comunicao com os bancos de dados a linguagem SQL. Para fazer com que o PHP execute os comandos SQL no banco de dados MySQL, utiliza-se a funo mysql_query.

Aula 3 Acesso, insero e listagem no banco de dados MySQL

47

e-Tec Brasil

mysql_query funo que executa um comando SQL no banco de dados MySQL. Retorna verdadeiro (true) em caso de sucesso e falso (false) caso contrrio. Sua sintaxe : mysql_query(comando, conexao) em que: comando o comando na linguagem SQL, como: INSERT, SELECT, UPDATE, DELETE, etc. conexo parmetro opcional que indica a conexo com o banco de dados. Se no for informada, utiliza a ltima conexo aberta. Portanto, para inserir os dados no banco, o comando em SQL que utilizado o INSERT. Para testarmos, vamos criar duas pginas: uma em HTML com o formulrio para digitar os dados e a outra em PHP, que ir receber os dados, vericar se esto corretos e depois inserir no banco. O formulrio conter os mesmos campos que a tabela Clientes do nosso banco de dados de teste da Figura 3.1. Esse formulrio ser o mesmo utilizado na Figura 2.2, da Aula 2, com a incluso de mais um campo para o login, chamado txtLogin. Esse formulrio enviar os dados para a pgina em PHP no servidor chamada cadclientebd.php (atributo action da tag <FORM>). O programa em PHP no servidor ser semelhante ao programa da Figura 2.3, da Aula 2. A diferena car por conta da incluso dos dados no banco, ao invs de mostrar os dados na pgina. Para isso, vamos criar uma varivel ($sql) que receber o comando INSERT com os dados do formulrio. Logo aps, essa varivel ser passada para o mysql_query. Na sintaxe do INSERT, a parte do VALUES em que passamos os valores para o banco de dados. nesse ponto que usaremos as variveis com os valores obtidos dos formulrios. A Figura 3.3 apresenta este comando:

Figura 3.3: Exemplo de montagem do comando SQL


Fonte: Elaborada pelo autor

e-Tec Brasil

48

Programao para Web

Lembre-se que na linguagem SQL, os campos do tipo string e data devem estar entre aspas simples ( ). No exemplo acima, os campos $cinema, $musica e $info no esto entre aspas porque so do tipo inteiro. Logo em seguida chamaremos o comando em PHP para executar esse SQL no banco de dados. Esse comando o mysql_query e pode ser visto na Figura 3.4.
Figura 3.4: Exemplo de chamada para executar o comando SQL no MySQL
Fonte: Elaborada pelo autor

Os campos no banco de dados do tipo autonumerao (ou autoincremento) no devem ser passados para o comando INSERT. Verique que em nossa tabela de exemplo, o campo idClientes um campo autoincremento e ele no foi passado para o INSERT. Caso queira obter o ltimo nmero inserido de um campo autoincremento, utiliza-se a funo mysql_insert_id. mysql_insert_id retorna o ltimo nmero inserido de um campo do tipo autoincremento. Sua sintaxe : mysql_insert_id(conexao) em que: conexo um parmetro opcional que indica a conexo com o banco de dados. Se no for informada, utiliza a ltima conexo aberta. Em nosso exemplo, poderamos criar a varivel $cod para receber o cdigo do cliente inserido, conforme exemplo na Figura 3.5 a seguir.
Figura 3.5: Obtendo o ltimo cdigo autoincremento inserido
Fonte: Elaborada pelo autor

Os campos do formulrio do tipo checkbox enviam para a pgina PHP o valor true se estiverem marcados e (vazio) se no estiverem marcados. Portanto, antes de passar essa varivel para o comando INSERT, devemos substituir o (vazio) por zero, j que em nosso banco esses campos armazenam 0 ou 1. O valor true corresponde ao 1; portanto, no teria problema ao passar para o SQL.

Aula 3 Acesso, insero e listagem no banco de dados MySQL

49

e-Tec Brasil

Os comandos para substituir o (vazio) por zero pode ser visto na Figura 3.6:

Figura 3.6: Substituindo o (vazio) por zero


Fonte: Elaborada pelo autor

3.3.1 Inserindo datas no banco


O MySQL trabalha com o tipo data no formato americano, ou seja, ano-ms-dia. Portanto preciso converter o nosso formato de data (dia-ms-ano) para o formato americano, antes de passar a data para o comando INSERT. Admitindo que a data recebida esteja no formato dd/mm/aaaa, separam-se os campos dia, ms e ano utilizando a funo substr. substr retorna uma parte de uma string. Sua sintaxe : substr(texto, pos_inicial, tamanho onde: texto string original. pos_inicial posio onde inicia o pedao da string que se deseja. A primeira letra est na posio zero. tamanho da substring a partir da posio inicial. Logo, o dia o pedao da data que inicia na posio 0 e tem tamanho 2. O ms o pedao da data que inicia na posio 3 e tem tamanho 2. O ano o pedao da data que inicia na posio 6 e tem tamanho 4. O exemplo da Figura 3.7 mostra o cdigo em PHP, em que $dtNasc a varivel com a data a ser modicada.

Figura 3.7: Exemplo de separao dos campos de uma data


Fonte: Elaborada pelo autor

Em seguida, concatenam-se os campos no formato desejado, no nosso caso ano-ms-dia, como mostrada na Figura 3.8 a seguir.
Figura 3.8: Concatenando a data no padro do MySQL: ano-ms-dia
Fonte: Elaborada pelo autor

e-Tec Brasil

50

Programao para Web

Podemos tambm vericar se essa uma data vlida. Para isso, usa-se o comando checkdate. checkdate retorna verdadeiro (true) se a data vlida e falso (false) caso contrrio. Sua sintaxe : checkdate(mes, dia, ano) Para testar nossa data, o exemplo caria conforme Figura 3.9 a seguir.

Figura 3.9: Funo que verica se uma data vlida


Fonte: Elaborada pelo autor

O programa da Figura 3.10 mostra todo o cdigo da pgina cadclientebd.php, que recebe os dados do formulrio, verica se os campos esto corretos, converte e verica a data e depois insere no banco de dados.

Aula 3 Acesso, insero e listagem no banco de dados MySQL

51

e-Tec Brasil

Figura 3.10: Pgina em PHP que insere os dados do cliente no banco


Fonte: Elaborada pelo autor

Crie a tabela Produtos no banco de dados MySQL com os seguintes campos: idProduto inteiro autoincremento (chave primria) descrio varchar(100) preo oat qtdeEstoque inteiro dataValidade date Crie o formulrio para entrar com esses dados e a pgina em PHP para receber, validar e inserir os dados no banco de dados.

3.4 Listando os dados


Aps inserir os dados no banco, temos a possibilidade de recuper-los e mostr-los para o usurio. O comando em SQL que faz isso o SELECT. O comando em PHP para recuperar os dados o mesmo usado no inserir, o mysql_query. O que muda o comando SQL passado para o banco, que agora o SELECT. O retorno de um SELECT no banco um conjunto de registros. Precisamos percorrer todos esses registros, pegando o primeiro, passando para o prximo, e assim por diante at ao ltimo. O comando em PHP que faz isso o mysql_fetch_assoc.

e-Tec Brasil

52

Programao para Web

mysql_fetch_assoc retorna um registro de uma consulta e aponta para o prximo registro. Retorna false quando no existir mais registros, ou seja, quando chegar ao ltimo. Retorna o registro em forma de array, em que os ndices so os nomes das colunas da tabela no banco de dados. Sua sintaxe : mysql_fetch_assoc(identicador) em que: identicador o resultado do SELECT, ou seja, o conjunto de registros. Como o mysql_fetch_assoc retorna um registro por vez, e para quando chegar ao ltimo (false), podemos coloc-lo como condio de parada em um comando while, para percorrer todos os registros. O registro retornado a cada lao do while guardado em uma varivel do tipo array. Cada posio do array um campo da tabela. Para pegar o valor, usa-se como ndice do array o nome do campo denido na tabela do banco, desta forma: $variavel_registro[nome_campo] O nome do campo deve ser o mesmo usado no banco de dados. Letras maisculas so diferentes de minsculas. Para saber o total de registros retornados por uma consulta ao banco, usamos o comando mysql_num_rows. mysql_num_rows retorna a quantidade de registros da ltima consulta ao banco. Sua sintaxe : mysql_num_rows(identicador); em que: identicador o resultado do SELECT, ou seja, o conjunto de registros.

Aula 3 Acesso, insero e listagem no banco de dados MySQL

53

e-Tec Brasil

O programa da Figura 3.11 mostra o exemplo de uma pgina que consulta todos os dados da tabela Clientes, do nosso banco de dados de teste. Para cada registro obtido, uma linha de uma tabela em HTML criada para mostrar os resultados. Perceba que dentro do while cam apenas os comandos para criar uma linha da tabela (<TR>). Os comandos para abrir e fechar a tabela cam antes e depois do while, respectivamente (<TABLE> e </TABLE>). A primeira linha da tabela, com os nomes dos campos, tambm ca fora do while, porque no pode ser repetida.

Figura 3.11: Pgina em PHP que exibe todos os clientes


Fonte: Elaborada pelo autor

3.4.1 Formulrio dinmico


O procedimento de listar todos os registros pode ser til quando queremos preencher algum objeto da pgina com os dados da tabela, como por exemplo, preencher as opes de um combobox a partir do banco de dados. Nesse caso, o formulrio dinmico, porque qualquer alterao no banco de dados, automaticamente, reetida no formulrio. Situaes nas quais isso pode ocorrer so inmeras, como: preencher um combobox com todos os cursos cadastrados no banco; ou exibir as opes cadastradas no banco de dados para que um cliente possa escolher a cor de um produto; ou selecionar uma das cidades cadastradas para realizar a prova de um concurso; e assim por diante. Todos esses exemplos podem ser obtidos com o procedimento do programa da Figura 3.11. Dentro do while que cam os comandos HTML para cada opo desejada.

e-Tec Brasil

54

Programao para Web

Como exemplo, vamos mostrar como preencher o combobox do campo listEstado do nosso formulrio da Figura 2.2, da Aula 2. Naquele formulrio, as opes foram denidas no prprio cdigo HTML. Vamos agora ler os estados a partir do nosso banco de dados. Utilizaremos o programa da Figura 3.11 dentro do formulrio da Figura 2.2, da Aula 2, na regio onde montado o combobox listEstados. Nosso SELECT ser na tabela Estados (veja Figura 3.1). Dentro do while vamos colocar os comandos para criar as opes do combobox, que o <OPTION>. Para cada registro da tabela ser criado um comando <OPTION>, mostrando o nome do estado. Para o atributo value, ser usada a sigla do estado. Quando o usurio escolhe uma opo de um combobox, apenas o atributo value enviado para o servidor; em nosso caso, somente a sigla do estado ser enviada. A Figura 3.12 mostra o trecho de programa alterado do formulrio para cadastro.

Figura 3.12: Montando um formulrio dinmico


Fonte: Elaborada pelo autor

Toda pgina que contiver cdigos em PHP deve ter a extenso .PHP. Portanto, o formulrio de cadastro de clientes que antes era apenas HTML, deve ser renomeado para a extenso PHP. Antes de testar, voc deve preencher a tabela Estados com algumas informaes. Com o conhecimento adquirido at agora, voc capaz de criar sites que armazenam dados em um banco de dados. Voc tambm tem a capacidade de recuperar as informaes do banco de dados e mostr-las para o usurio. A grande maioria dos sites utiliza algum banco de dados para manipular as informaes. Vimos um exemplo com o banco de dados MySQL, mas voc pode trabalhar com qualquer banco de dados.

Aula 3 Acesso, insero e listagem no banco de dados MySQL

55

e-Tec Brasil

Essa a base de toda a interao de pginas web com o banco de dados. Portanto, pratique! Teste os exemplos apresentados e faa os exerccios propostos. A prxima aula depender muito destes conceitos. Somente passe para a prxima aula quando no existir mais nenhuma dvida.

Resumo
Leituras complementares DAVIS, Michele E.; PHILLIPS, Jon A. Aprendendo PHP e MySQL. Rio de Janeiro: Alta Books, 2008. MILANI, Andr. Construindo aplicaes web com PHP e MySQL. So Paulo: Novatec, 2010. NIEDERAUER, Juliano. Desenvolvendo websites com PHP. 2 ed. So Paulo: Novatec, 2004. WELLING, Luke; THOMSON, Laura. PHP e MySQL: desenvolvimento web. 3 ed. Rio de Janeiro: Elsevier, 2005.

Nesta aula aprendemos a conectar com o banco de dados e a realizar as operaes para inserir e listar dados. Para realizar essas operaes, vimos exemplos de pginas web dinmicas com os comandos PHP. Na prxima aula continuaremos trabalhando com bancos de dados. Aprenderemos a alterar e excluir dados do banco.

Atividades de aprendizagem
1. Crie uma pgina em PHP para listar todos os produtos da tabela criada na terceira Atividade de aprendizagem ( Atividade 3.1) desta aula. 2. Crie a tabela Vendas no banco de dados MySQL com os seguintes campos: idVenda inteiro autoincremento (chave primria) idCliente chave estrangeira da tabela Clientes idProduto chave estrangeira da tabela Produtos qtdeVendida inteiro preoTotal oat dataVenda date formaPagto inteiro (pode ser chave estrangeira de outra tabela com as formas de pagamento) Crie o formulrio para entrar com os dados de uma venda. Preencha um combobox com todos os clientes cadastrados e outro com os produtos. Lembre-se de colocar no atributo value o id do cliente e do produto. Os demais campos sero do tipo texto. Se a forma de pagamento estiver em uma tabela separada, coloque um combobox para ela tambm. Depois crie uma pgina em PHP para receber os dados do formulrio e inserir na tabela Vendas

e-Tec Brasil

56

Programao para Web

Aula 4 Consulta, excluso e alterao no banco de dados MySQL


Objetivos
Aprender como realizar uma consulta ltrando por determinado campo. Aprender a excluir e a alterar um registro no banco de dados a partir de pginas web em PHP. Vamos continuar interagindo com o banco de dados. Como pr-requisito, fundamental que vocs tenham assimilado o contedo da aula anterior; sem ele no ser possvel se conectar com o banco de dados.

4.1 Consultando no banco de dados MySQL


Em muitas situaes, listar todas as informaes de uma tabela do banco de dados no uma boa opo. Tabelas que possuem grande quantidade de dados aumentam o trfego da internet para trazer todas essas informaes para a pgina. Vamos aprender agora como ltrar os dados de um consulta. Podemos realizar uma consulta no banco de dados escolhendo qualquer um dos campos para pesquisar, ou uma combinao deles. Por exemplo, podemos listar todos os clientes que nasceram em um determinado ms, ou listar todos os funcionrios com salrio maior que um determinado valor, ou ainda, listar todas as vendas do ltimo ms que ainda no foram pagas. Para selecionar determinadas informaes do banco de dados, usaremos a clusula WHERE dentro do SELECT, como vocs j viram na disciplina de Banco de Dados. O que veremos aqui como pegar os campos de um formulrio para fornecer como limite para a consulta e exibir a resposta na mesma pgina. Ento, a nossa pgina ter o formulrio em HTML para a consulta, e outra parte com o cdigo em PHP para exibir o resultado, que pode ser em forma de tabela.

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

57

e-Tec Brasil

Como exemplo, nosso formulrio ter um combobox para escolher o tipo de consulta, chamado comboTipo. As opes sero por nome ou por ms de aniversrio. Ter tambm um campo para digitarmos o valor que queremos pesquisar, chamado txtPesquisa. Ao enviar os dados, esse formulrio chamar a mesma pgina, para que o PHP possa exibir os dados da pesquisa. Portanto o atributo action do <FORM> apontar para o mesmo arquivo. O programa da Figura 4.1 mostra essa pgina, que chamaremos de pesqclientes.php.

Figura 4.1: Programa de um formulrio para pesquisar os clientes (pesqclientes.php)


Fonte: Elaborada pelo autor

Quando o usurio clicar no boto Enviar, os dados para pesquisar sero enviados para a mesma pgina, que agora executar o PHP na parte de baixo e mostrar o mesmo formulrio, mais a tabela de resposta. Porm, na primeira vez que chamarmos essa pgina, o PHP no pode ser executado. Ele somente ser executado da segunda vez em diante, ou seja, quando ele receber os dados para a pesquisa. Para distinguir quando uma pgina est recebendo uma informao ou no, usaremos o comando isset. isset retorna verdadeiro (true) se uma certa varivel j foi declarada, e falso (false), em caso contrrio. Sua sintaxe : isset(variavel) Na primeira vez que a pgina chamada, no temos nenhuma varivel. Na segunda vez em diante, a pgina recebe as variveis comboTipo e txtPesquisa do formulrio (via mtodo POST ou GET). Podemos utilizar qualquer uma dessas duas variveis para testar quando o PHP ser executado. Dentro do PHP, obtm-se o tipo de pesquisa que ser feita, por nome ou por ms (comboTipo), e monta-se o SQL correspondente com o valor digitado em txtPesquisa. O resultado mostrado em forma de tabela. O programa da Figura 4.2 mostra o cdigo completo da pgina de pesquisa pesqclientes.php.
e-Tec Brasil

58

Programao para Web

Figura 4.2: Programa de uma pgina para pesquisar os clientes (pesqclientes.php)


Fonte: Elaborada pelo autor

Quando a pesquisa com um campo do tipo string, como o nome do exemplo anterior, usa-se a palavra LIKE no lugar da igualdade, dentro da clusula WHERE do SELECT. O smbolo % dentro do valor a ser pesquisado serve como curinga. Signica que pode vir qualquer caracter naquela posio. O exemplo anterior busca no banco de dados qualquer cliente que comea com o valor digitado pelo usurio. O que muda de uma pesquisa para outra so os campos e as tabelas do banco de dados, como, por exemplo, pesquisar produtos, vendas, locaes, reservas, etc. Portanto, as modicaes no cdigo para realizar outro tipo de pesquisa seriam alterar o SELECT e a forma de exibir os dados. Crie uma pgina em PHP para pesquisar os produtos da tabela criada na Atividade de aprendizagem da aula 3. Voc deve permitir pesquisar pela descrio, cdigo e data de validade.

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

59

e-Tec Brasil

4.2 Excluindo no banco de dados MySQL


Na grande maioria dos sistemas, no se usa muito excluir informaes do banco de dados, porque isso faz com que a empresa perca o histrico dos dados. O que se faz colocar um campo na tabela que informa o estado da informao como, por exemplo: ativo, inativo, em andamento, nalizado, aguardando resposta, etc. Em vez de excluir o cliente do banco de dados, a empresa pode apenas mudar seu estado para inativo, para que no futuro possa realizar alguma campanha para recuperar os clientes perdidos. Mesmo no sendo muito utilizado, em algumas situaes pode ser necessrio excluir informaes do banco. Ento vamos aprender a fazer isso: para a operao de excluir do banco, mais uma vez o que muda o comando SQL. Os comandos em PHP so os mesmos: abrir a conexo, selecionar o banco e executar o comando SQL. Na maioria dos sistemas, ao excluir, necessrio conhecer pelo menos um dado da tabela. Dicilmente iremos excluir vrios dados de uma vez. O ideal seria obter a informao que corresponde chave primria da tabela, por ser uma informao nica. Uma das formas de fazer isso usar algum mecanismo de pesquisa para escolher a informao a ser pesquisada. Em nosso exemplo, vamos utilizar a pgina j criada de pesquisa. Na tabela que exibe as informaes, podemos colocar em cada linha uma palavra, uma imagem ou algum outro objeto que, quando clicado, chama a pgina em PHP para excluir. A Figura 4.3 mostra a pgina resultante da pesquisa com uma imagem que corresponde operao de excluir. Para facilitar a visualizao da imagem, alguns campos da tabela de resultados foram omitidos. Para o seu teste, use todos os campos da tabela. Essa imagem possui um link (tag <A> do HTML) que aponta para a pgina do excluir, chamada em nosso exemplo de excluircliente.php. Em cada imagem devemos passar o cdigo da informao que ser excluda. Usaremos o mtodo GET para envio de informaes para a outra pgina (vejam a seo 2.1). O dado que passaremos ser o cdigo do cliente. Essa varivel ser chamada de codigo. O programa da Figura 4.4 mostra a pgina pesqclientes.php alterada para adicionar na tabela de resultado, mais uma coluna, que corresponde a imagem para a operao excluir. Percebam que em cada linha da tabela, o link passar via GET, a varivel codigo, que receber o id de cada cliente no banco de dados.
e-Tec Brasil

60

Programao para Web

Figura 4.3: Exemplo de pesquisa com uma imagem para o excluir


Fonte: Pgina exibida pelo Mozilla Firefox 3.5

Figura 4.4: Resultado da pesquisa com link para o excluircliente.php


Fonte: Elaborada pelo autor

Altere e execute a pgina pesqclientes.php, para colocar o link para o excluir cliente, como mostrado acima. Ao passar o mouse em cima da imagem do excluir, mas sem clicar, olhe na barra de status, na parte de baixo do navegador, o link de cada imagem. Perceba que o que muda de um para o outro o cdigo do cliente. A pgina excluircliente.php ser a responsvel por executar o comando SQL no banco de dados. Essa pgina recebe o cdigo passado via GET, pelo link da imagem excluir, e executa o comando DELETE no banco, com a clusula WHERE informando o id do cliente que ser excludo. Ao nal, a pgina redirecionada novamente para a pgina de pesquisa (voc poderia redirecionar para qualquer outra pgina do seu sistema). O programa da Figura 4.5 mostra o cdigo PHP completo dessa pgina.

Figura 4.5: Programa em PHP para excluir um cliente


Fonte: Elaborada pelo autor

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

61

e-Tec Brasil

Implemente a pgina excluircliente.php, como mostrada acima, e teste suas pginas.

4.3 Alterando no banco de dados MySQL


A operao de alterar dados no banco segue o mesmo princpio que as demais informaes. Novamente o que muda o comando SQL passado para o banco. Porm, o que torna uma pgina web um pouco mais trabalhosa para alterar dados, mas nem tanto, que devemos ter as informaes que sero alteradas. Essas informaes podem estar dispostas de diversas formas em uma pgina. O mecanismo mais fcil e apropriado para isso o formulrio em HTML. Ento, ao escolher uma determinada informao para alterar, vamos chamar uma pgina com o formulrio j preenchido com as informaes anteriores. O usurio altera no formulrio os dados que deseja e depois os envia para outra pgina em PHP que atualizar o banco de dados. Antes de chamar o formulrio com os dados, na maioria das vezes, interessante usar algum mecanismo de busca, como uma pgina de pesquisa. Em nosso exemplo, vamos utilizar trs passos para alterar os dados de um cliente: Passo 1 usar a pgina pesqclientes.php para pesquisar o cliente de quem queremos modicar os dados. Colocar um link em cada cliente para que, ao clicar, a pgina formaltcli.php seja chamada, enviando o cdigo do cliente via GET; Passo 2 a pgina formaltcli.php exibir um formulrio j preenchido com os dados do cliente escolhido. Aps alterar os dados clicaremos em um boto para envi-los para a pgina alterarclibd.php; Passo 3 a pgina alterarclibd.php atualizar o banco de dados com as informaes atuais oriundas do formulrio. Ao nal, ser redirecionado para a pgina com o formulrio, que exibir a mensagem de sucesso ou erro. A Figura 4.6 mostra o diagrama de navegao desse mecanismo.

e-Tec Brasil

62

Programao para Web

Formulrio
POST GET (cdigo)

PHP para alterar

UPDATE

Pesquisar

GET (mensagem)

Banco de Dados

Figura 4.6: Diagrama de navegao das pginas para alterar dados


Fonte: Equipe produo CEAD/IFES (2011)

4.3.1 Passo 1 link no pesquisar


Assim, como colocamos um link para a pgina que exclui os dados, vamos fazer de forma semelhante para a operao de alterar. Colocaremos um link no nome de cada cliente, que chamar a pgina com o formulrio, passando o cdigo do cliente via GET. Poderamos tambm usar uma imagem ou qualquer outro mecanismo para chamar o formulrio, desde que passe o cdigo do cliente que se deseja alterar. A linha na pgina pesqclientes.php que ser alterada o comando echo que monta cada linha da tabela, dentro do while. Perceba que a coluna referente ao nome passa a ter um link para o formulrio do alterar e a coluna referente imagem do excluir continua com o link para a pgina de excluir. Ambos os links passam o cdigo do cliente via mtodo GET. A nova linha mostrada na Figura 4.7 a seguir.

Figura 4.7: Comando com o link no campo nome para chamar o alterar
Fonte: Elaborada pelo autor

4.3.2 Passo 2 exibir o formulrio


Na pgina formaltcli.php, antes de exibir o formulrio, necessrio obter os demais dados do banco, uma vez que temos somente o cdigo do cliente passado como GET. Ento, executaremos o SELECT para isso. Aps, colocaremos os dados do banco em variveis PHP que sero utilizadas para preencher o formulrio. O campo do tipo data, obtido no banco de dados, est no formato Y-m-d (padro do MySQL). Ento temos que convert-lo para o nosso formato d/m/Y, para exibir no formulrio. Usaremos para isso duas funes, a strtotime e a date.

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

63

e-Tec Brasil

strtotime converte uma data no formato string para o formato timestamp (usado pelo PHP). Sua sintaxe : strtotime(string_data) date converte uma data no formato timestamp para algum formato em string. Sua sintaxe : date(formato, timestamp) Portanto, para converter de Y-m-d para d/m/Y usaremos os seguintes comandos: $varData = date(d/m/Y, strtotime($varData)); Em que: $varData a data no formato Y-m-d. Em cada campo do formulrio colocaremos a varivel PHP, correspondente ao dado obtido do banco. Como temos campos de tipos diferentes, cada um ter uma forma diferente de preencher os dados. Em todas elas, alternaremos entre cdigos HTML e PHP. a) Campos do tipo text Coloca o atributo value e, entre aspas duplas, abre o PHP e pega a varivel correspondente com o echo. Veja a Figura 4.8 desta forma:

Figura 4.8: Atribuindo valor para campos do tipo text


Fonte: Elaborada pelo autor

A expresso <?php echo $nome; ?> abre o cdigo em PHP, pega a varivel $nome com o dado obtido do banco e coloca no atributo value do campo do formulrio. Todo o cdigo PHP deve car dentro das aspas duplas do atributo value. b) Campos do tipo textarea O contedo desse campo ca entre as tags <TEXTAREA> e </TEXTAREA>. Ento, colocaremos o cdigo PHP com o valor a ser preenchido entre essas tags. Segue o exemplo na Figura 4.9 para o campo endereo.
e-Tec Brasil

64

Programao para Web

Figura 4.9: Atribuindo valor para campos do tipo textarea


Fonte: Elaborada pelo autor

c) Campos do tipo radio e checkbox Coloca-se a palavra checked na opo que car marcada. Portanto, necessrio testar com o comando if qual ser essa opo. O exemplo na Figura 4.10 com o campo sexo caria assim:

Figura 4.10: Atribuindo valor para campos do tipo radio e checkbox


Fonte: Elaborada pelo autor

d) Campos do tipo combobox (<SELECT>) Nesses campos, a opo marcada recebe o atributo selected. Ento, uma das solues seria semelhante a dos campos do tipo radio. Testa com o if e coloca o atributo selected na opo correspondente. Porm, muitas vezes, as opes de uma caixa de seleo so obtidas do banco de dados. Nesse caso, no PHP que obtm as opes do banco, coloca-se o if para testar qual opo ser a selecionada. Se for a que queremos que que marcada, ento o comando <OPTION> ca com o atributo selected, como o exemplo na Figura 4.11, com o campo que lista os estados.

Figura 4.11: Atribuindo valor para campos do tipo combobox


Fonte: Elaborada pelo autor

A varivel $estado obtida da tabela de Clientes, ou seja, o estado que dever car marcado. A varivel $sigla obtida de cada registro da tabela com todos os estados. A partir do formulrio preenchido, o usurio poder alterar os dados que lhe convm. Ao clicar no boto para enviar os dados, o formulrio enviar as novas informaes para a pgina alterarclibd.php, que realizar o UPDATE

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

65

e-Tec Brasil

no banco. Portanto, a declarao do formulrio (<FORM>) car como no exemplo na Figura 4.12 a seguir.

Figura 4.12: Denio do action para a pgina alterarclibd.php


Fonte: Elaborada pelo autor

O valor da chave primria de uma tabela no pode ser alterado, porque pode causar inconsistncia nos dados. Porm, ela fundamental para o processo de alterar, porque ser por meio dela que o sistema identicar o registro a ser alterado. Em nosso exemplo, a chave primria o cdigo do cliente. Ento colocaremos um campo no formulrio para esse cdigo. Para que o usurio no possa alterar esse valor, esse campo car oculto. Para criar um campo oculto, basta usar o atributo type com o valor hidden, como no exemplo na Figura 4.13 a seguir.

Figura 4.13: Campo oculto (hidden) com o cdigo do cliente


Fonte: Elaborada pelo autor

e) Mensagem de erro Os dados sero enviados para a pgina PHP que atualizar o banco de dados. Para saber se ocorreu erro ou no, redirecionaremos para a pgina com o formulrio novamente, informando a mensagem de erro ou sucesso. Essa mensagem ser enviada via o mtodo GET, com o nome mensagem. Ento, em nossa pgina com o formulrio, colocaremos o cdigo PHP abaixo para pegar a mensagem, caso tenha, e exibir junto com os dados. A Figura 4.14 mostra esta programao.

Figura 4.14: Exibindo a mensagem de resposta


Fonte: Elaborada pelo autor

O programa da Figura 4.15 mostra o cdigo completo da pgina formaltcli. php.

e-Tec Brasil

66

Programao para Web

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

67

e-Tec Brasil

Figura 4.15: Pgina com o formulrio preenchido (formaltcli.php)


Fonte: Elaborada pelo autor

4.3.3 Passo 3 atualizar o banco


A pgina alterarclibd.php receber os novos dados do formulrio do programa da Figura 4.15, via POST, e atualizar o banco de dados com o comando UPDATE. O programa da Figura 4.16 mostra essa pgina. A pgina para atualizar o banco semelhante de inserir. A diferena que utilizado o comando UPDATE, ao invs de INSERT. Tambm foram tirados os comandos echo e colocadas as mensagens em uma nica varivel, chamada $mensagem, que ser enviada para a pgina anterior mostr-la.

e-Tec Brasil

68

Programao para Web

Figura 4.16: Pgina que atualiza o banco de dados (alterarclibd.php)


Fonte: Elaborada pelo autor

Aps realizar uma alterao no banco de dados, como por exemplo, com o comando UPDATE, possvel obter quantos registros foram alterados. Para isso basta utilizar a funo mysql_affected_rows. mysql_affected_rows retorna a quantidade de registros que foram afetados por um comando SQL, como por exemplo o UPDATE. Sua sintaxe : mysql_affected_rows(conexao) em que: conexo um parmetro opcional que indica a conexo com o banco de dados. Se no for informado, utiliza a ltima conexo aberta. Com isso, conclumos o assunto sobre banco de dados. Vimos que o processo de acesso e manipulao de dados independe da operao a ser feita. O que dene a operao que faremos com o banco de dados o comando em SQL, como o INSERT, SELECT, UPDATE, DELETE e outros mais. Pronto! Agora voc capaz de criar um site completo, armazenando e recuperando dados do banco de dados.

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

69

e-Tec Brasil

Resumo
Nesta aula aprendemos a realizar uma consulta ltrando por determinado campo, a excluir e a alterar um registro no banco de dados a partir de pginas web em PHP. Na prxima aula aprenderemos a trabalhar com sesses, o que nos permitir, por exemplo, implementar a validao de usurio no sistema, bem como trocar dados entre as pginas de uma sesso. Encontra-se a seguir a Tabela 4.1 com o resumo dos comandos aprendidos at agora para manipulao do PHP com o banco de dados MySQL.
Tabela 4.1: Resumo dos principais comandos
FUNO DESCRIO PARMETROS

mysql_connect mysql_select_db mysql_close

Abre a conexo com o banco de dados. Seleciona o banco a ser utilizado. Fecha a conexo com o banco de dados. Funo que executa um comando SQL no banco de dados MySQL. Retorna verdadeiro (true) em caso de sucesso e falso (false) caso contrrio. Retorna o ltimo nmero inserido de um campo do tipo autoincremento Retorna um registro de uma consulta, em forma de array, e aponta para o prximo registro. Retorna false quando chegar ao ltimo. Retorna a quantidade de registros da ltima consulta ao banco. Retorna a quantidade de registros que foram afetados por um comando SQL. Retorna uma mensagem caso ocorra algum erro no acesso ao banco de dados Retorna verdadeiro (true) se uma certa varivel j foi declarada, e falso (false), em caso contrrio Insere pedaos de cdigos PHP de um determinado arquivo na pgina atual Funo que exibe uma mensagem e interrompe a execuo da pgina. Retorna uma parte de uma string

IP do servidor onde est o banco de dados. Usurio e senha com permisso de acesso ao banco de dados. Nome do banco. Conexo criada anteriormente.

mysql_query

Comando na sintaxe SQL.

mysql_insert_id

Parmetro opcional que indica a conexo com o banco de dados. Conjunto de registros resultante de uma consulta. Conjunto de registros resultante de uma consulta. Parmetro opcional que indica a conexo.

mysql_fetch_assoc

mysql_num_rows mysql_affected_rows

mysql_error

isset

Varivel a ser vericada.

include e include_once

Nome do arquivo PHP. Mensagem a ser exibida. String original. Posio inicial. Tamanho da substring. continua

die

substr

e-Tec Brasil

70

Programao para Web

checkdate strtotime

Retorna verdadeiro (true) se a data vlida, e falso (false), em caso contrrio Converte uma data no formato string para o formato timestamp. Converte uma data no formato timestamp para algum formato em string.

Ms, dia e ano. Data no formato string (padro americano: Y-m-d). Formato nal da data. Data original do tipo timestamp. concluso

date

Fonte: Adaptado de Soares (2007)

Atividades de aprendizagem
1. Crie uma pgina em PHP para pesquisar as vendas da tabela criada na segunda atividade dentre as Atividades de aprendizagem propostas ao nal da Aula 3. Voc deve permitir pesquisar todas as vendas de um determinado cliente e todas as vendas de um determinado produto. Obs.:Como na tabela Vendas tem apenas o cdigo do cliente e do produto, ser necessrio pesquisar pelo nome usando as tabelas Clientes e Produtos, ou seja, no SELECT ser preciso juntar (JOIN) a tabela Vendas com as tabelas Clientes e Produtos, de acordo com o tipo da pesquisa. Veja a apostila da disciplina de Bancos de Dados sobre como realizar a pesquisa unindo mais de uma tabela. 2. Implemente uma pgina para excluir os produtos da tabela criada na terceira Atividade de aprendizagem da Aula 3. Altere a pgina do pesquisar produtos, criada na primeira Atividade de aprendizagem desta Aula, e implemente o PHP para excluir o produto do banco. 3. Implemente as pginas para alterar os dados do cliente, como mostrada acima e teste. 4. Faa o mesmo procedimento para alterar os dados dos produtos. Altere a pgina do pesquisar produtos, criada na primeira Atividade de aprendizagem desta Aula, para colocar o link para a pgina de formulrio com os dados do produto preenchidos. Implemente o PHP para atualizar o banco.

Leituras complementares: DAVIS, Michele E.; PHILLIPS, Jon A. Aprendendo PHP e MySQL. Rio de Janeiro: Alta Books, 2008. MILANI, Andr. Construindo aplicaes web com PHP e MySQL. So Paulo: Novatec, 2010. NIEDERAUER, Juliano. Desenvolvendo websites com PHP. 2 ed. So Paulo: Novatec, 2004. WELLING, Luke; THOMSON, Laura.PHP e MySQL: desenvolvimento web. 3 ed. Rio de Janeiro: Elsevier, 2005.

Aula 4 Consulta, excluso e alterao no banco de dados MySQL

71

e-Tec Brasil

Aula 5 Gerenciando sesses


Objetivos
Aprender para que serve uma sesso em um sistema web e como program-la. Aprender a como utilizar a sesso para autenticar usurios. Construir pginas web para autenticar os usurios.

Esta Aula voltada para o gerenciamento de sesses em sistemas web. O uso de sesses permitir que informaes sejam trocadas entre pginas web de uma mesma sesso. Com isso, ser possvel fazer a validao do usurio em uma pgina e vericar em todas as outras se o usurio foi autenticado ou no. E ainda mais, de posse do tipo do usurio (administrador, gerente, caixa, operador, etc.), possvel fazer controle de acesso, programando em cada pgina os tipos de usurios que podem acess-las. A cada pgina visitada por um usurio, uma nova conexo criada pelo HTTP do navegador ao servidor. As informaes da conexo anterior no so mantidas. Entretanto, em diversas situaes desejvel que certas informaes sejam armazenadas temporariamente, entre uma pgina e outra. Como exemplo, pode-se citar a autenticao de login, que feita em uma pgina e em todas as outras necessrio vericar se o usurio est logado, alm de permitir obter os dados desse usurio em todas as pginas. Para testar o uso de sesses, vamos utilizar o login e senha cadastrados na tabela de Clientes, como o modelo de dados da Figura 3.1, da Aula 3. Outro exemplo o carrinho de compras. Enquanto o usurio visita vrias pginas, o carrinho de compras armazena os produtos comprados.
Sesso Uma sesso basicamente um meio de mantermos dados durante a navegao por vrias pginas de um site. Quando uma sesso aberta, ela recebe um identicador nico, o que permite ao PHP recuperar os dados vinculados quela sesso.

Aula 5 Gerenciando sesses

73

e-Tec Brasil

5.1 Criando uma sesso


Para criar uma sesso, usa-se o comando: session_start(); Aps esse comando, um array, chamado $_SESSION, criado para manipularmos as informaes armazenadas. Com esse array possvel incluir uma nova varivel, alterar as existentes e excluir uma ou todas as variveis. As pginas em que for preciso acessar informaes do array $_SESSION, deve-se usar tambm o comando session_start(), para acessar a sesso criada.

5.2 Manipulando as variveis de uma sesso


Os dados armazenados em uma sesso so armazenados no array $_SESSION. O ndice desse array, entre colchetes, o nome da varivel de sesso. Para criar uma nova varivel na sesso, basta colocar seu nome como ndice do array $_SESSION. O exemplo da Figura 5.1 mostra a criao da sesso e das variveis login, tipo e nome, obtidas do banco de dados, depois de validar o login 3 e a senha do usurio.

Figura 5.1: Criao da sesso e suas variveis


Fonte: Elaborada pelo autor

O procedimento para acessar uma varivel j presente no <IT>array<IT> $_ SESSION o mesmo. Em nosso exemplo acima, poderamos obter o nome e o login do usurio em qualquer pgina. Para eliminar uma varivel de uma sesso, utiliza-se o comando: unset($_SESSION[nome_da_varivel])

e-Tec Brasil

74

Programao para Web

5.3 Excluindo a sesso


Uma sesso automaticamente eliminada quando o navegador do usurio fechado. Caso queira destruir a sesso antes disso, como por exemplo, ao clicar em um boto do tipo sair ou logout, devem ser realizadas trs etapas. A primeira acessar a sesso com o comando session_start(). A segunda a liberao de todas as variveis da sesso com o comando session_unset(). A ltima a destruio da sesso com o comando: session_destroy(); O programa da Figura 5.2 mostra o exemplo de um cdigo PHP chamado a partir de um boto sair ou logout, para nalizar a sesso. Aps encerrar a sesso, a pgina redirecionada para o formulrio inicial de login.

Figura 5.2: Pgina que naliza uma sesso (logout.php)


Fonte: Elaborada pelo autor

5.4 Caso de uso: autenticando usurios


Para testarmos o uso de sesses, vamos criar as pginas para fazer a autenticao do usurio. No nosso banco de dados de exemplo, na tabela Clientes, j temos o login e a senha dos usurios. Vamos utilizar essa tabela para validar o usurio.

5.4.1 Formulrio de login


Vamos criar um formulrio, chamado formlogin.php, com os campos de login e senha. Esse formulrio enviar os dados para o PHP login.php, via POST, que consultar o banco de dados vericando se o login e a senha esto corretos. Se estiverem corretos, ento cria a sesso, coloca as variveis login e nome,e redireciona para a pgina inicial do sistema. Se o login e a senha no conferem, ento redireciona para o formulrio de login, passando uma mensagem de erro via GET, isso para que no prprio formulrio de login o usurio possa ver a mensagem de erro e digitar novamente o login e a senha. A Figura 5.3 mostra o diagrama de navegao desse processo.

Aula 5 Gerenciando sesses

75

e-Tec Brasil

Formulrio Login
POST

PHP para conferir no banco


validado

Pesquisa Principal

ERRO: GET (mensagem) SELECT

Banco de Dados

Figura 5.3: Diagrama de navegao para realizar o login


Fonte: Equipe produo CEAD/IFES (2011)

No formulrio de login, vamos colocar o cdigo PHP para exibir a mensagem de erro, caso ocorra. A mensagem car acima dos campos. Voc pode colocar a mensagem em outro local, caso deseje. O programa da Figura 5.4 mostra o cdigo do formulrio formlogin.php e o programa da Figura 5.5 mostra o PHP login.php.

Figura 5.4: Formulrio de login (formlogin.php)


Fonte: Elaborada pelo autor

e-Tec Brasil

76

Programao para Web

Figura 5.5: PHP para conferir login e senha no banco (login.php)


Fonte: Elaborada pelo autor

A pgina principal o ponto de entrada do seu sistema. Crie essa pgina com links para todas as operaes que implementamos, como cadastrar e pesquisar cliente, cadastrar e pesquisar produtos, cadastrar e pesquisar vendas, e assim por diante.

5.4.2 Vericar a sesso


Uma vez autenticado o usurio e criada a sesso, todas as outras pginas, no seu incio, iro validar se a sesso foi criada, para evitar que uma pgina seja acessada sem passar pelo processo de login. Uma pgina somente acessada se existe uma sesso. Uma sesso existe somente se o usurio foi autenticado. Para vericar se o usurio foi autenticado, basta vericar se a varivel login est registrada na sesso, pois ela somente adicionada quando o login e a senha so validados. Se no estiver, porque o usurio no est logado; nesse caso, redirecione para o formulrio de login. Como todas as pginas devem vericar se o usurio est logado, vamos colocar esse cdigo em um arquivo separado, e todas as pginas incluem-no com o comando include_once. O programa da Figura 5.6 mostra esse cdigo, chamado validar.php.

Figura 5.6: Vericar se o usurio est logado (validar.php)


Fonte: Elaborada pelo autor

Aula 5 Gerenciando sesses

77

e-Tec Brasil

Em todas as pginas do seu sistema, basta incluir o validar.php no incio, antes de qualquer coisa, e da seguinte forma, conforme Figura 5.7.

Figura 5.7: Incluir o programa de validao de sesso em cada pgina


Fonte: Elaborada pelo autor

5.4.3 Fazer logout


Para sair do seu sistema, basta colocar um link sair ou logout na pgina principal, que aponte para o PHP do programa da Figura 5.2. Com essas pginas, completamos nosso site com a autenticao de usurios, muito utilizada nos sites de hoje em dia. Mas a sesso no serve apenas para isso. Ela pode ser usada para a troca de informao entre as pginas. Uma pgina adiciona uma informao na sesso e outra pgina a recupera. Isso pode ser feito nas pginas de alterao de dados, na Aula 4, para transmitir o cdigo do cliente e seus dados para as pginas que exibiro e alteraro os dados do cliente. Tente voc fazer essa mudana.

Resumo
Nesta aula, voc viu tudo o que precisava para criar sistemas web com acesso a banco de dados e autenticao de usurios. Porm a programao que zemos misturou vrias linguagens em um nico arquivo. Na prxima aula, veremos uma metodologia para organizar melhor os arquivos, separando a programao da parte visual (HTML e CSS), regras do negcio (PHP) e manipulao do banco de dados (SQL). A seguir, voc encontra na Tabela 5.1 os principais comandos para trabalhar com sesses.
Tabela 5.1: Principais comandos para trabalhar com sesses
FUNO session_start session_destroy $_SESSION unset session_unset Destri a sesso. Array com os dados compartilhados pela sesso. Elimina UMA varivel da sesso. Eliminam TODAS as variveis da sesso. Nome da varivel entre colchetes. Nome da varivel da sesso. DESCRIO Cria uma nova sesso ou acessa uma j criada. PARMETROS

Fonte: Adaptado Soares (2007)

Atividades de aprendizagem
Implemente o processo de autenticao do usurio para todas as pginas do seu sistema, como mostrado acima. Crie a pgina principal com os links para todas as suas operaes e para a operao sair (logout). Tente acessar diretamente uma pgina, sem se logar, para ver o que acontece.

e-Tec Brasil

78

Programao para Web

Aula 6 Caso de uso: aplicao utilizando o padro MVC


Objetivos
Conhecer o padro de desenvolvimento de sistemas web MVC. Construir um sistema web no padro MVC.

Chegamos nossa ltima aula de nossa disciplina. Esta Aula voltada, principalmente, para aqueles que iro trabalhar com desenvolvimento de sistemas, seja web ou no. Vamos aprender a organizar melhor o cdigo para que o processo de desenvolvimento seja produtivo, com melhor qualidade e com menos erros. E caso tenha erros, que sejam de fcil correo. Para isso, vamos aprender uma metodologia que separa o sistema em camadas, o MVC.

6.1 O que MVC?


O padro MVC (do ingls Model-View-Controller) separa os dados (Model) do layout (View). Dessa forma, alteraes feitas no layout no afetam a manipulao de dados, que por sua vez podero ser reorganizados sem alterar o layout. O problema resolvido introduzindo-se um componente entre a manipulao dos dados e a apresentao: o uxo da aplicao (Controller). O MVC usado em padres de projeto de software, mas abrange mais a arquitetura de uma aplicao do que tpico para um padro de projeto.

Controller O controller (controlador) responsvel por transformar eventos gerados pela interface em ao de negcios.

6.1.1 Vantagens
Como o modelo MVC gerencia mltiplos visualizadores usando o mesmo modelo, fcil manter, testar e atualizar sistemas mltiplos. Como a parte visual separada do modelo de negcio, possvel alterar a parte visual sem alterar o sistema todo. muito simples adicionar novas funcionalidades apenas incluindo seus visualizadores e controles sem alterar o que j foi feito, tornando a aplicao

Aula 6 Caso de uso: aplicao utilizando o padro MVC

79

e-Tec Brasil

escalvel. possvel ter desenvolvimento em paralelo para o modelo, visualizador e controle, pois so independentes, ganhando em produtividade. Dentre as principais vantagens podemos destacar: reaproveitamento de cdigo; facilidade de manuteno; integrao de equipes e/ou diviso de tarefas; camada de persistncia independente; implementao de segurana; facilidade na alterao da interface da aplicao; aplicao escalvel.

6.1.2 Desvantagens
As vantagens superam em muito as desvantagens, mas mesmo assim podemos citar alguns pontos desfavorveis: requer uma quantidade maior de tempo para analisar e modelar o sistema; requer pessoal especializado; no aconselhvel para pequenas aplicaes.

6.2 Estrutura do MVC


O MVC possui trs componentes: modelo, viso e controlador (veja Figura 6.1). a) Modelo representa os dados da aplicao e as regras de negcio que governam o acesso e a modicao dos dados. O modelo fornece ao controlador a capacidade de acessar as funcionalidades da aplicao encapsuladas pelo prprio modelo. Pode ainda ser subdividido em regras do negcio e persistncia dos dados. b) Viso renderiza o contedo de uma parte particular do modelo e encaminha para o controlador as aes do usurio; acessa tambm os dados do modelo via controlador e dene como esses dados devem ser apresentados. Apresenta os dados para o usurio sem se preocupar com a origem deles. c) Controlador dene o comportamento da aplicao. ele que interpreta as aes do usurio e as mapeia para chamadas do modelo. Com base na ao do usurio e no resultado do processamento do modelo,

e-Tec Brasil

80

Programao para Web

o controlador seleciona uma visualizao a ser exibida como parte da resposta solicitao do usurio. H, normalmente, um controlador para cada conjunto de funcionalidades relacionadas.
VISO (Navegador)
Figura 6.1: Estrutura do MVC
Fonte: Equipe produo CEAD/IFES (2011)

CONTROLADOR

MODELO (Regras de Negcio)

6.3 Alterando nosso sistema para o MVC


As pginas do nosso sistema esto todas misturadas. Temos pginas com a interface visual, regras de negcio e manipulao de dados em um nico local. Isso diculta a produtividade do processo de desenvolvimento e, caso tenha erro, ca mais difcil encontr-lo. Como vocs mesmo podem ter observado, algumas pginas possuem vrias linguagens misturadas, como: o HTML para a parte visual; o PHP para a validao e regras de negcio; e o SQL para a persistncia de dados. Nossos exemplos foram desenvolvidos dessa forma de propsito. Primeiro, para mostrar como seria o raciocnio lgico do processo de pginas web. E depois para que voc possa comparar com uma arquitetura comprovadamente melhor para desenvolvimento de sistemas. Portanto, vamos agora separar nossos cdigos. Tudo que for para a interface visual, seja para entrada de dados ou para a sada de dados (por exemplo, mensagens de erro), ser separado na camada da viso. Criaremos um arquivo, chamado controlador.php que ir receber todas as requisies da interface grca, fazer a validao dos dados e chamar as funes correspondentes camada do modelo, que por sua vez, caro em arquivos separados. Na camada do modelo caro as funes em PHP referentes ao que o sistema faz, ou seja, as suas operaes. Para que o sistema que independente do banco de dados a ser usado, criaremos uma camada, chamada persistncia, que far o mapeamento das funes do modelo para o banco de dados MySQL. Se o banco de dados mudar, o que pode acontecer com qualquer sistema, basta alterarmos apenas as funes da camada de persistncia, sem ter que alterar todas as pginas do sistema.

Aula 6 Caso de uso: aplicao utilizando o padro MVC

81

e-Tec Brasil

6.3.1 Persistncia dos dados


Vamos comear separando as funes referente ao acesso ao banco de dados MySQL. Essas funes so todas aquelas que comeam com mysql_. Vamos mapear as funes da camada do modelo nas funes do MySQL. Poderamos fazer uma camada de persistncia para cada tipo de banco de dados. O programa da Figura 6.2 mostra como seria essa persistncia.

Figura 6.2: Camada de persistncia dos dados (persistencia.php)


Fonte: Elaborada pelo autor

Se for usar outro banco de dados, basta implementar outra camada, alterando o cdigo dentro de cada funo. Por exemplo, se o banco fosse o PostgreSQL, as funes seriam: pq_connect, pg_select_bd, pg_query, etc.

6.3.2 Modelo de negcio


Nesta camada cam as funes referentes aos casos de uso do sistema, ou seja, as funcionalidades que o sistema ter. Por exemplo, as operaes que fazemos com o cliente so: incluir, alterar, excluir e pesquisar. Ento, cada uma dessas operaes ser transformada em uma funo. Podemos separar as funes de acordo com os elementos do sistema. Por exemplo, todas as operaes referentes ao cliente caro em um arquivo chamado de clientes.php. As operaes sobre os produtos caro em outro arquivo, e assim por diante.

e-Tec Brasil

82

Programao para Web

A camada do modelo de negcio no gera nenhum comando em HTML. O retorno, sucesso ou fracasso retornado para o controlador que ser responsvel por montar a pgina de resposta. O programa da Figura 6.3 mostra como caro as operaes com os clientes. o mesmo cdigo j visto, porm em nova arquitetura. Perceba que quando for necessrio acessar o banco de dados, as funes chamadas sero as da camada de persistncia do programa da Figura 6.2.

Aula 6 Caso de uso: aplicao utilizando o padro MVC

83

e-Tec Brasil

Figura 6.3: Operaes com os Clientes (clientes.php)


Fonte: Elaborada pelo autor

A funo validarCampos foi separada porque repetida no incluir e alterar, que caram mais simples e muito parecidas. Todas as funes seguem o mesmo padro: validar os campos, criar a conexo com o banco de dados e chamar a funo da camada de persistncia.

6.3.3 Controlador
O controlador ser apenas um arquivo PHP. Ele receber da interface visual o cdigo da operao e os dados, e chamar a funo correspondente da camada do modelo, retornando a mensagem de erro ou sucesso para a pgina que originou a requisio. Todas as pginas de interface visual devero ter um campo que informa qual operao o controlador chamar. Em nossos exemplos, esse campo ser chamado de operao. As possveis operaes sero todas aquelas da camada do modelo, por exemplo, as funes do arquivo clientes.php do programa da Figura 6.3: incluirCliente, alterarCliente, excluirCliente, etc. O inserir e alterar enviam os dados para o servidor com o mtodo POST e o excluir envia com o mtodo GET. Para padronizar o controlador, vamos adotar o mtodo GET. Portanto, os formulrios devero ser alterados. O programa da Figura 6.4 mostra um exemplo da estrutura do controlador.

e-Tec Brasil

84

Programao para Web

Figura 6.4: Estrutura do controlador (controlador.php)


Fonte: Elaborada pelo autor

Aula 6 Caso de uso: aplicao utilizando o padro MVC

85

e-Tec Brasil

6.3.4 Camada da viso


Pginas COM formulrio para as pginas com formulrio (em nosso exemplo: formclientes.php, formaltcli.php e login.php) as mudanas sero as seguintes: a primeira passar a enviar os dados para o controlador. Para padronizar o controlador, os formulrios tambm passaro os dados via GET. A segunda colocar um campo escondido para denir qual a operao que o controlador far. A terceira colocar a mensagem de resposta fornecida de volta pelo controlador. Para enviar os dados para o controlador com o mtodo GET, basta alterar os atributos action e method, da seguinte forma, conforme a Figura 6.5.

Figura 6.5: Alterando o mtodo de envio do formulrio para GET


Fonte: Elaborada pelo autor

A segunda mudana, conforme j mencionado, colocar um campo escondido para indicar ao controlador qual a operao ele far. Como exemplo, chamaremos esse campo de operao. O valor a ser passado (atributo value) dever ser o mesmo valor com o qual o controlador far a comparao. Cada operao dever ter um valor diferente. Por exemplo: incluirCliente, alterarCliente, excluirCliente, etc., conforme a Figura 6.6.

Figura 6.6: Campo operao oculto (hidden)


Fonte: Elaborada pelo autor

A terceira mudana, conforme j mencionado, colocar em algum lugar da sua pgina a mensagem de resposta, caso tenha, de sucesso ou falha da operao. Essa mensagem ser enviada do controlador para a pgina, usando o mtodo GET. Em nosso exemplo, veja o controlador, o nome do campo foi chamado de mensagem. O cdigo em PHP a ser inserido ser como o apresentado na Figura 6.7 a seguir.

Figura 6.7: Exibindo a mensagem de resposta


Fonte: Elaborada pelo autor

e-Tec Brasil

86

Programao para Web

Pginas SEM formulrio para as pginas que no possuem formulrio, apenas links para outras pginas, enviando os campos via mtodo GET, as mudanas sero apenas alterar o link para o controlador e adicionar o campo que corresponde operao. Em nosso exemplo, a nica mudana ser no link do excluir da pgina de pesquisa pesqclientes.php (veja a Figura 6.8).

Figura 6.8: Link do excluir apontando para o controlador


Fonte: Elaborada pelo autor

As operaes de consulta ao banco tambm podem ser colocadas no controlador, porm o processo mais complicado, requer um estudo mais aprofundado do MVC. Por enquanto deixe da forma que se encontra, dentro de pginas da camada da viso. Para quem for trabalhar com desenvolvimento de sistemas web, ser muito importante apronfudar-se mais nessa metodologia. Perceba que antes, a cada pgina de formulrio, tnhamos uma pgina em PHP para realizar aquela operao. Em um sistema maior, a quantidade de arquivos para organizar seria muito grande. Com o MVC, continuamos com as pginas da interface grca, porm as pginas em PHP no servidor caram bastante reduzidas. Temos o controlador, o arquivo de persitncia e arquivos nos quais podemos agrupar as funes de cada elemento do sistema. Por exemplo, todas as operaes referentes a produto cariam em um arquivo, as operaes referentes a vendas em outro arquivo, e assim por diante.

Resumo
Nesta Aula, conhecemos o padro de desenvolvimento de sistemas web MVC. Vimos como organizar melhor o cdigo para que o processo de desenvolvimento seja mais produtivo, com melhor qualidade e com menos erros. Aprendemos a separar a programao da parte visual (HTML e CSS), regras do negcio (PHP) e manipulao do banco de dados (SQL). No m, alteramos uma parte do nosso sistema web de exemplo para o padro MVC. Caro estudante, chegamos ao nal desta disciplina. Espero que voc tenha gostado e que seja capaz de desenvolver sistemas web. Diverti-me criando

Aprender mais sobre MVC muito importante caso voc pretenda trabalhar com programao web. Seguem alguns links: http://www.dsc.ufcg.edu. br/~jacques/cursos/map/html/ arqu/mvc/mvc.htm http://codeigniterbrasil.com/ passos-iniciais/mvc-modelview-controller/ http://www.tiagolemos.com. br/2009/07/10/o-que-e-o-mvcmodel-view-controller/ http://msdn.microsoft.com/enus/library/ms978748.aspx.

Aula 6 Caso de uso: aplicao utilizando o padro MVC

87

e-Tec Brasil

essas pginas e tambm aprendi um pouquinho mais sobre PHP. Mas isso no tudo! Temos muito mais recursos em PHP que no daria tempo de estudar nesta disciplina. Caso voc se interesse, veja as referncias no nal de cada aula e na seo Referncias.

Atividades de aprendizagem
1. Faa as alteraes do seu sistema para o MVC. Comece com as operaes sobre os clientes, como descrito acima. 2. Acrescente no MVC as operaes com os produtos. Comece criando o arquivo com as funes referentes a produtos. Depois altere o controlador para fazer a ligao das pginas visuais com essas funes. 3. Acrescente no MVC as operaes de login. No controlador teremos mais um else if para a validao do login e senha e criao da sesso. Nas demais pginas, coloque o PHP para vericar se a sesso foi criada, como na Aula 5.

e-Tec Brasil

88

Programao para Web

Referncias
DAVIS, Michele E.; PHILLIPS, Jon A. Aprendendo PHP e MySQL. Rio de Janeiro: Alta Books, 2008. SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007. GUTMANS, Andi; BAKKEN, Stig Saether; RETHANS, Derick. PHP 5: programao ponderosa. Rio de Janeiro: Alta Books, 2005. MELO, Alexandre Altair de; NASCIMENTO, Maurcio G. F. PHP prossional. 2 ed. So Paulo: Novatec, 2007. MILANI, Andr. Construindo aplicaes web com PHP e MySQL. So Paulo: Novatec, 2010. NIEDERAUER, Juliano. Desenvolvendo websites com PHP. 2 ed. So Paulo: Novatec, 2004. WELLING, Luke; THOMSON, Laura. PHP e MySQL: desenvolvimento web. 3. ed. Rio de Janeiro: Elsevier, 2005.

Referncias

89

e-Tec Brasil

Currculo do professor-autor
Graduado em Cincia da Computao pela Universidade Federal de Viosa-MG (1997) e mestre em Engenharia de Produo/Pesquisa Operacional pela UFRJ/ COPPE (2000). Trabalhou trs anos como Analista de Sistemas e lder de projeto pela DBA Engenharia de Sistemas prestando servios de desenvolvimento de sistemas para a Caixa Econmica Federal, no Rio de Janeiro. Foi professor do Curso de Cincia da Computao da Faculdade de Aracruz (FACHA, hoje FAACZ) de 2002 a 2007. professor efetivo do Instituto Federal do Esprito Santo (IFES) desde 2006, lecionando disciplinas para os cursos: Tcnico em Informtica, Superior de Tecnologia em Redes de Computadores e Sistemas de Informao, onde atua como coordenador. Na EaD, trabalha desde 2008 como professor-autor-formador e tutor a distncia nos cursos do IFES: Tecnlogo em Anlise e Desenvolvimento de Sistemas e Tcnico em Informtica. Para mais informaes, veja o currculo completo na Plataforma Lattes:

http://lattes.cnpq.br/4033155608776526

e-Tec Brasil

90

Programao para Web