Baixe o app para aproveitar ainda mais
Prévia do material em texto
Direitos: Esta obra foi disponibilizada sob uma Licença Creative Commons Atribuição Uso não-comercial 3.0 Brasil. Direitos de distribuição e publicação: CAPES/MEC, conforme Parágrafo Único, do Artigo 5º, da Resolução CD/FNDE nº 24 de 04 de Junho de 2008. Universidade Federal de Juiz de Fora Reitor: Henrique Duque de Miranda Chaves Filho Instituto de Ciências Exatas Diretor: Rubens de Oliveira Departamento de Ciência da Computação Chefe: Stênio Sã Rosário Furtado Soares Curso de Licenciatura em Computação Coordenação: Fernanda Claudia Alves Campos Organização Daves Marcio Silva Martins Eduardo Barrére Comissão Editorial Eduardo Barrére Fernanda Claudia Alves Campos Revisão Gramatical Hortência Cezar Pinto Editoração Eletrônica Eduardo Barrére Martins, Daves Marcio Silva. Barrére, Eduardo. Programação para Web II / Daves Marcio Silva Martins e Eduardo Barrére– 2013. 72 f. : il. Material Didático — Curso de Licenciatura em Computação da Universidade Federal de Juiz de Fora, Juiz de Fora, 2012. 1. Educação à Distância. 2. Linguagem PHP. 3. Internet. I. Título. Apresentação Este material foi desenvolvido com a finalidade de abordar os temas previstos na disciplina Programação para Web II, trazendo os conceitos básicos relacionados ao desenvolvimento de páginas dinâmicas para a Web, com destaque para a linguagem PHP. O conteúdo foi desenvolvido quase em sua totalidade pelo professor Daves e revisado pelo professor Barrére, com exceção do capítulo 4 que é de sua autoria. Iconografia Conheça os diversos ícones utilizados nos materiais didáticos desenvolvidos pelos professores e tutores do curso de Licenciatura em Computação – DCC/UFJF: Pesquise. Exercícios. Material complementar (texto, vídeo, etc.) disponível na Internet. Leitura Complementar. Comentário do Autor. Tome nota. Conclusão ou síntese de conteúdo. Fique atento. Sumário 1. Introdução ................................................................................................................................ 7 1.1 Como surgiu? .................................................................................................................... 8 1.2 O que pode ser feito com PHP? ........................................................................................ 9 1.3 Funcionamento de uma requisição web .......................................................................... 9 1.4 Desenvolvimento Web ................................................................................................... 12 1.5 Como Executar um Script PHP. ....................................................................................... 12 1.5.1 Criando o Primeiro Programa com PHP .................................................................. 13 2. A Linguagem PHP ................................................................................................................... 16 2.1 Nomes de variáveis ......................................................................................................... 16 2.2 Imprimindo código HTML ............................................................................................... 17 2.3 Imprimindo informações de ambiente ........................................................................... 17 2.4 Comentários ................................................................................................................... 18 2.5 Tipos Suportados ............................................................................................................ 18 2.5.1 Inteiros (integer ou long) ........................................................................................ 19 2.5.2 Números em Ponto Flutuante (double ou float) .................................................... 19 2.5.3 Strings ...................................................................................................................... 19 2.5.4 Objetos .................................................................................................................... 20 2.6 Transformação de tipos .................................................................................................. 21 2.6.1 Coerções .................................................................................................................. 21 2.6.2 Transformação explícita de tipos ............................................................................ 22 2.7 Constantes ...................................................................................................................... 22 2.7.1 Constantes pré-definidas ........................................................................................ 22 2.7.2 Definindo constantes .............................................................................................. 22 2.8 Operadores ..................................................................................................................... 23 2.8.1 Aritméticos .............................................................................................................. 23 2.8.2 strings ...................................................................................................................... 23 2.8.3 Atribuição ................................................................................................................ 23 2.8.4 Comparação ............................................................................................................ 24 2.9 Estruturas de Controle.................................................................................................... 24 2.9.1 Comandos de seleção .............................................................................................. 25 2.9.1.1 if ........................................................................................................................... 25 2.9.1.2 switch ................................................................................................................... 25 2.9.2 Comandos de repetição .......................................................................................... 26 2.9.2.1 while .................................................................................................................... 26 2.9.2.2 do... while ............................................................................................................ 26 2.9.2.3 for ........................................................................................................................ 26 2.10 Funções ........................................................................................................................... 27 2.11 Trabalhando com Arrays ................................................................................................ 27 2.12 Bibliotecas ....................................................................................................................... 29 2.13 Data e Hora ..................................................................................................................... 30 3. Desenvolvimento Web com PHP ........................................................................................... 32 3.1 Método GET .................................................................................................................... 32 3.2 Método POST ..................................................................................................................33 3.3 Utilizando GET e POST .................................................................................................... 34 3.3.1 Exemplo utilizando o método GET .......................................................................... 34 3.3.2 Exemplo utilizando o método POST ........................................................................ 36 3.4 Resumindo o uso de formulários.................................................................................... 38 4. Sessões e Cookies .................................................................................................................. 40 4.1 Cookies ............................................................................................................................ 40 4.2 Sessão ............................................................................................................................. 45 5. Banco de Dados...................................................................................................................... 48 5.1 Conceitos de Banco de Dados ........................................................................................ 48 5.2 Integração PHP com MySQL ........................................................................................... 49 5.2.1 Criação do Banco de Dados ........................................................................................ 49 5.2.2 Inserindo registro na tabela no Banco de Dados ........................................................ 53 5.2.3 Listando os registros de uma tabela no Banco de Dados ........................................... 57 5.2.4 Excluindo os registros de uma tabela no Banco de Dados ......................................... 59 5.2.1 Alterando os registros de uma tabela no Banco de Dados ........................................ 62 5.2.2 Realizando uma pesquisa no banco de dados ............................................................ 67 6. Referências ............................................................................................................................. 71 EADDCC035 – Programação para Web II 7 1. Introdução Quando pensamos em Web 2.0, vem a mente a ideia de “faça você mesmo”, interatividade, multimídia (principalmente imagens e vídeos). Para implementar tais recursos é necessária uma web mais dinâmica e menos estática (como vimos com a linguagem HTML). Outro desafio são as aplicações para web, que trazem a necessidade de acesso a banco de dados e segurança das informações. Tentando resolver esses e outros desafios, foram criadas/adaptadas diversas linguagens que, juntamente com o HTML, tornam essas ações possíveis. Podemos destacar PEARL, CGI, JAVA, PHP, C#, entre outras. No contexto desta disciplina vamos utilizar a linguagem PHP por diversos fatores, entre eles: simplicidade de codificação, grande aceitação no mercado, IDE de desenvolvimento simples e gratuita, funciona bem para pequenos servidores. PHP1 é um acrônimo recursivo (abreviatura que se refere a si mesma) para "PHP: Hypertext Preprocessor”. É uma linguagem de script Open Source de uso geral, muito utilizada e especialmente interessante para o desenvolvimento de aplicações Web mesclada com códigos HTML. Na área de computação, uma antiga tradição da comunidade hacker é escolher acrônimos e abreviaturas que se referiram humoristicamente a si mesmos ou a outras abreviaturas. Outro exemplo disso é GNU ("GNU's not UNIX") de Richard Stallman. É uma linguagem que permite criar sites WEB dinâmicos, possibilitando uma interação com o usuário através de formulários, parâmetros da URL e âncoras. A diferença de PHP com relação a linguagens semelhantes a JavaScript é que o código PHP é executado no servidor, sendo enviado para o cliente apenas HTML puro (demonstraremos isso mais a frente). Desta maneira é possível interagir com bancos de dados e aplicações existentes no servidor, com a vantagem de não expor o código fonte para o cliente. Isso pode ser útil quando o programa está lidando com senhas ou qualquer tipo de informação confidencial. 1 www.php.net EADDCC035 – Programação para Web II 8 1.1 Como surgiu? A linguagem PHP foi concebida em 1994 por Rasmus Lerdorf. As primeiras versões não foram disponibilizadas, tendo sido utilizadas em sua página pessoal apenas para que ele pudesse ter informações sobre as visitas que estavam sendo feitas. A primeira versão utilizada por outras pessoas foi disponibilizada em 1995, e ficou conhecida como “Personal Home Page Tools” (ferramentas para página pessoal). Era composta por um sistema bastante simples que interpretava algumas macros e alguns utilitários que rodavam “por trás” das páginas: um livro de visitas, um contador e algumas outras coisas. Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI, o “FI” veio de outro pacote escrito por Rasmus que interpretava dados de formulários HTML (Form Interpreter). Ele combinou os scripts do pacote Personal Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir com o projeto. Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997 esse número subiu para mais de 50.000. Nessa época houve uma mudança no desenvolvimento do PHP. Ele deixou de ser um projeto de Rasmus com contribuições de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a versão 3. O lançamento do PHP4, ocorrido em 22/05/2000, trouxe muitas novidades aos programadores de PHP. Uma das principais foi o suporte a sessões, bastante útil pra identificar o cliente que solicitou determinada informação. Além das mudanças referentes à sintaxe e novos recursos de programação, o PHP4 trouxe como novidade um otimizador chamado Zend, que permite a execução muito mais rápida de scripts PHP. A empresa que produz o Zend promete para este ano o lançamento de um compilador de PHP. Códigos compilados serão executados mais rapidamente, além de proteger o código fonte da aplicação. Atualmente, o PHP esta na versão 5. Como as primeiras versões do PHP conseguiram uma plataforma potente e estável para a programação de páginas do lado do servidor. O principal objetivo de PHP5 foi melhorar os mecanismos de orientação à objetos. EADDCC035 – Programação para Web II 9 1.2 O que pode ser feito com PHP? Basicamente, qualquer página ou programa web pode ser feita com PHP, como coletar dados de um formulário, gerar páginas dinamicamente ou enviar e receber cookies. A linguagem também tem como uma das características mais importantes o suporte a um grande número de bancos de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e vários outros. Construir uma página baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP. Além disso, PHP tem suporte a outros serviços através de protocolos como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda é possível abrir sockets e interagir com outros protocolos. 1.3 Funcionamento de uma requisição web O que acontece quando digitamos um endereço no nosso navegador? Figura 1 – Endereço Web De forma simplificada e para facilitar o entendimento, quando digitamos um endereço “www.enderecosite.com.br”, ele representa a identificação (nome relacionado a um endereço IP) de uma máquina em algum lugar do mundo. A primeira tarefa é identificar onde está essa maquina. Ao digitarmosesse endereço no browser, o mesmo se encarrega de iniciar um trabalho para que esse nome possa ser traduzido (resolvido) em um número IP. Os responsáveis por essa tradução são os servidores DNS (Domain Name Server). Na disciplina de Fundamentos de Redes de Computadores temos uma descrição de como essa tradução acontece. Uma vez feita essa tradução, sabemos onde encontrar a máquina que desejamos nos comunicar. No caso da web, essas máquinas são conhecidas como servidores Web, que tem como função, receber uma requisição ou uma solicitação e devolver um arquivo solicitado. A Figura 3 ilustra o funcionamento de um servidor Web. EADDCC035 – Programação para Web II 10 Figura 2 – Servidor web Portanto, toda vez que acessamos um site a partir de nosso Navegador web (Browser), a pagina que você visualiza é o resultado de um arquivo, imagens, sons vindos do servidor até a sua máquina. Então, você deve se perguntar: Como é feito? Como elas se propagam? Todas estas páginas possuem um código fonte escrito numa linguagem chamada HTML (Linguagem de Marcação de Hipertexto ou Hyper Text Markup Language). Por isso é necessário que tenhamos um conhecimento mínimo sobre HTML. A Figura 3 ilustra uma solicitação HTML. Figura 3 – Solicitação de uma página HTML Como o PHP atua nesse cenário, como podemos perceber uma requisição web nada mais é do que um envio de um arquivo HTML que será interpretado pelo browser, pois utilizamos o protocolo http (HyperText Transfer Protocol). Então o PHP atua na EADDCC035 – Programação para Web II 11 geração do HTML, gerando um HTML dinâmico e não fixo como vimos o HTML. Veja a imagem a seguir que ilustra o funcionamento do PHP. Figura 4 – Solicitação de uma página php Vejamos como um código PHP pode virar uma página HTML. A Figura a seguir ilustra esse processo. Figura 5 – Transformação do código php em html A página PHP terá uma reposta diferente dependendo do valor da variável &idade, por isso dizendo que o PHP gera uma página dinâmica. Neste exemplo, a variável &idade, que nesse momento não importa como foi conseguida, vai definir o EADDCC035 – Programação para Web II 12 tipo de página a ser gerada. O mais interessante de se verificar é que o usuário só verá o código HTML gerado. 1.4 Desenvolvimento Web Desenvolvimento Web é o termo utilizado para descrever o desenvolvimento de sites para internet e intranet. De forma geral, está relacionado com a programação de aplicações e sites, conFiguração de servidores de aplicação, mas também pode estar relacionado ao projeto visual (design e interatividade) de páginas. O desenvolvimento web pode variar desde simples páginas estáticas à aplicações ricas, comércios eletrônicos ou redes sociais. Para tal, faz-se uso de diversas tecnologias, a saber: No lado Cliente: podemos utilizar tecnologias tais como: CSS, HTML, XHTML, Javascript, AJAX, Flash. No lado servidor: podemos utilizar programas como PHP, ASP, .NET, Java entre outros. Dados: serão armazenados em um Banco de dado tais como MySQL, visto nessa apostila, PostgreSQL, SQLite, entre outros. 1.5 Como Executar um Script PHP. Para conseguir executar um Script PHP, não é só dar um clique duplo no arquivo (como fazemos com Arquivos HTML). Nós precisamos instalar um Servidor Web e o Interpretador da Linguagem PHP. Um dos servidores web mais utilizados é o Apache. Ele foi criado em 1995 por Rob McCool. Numa pesquisa realizada em dezembro de 20072, foi constatado que a utilização do Apache representa cerca de 47.20% dos servidores ativos no mundo. Em janeiro de 20133, o Apache serviu aproximadamente 55% de todos os sites e mais de 59% dos milhões de sites mais movimentados. Um servidor de banco de dados também é necessário quando desenvolvemos aplicações que envolvam armazenamento e recuperação de dados. O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como 2 http://news.netcraft.com/archives/2007/12/29/december_2007_web_server_survey.html 3 http://news.netcraft.com/archives/2013/01/07/january-2013-web-server-survey-2.html#more-7696 EADDCC035 – Programação para Web II 13 interface. É atualmente um dos bancos de dados mais populares. Entre os usuários do banco de dados MySQL estão: NASA, Friendster, Banco Bradesco, Dataprev, HP, Nokia, Sony, Lufthansa, U.S. Army, U.S. Federal Reserve Bank, Associated Press, Alcatel, Slashdot, Cisco Systems e Google. Se no computador não tem estes softwares instalados, então não é possível “rodar” as páginas PHP. Em outras palavras, o computador tem que estar com os softwares necessários para “ser” um pequeno e completo servidor web. Para resolver este problema foram criados uma série de pacotes, permitindo que o usuário tivesse no seu computador os softwares básicos para o desenvolvimento de sistemas web, sem a necessidade de estar o tempo todo transferindo os arquivos para um servidor remoto. Alguns deles: Apache2Triad: http://apache2triad.net EasyPHP: http://www.easyphp.org WAMP: http://www.wampserver.com Cada um desses pacotes vem com: servidor de páginas, PHP e banco de dados. Com um pacote desse instalado você tem um servidor para sua intranet, pronto para utilizá-lo. Basta coloca-lo na rede. De qualquer forma, temos a opção de instalar separadamente cada um desses programas. No Linux a instalação deverá ser feita separadamente ou ativada durante a instalação do Sistema Operacional. Nos sites vocês encontram todos os passos para instalar e rodar o seu servidor web. Pessoalmente recomendamos o WAMP. Caso tenha um computador ou notebook a sua disposição, faça essa instalação. 1.5.1 Criando o Primeiro Programa com PHP Após ter realizado a conFiguração de um dos pacotes acima em seu computador, vamos criar nosso primeiro programa na Linguagem PHP. Para isso precisamos de um editor, que pode ser: qualquer editor de textos (Bloco de Notas, WordPad, etc.), Eclipse, BlueFish (editor utilizado na apostila de Programação para Web I), DreamWeaver ou qualquer outro editor de páginas HTML com suporte a múltiplas EADDCC035 – Programação para Web II 14 linguagens. Após escolher o seu editor preferido ou disponível no momento, digite o código: 1 <?php 2 echo "<p> Esse é o primeiro programa que escrevo em PHP.</p>"; 3 ?> Código do programa primeiro.php Salve o arquivo na pasta www (no caso de quem instalou o WAMP no diretório padrão é: c:\wamp\www), ou pasta similar dependendo do pacote instalado, com o nome primeiro.php. Por enquanto, não se preocupe se não estiver entendendo direito o programa. Caso tenha alterado o local da instalação durante a execução do assistente, o endereço onde devemos salvar nossos Arquivos PHP (conhecido como Document Root) será diferente. O arquivo deve ser salvo com a extensão ".php". Se você salvar como ".html", o código PHP não será executado. Pra finalizar, abra seu navegador e digite na Barra de endereços “http://localhost/primeiro.php” e pressione a tecla <Enter>. Deverá ser exibida uma página conforme abaixo: Figura 6 – Resultado do Primeiro exemplo php Toda vez que você quiser testar Scripts PHP, certifique-se que o programa instalado tenha sido iniciado (vide tutorial do pacote). No WAMP, quando os serviços (softwares) estão ativos, o ícone fica verde. Caso não esteja, execute “Start All Services”, disponível no menu queaparece após clicar com o botão esquerdo do mouse sobre o ícone. Na Figura 6, a palavra “é” aparece errada (sem acento e confusa: “é”). Qual o motivo? EADDCC035 – Programação para Web II 15 Vamos fazer outro exemplo e observar a “mágica” que ocorre. Considere o código abaixo: 1 <?php 2 echo "<h1> Segundo exemplo</h1>"; 3 echo "<p> Temos um texto qualquer.</p>"; 4 ?> Código do programa segundo.php A execução desse programa e posterior exibição no navegador é apresentada na Figura a seguir. Figura 7 – Resultado do Segundo exemplo php Vamos agora observar a diferença entre o que foi gerado e o que foi exibido. Para tal, selecionamos a exibição do código fonte da página exibida pelo navegador. Tabela 1 – Comparação entre o código gerado e o exibido Código editado no BlueFish e salvo como segundo.php Código fonte exibido pelo navegador <?php echo "<h1> Segundo exemplo</h1>"; echo "<p> Temos um texto qualquer.</p>"; ?> <h1> Segundo exemplo</h1> <p> Temos um texto qualquer.</p> Ao solicitar que o navegador exiba o arquivo: http://localhost/segundo.php, pelo fato de solicitarmos a execução que algo que está no localhost, automaticamente o servidor Apache é acionado e ele, por sua vez, aciona o PHP para interpretar o código do arquivo segundo.php e entregar para o navegador o resultado dessa interpretação (em html “puro”). Por isso o que foi recebido pelo navegador é diferente do conteúdo do arquivo que geramos, pois entre a solicitação do navegador e a entrega do código para o mesmo, tivemos a interferência do Apache e do PHP. O que acontece quando digitamos na barra de endereços do navegador: file:///C:/wamp/www/segundo.php ? Por qual motivo ? EADDCC035 – Programação para Web II 16 2. A Linguagem PHP Toda vez que criamos um arquivo com extensão “.php”, o interpretador procura por tags (âncoras) que identifiquem um trecho de código PHP, para que ele possa interpretar esse código e gerar o conteúdo HTML correspondente. O código PHP pode ser identificado pelo seguinte conjunto de tags: <?php comandos ?> <? comandos ?> Pessoalmente recomendo utilizar o primeiro (<?php), pois é o mais aceito pelos servidores. Para cada fim de linha de código tem que haver um ponto e vírgula, indicando ao sistema fim de instrução. Exemplo: 1 <?php 2 echo "<p> Esse é o primeiro programa que escrevo em PHP.</p>"; 3 ?> 2.1 Nomes de variáveis Toda variável em PHP tem seu nome composto pelo caracter $ e uma string, que deve iniciar por uma letra ou o caracter “_”. PHP é case sensitive, ou seja, as variáveis $php e $PHP são diferentes. Por isso é preciso ter muito cuidado ao definir os nomes das variáveis. Exemplo: 1 <?php 2 $var1 = 1; echo $var1; 3 ?> É bom evitar os nomes em maiúsculas, pois como veremos mais adiante, o PHP já possui algumas variáveis pré-definidas cujos nomes são formados por letras maiúsculas. EADDCC035 – Programação para Web II 17 2.2 Imprimindo código HTML Pelo fato de um script PHP geralmente ter como resultado uma página HTML, fazemos a impressão de strings que contenham as tags HTML. Para gerar esse resultado, deve ser utilizada uma das funções de impressão: echo ou print. Para utilizá- las deve-se utilizar um dos seguintes formatos: echo argumento; echo (argumento1, argumento2, ... ); print(argumento); Exemplo: Figura 8 – Utilizando os comandos echo e print 2.3 Imprimindo informações de ambiente Assim como a impressão de strings e variáveis, podemos manipular e imprimir informações do PHP e do próprio navegador. Como primeiro exemplo, vamos iremos checar qual é o tipo de navegador que o visitante está utilizando para ver a nossa página. A variável que nos interessa é a $_SERVER["HTTP_USER_AGENT"]. Figura 9 – Utilizando variáveis de ambiente De fato, para fazer isto nós teremos que checar qual é o valor da string agente que o navegador envia como parte de sua requisição HTTP. Esta informação é armazenada em uma variável. EADDCC035 – Programação para Web II 18 Há muitos tipos de variáveis disponíveis no PHP e $_SERVER é somente uma variável que é automaticamente disponibilizada para você pelo PHP. Uma lista de Variáveis Reservadas pode ser obtida em http://www.php.net/manual/pt_BR/reserved.variables.php Você pode pegar uma lista completa delas inserindo no seu código a seguinte função: phpinfo(); 2.4 Comentários Temos dois tipos de comentários em código PHP: Comentários de uma linha: Marca como comentário até o final da linha ou até o final do bloco de código PHP - o que vier antes. Pode ser delimitado pelo caracter “#” ou por duas barras ( // ). Comentários de mais de uma linha: Tem como delimitadores os caracteres “/*” para o início do bloco e “*/” para o final do comentário. Se o delimitador de final de código PHP ( ?> ) estiver dentro de um comentário, não será reconhecido pelo interpretador. 2.5 Tipos Suportados Pelo fato do PHP utilizar checagem de tipos dinâmica, ou seja, uma variável pode conter valores de diferentes tipos em diferentes momentos da execução do script, não é necessário declarar o tipo de uma variável para usá-la. O interpretador PHP decidirá qual o tipo daquela variável, verificando o conteúdo em tempo de execução. Ainda assim, é permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a função settype (veremos isso adiante). PHP suporta os tipos de dados: inteiro, ponto flutuante, string, array e objeto. EADDCC035 – Programação para Web II 19 2.5.1 Inteiros (integer ou long) Uma variável pode conter um valor inteiro com atribuições que sigam as seguintes sintaxes: $php = 1234; # inteiro positivo na base decimal $php = -234; # inteiro negativo na base decimal $php = 0234; # inteiro na base octal-simbolizado pelo 0 # equivale a 156 decimal $php = 0x34; # inteiro na base hexadecimal(simbolizado # pelo 0x) - equivale a 52 decimal. A diferença entre inteiros simples e long está no número de bytes utilizados para armazenar a variável. Como a escolha é feita pelo interpretador PHP de maneira transparente para o usuário, podemos afirmar que os tipos são iguais. 2.5.2 Números em Ponto Flutuante (double ou float) Uma variável pode ter um valor em ponto flutuante com atribuições que sigam as seguintes sintaxes: $php = 1.234; $php = 23e4; # equivale a 230.000 2.5.3 Strings Uma variável do tipo string suporta atribuições de duas maneiras: 1) Utilizando aspas simples ( ' ): Desta maneira, o valor da variável será exatamente o texto contido entre as aspas (com exceção de \\ e \' - ver tabela a seguir) 2) Utilizando aspas duplas ( " ): Desta maneira, qualquer variável ou caracter de escape será expandido antes de ser atribuído. Observe no exemplo a seguir que a diferença no uso das aspas está na linha 3. EADDCC035 – Programação para Web II 20 Figura 10 – Diferença no uso das aspas Tabela 1- Caracteres de escape Sintaxe Significado \n Nova linha \r Retorno de carro (semelhante a \n) \t Tabulação horizontal \\ A própria barra ( \ ) \$ O símbolo $ \’ Aspa simples \” Aspa dupla 2.5.4 Objetos PHP também permite o uso de orientação à objetos. Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma variável. Figura 11 – Exemplo de objeto PHP não possui um tipo booleano, masé capaz de avaliar expressões e retornar true ou false, através do tipo integer: é usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (geralmente 1) para representar o estado true. EADDCC035 – Programação para Web II 21 2.6 Transformação de tipos A transformação de tipos em PHP pode ser feita conforme as maneiras explicadas a seguir. 2.6.1 Coerções Quando ocorrem determinadas operações (soma, por exemplo) entre dois valores de tipos diferentes, o PHP converte o valor de um deles automaticamente (coerção). É interessante notar que se o operando for uma variável, seu valor não será alterado. O tipo para o qual os valores dos operandos serão convertidos é determinado da seguinte forma: Se um dos operandos for float, o outro será convertido para float, senão, se um deles for integer, o outro será convertido para integer. Exemplos: $php = “1”; // $php é a string “1” $php = $php + 1; // $php é o integer 2 $php = $php + 3.7; // $php é o double 5.7 $php = 1 + 1.5; // $php é o double 2.5 Como podemos notar, o PHP converte string para integer ou double mantendo o valor. O sistema utilizado pelo PHP para converter de strings para números é o seguinte: É analisado o início da string. Se contiver um número, ele será avaliado. Senão, o valor será 0 (zero); O número pode conter um sinal no início (“+” ou “-“); Se a string contiver um ponto em sua parte numérica a ser analisada, ele será considerado, e o valor obtido será double; Se a string contiver um “e” ou “E” em sua parte numérica a ser analisada, o valor seguinte será considerado como expoente da base 10, e o valor obtido será double; Vejamos alguns exemplos: $php = 1 + “10.5”; // $php == 11.5 $php = 1 + “-1.3e3”; // $php == -1299 $php = 1 + “teste10.5”; // $php == 1 $php = 1 + “10testes”; // $php == 11 $php = 1 + " 10testes"; // $php == 11 $php = 1 + "+ 10testes";// $php == 1 EADDCC035 – Programação para Web II 22 2.6.2 Transformação explícita de tipos A sintaxe do typecast de PHP é semelhante ao C: basta escrever o tipo entre parênteses antes do valor. Exemplos: Vejamos alguns exemplos: $php = 15; // $php é integer (15) $php = (double) $php // $php é double (15.0) $php = 3.9 // $php é double (3.9) $php = (int) $php // $php é integer (3) // o valor decimal é truncado Os tipos de cast permitidos são: (int), (integer) -> transforma para integer; (real), (double), (float)-> transforma para float; (string) -> transforma para string; (array) -> transforma para array; (object) -> transforma para objeto. 2.7 Constantes 2.7.1 Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações. Para ter acesso a todas as constantes pré-definidas, pode-se utilizar a função phpinfo(), que exibe uma tabela contendo todas as constantes pré-definidas, assim como conFigurações da máquina, sistema operacional, servidor HTTP e versão do PHP instalada. 2.7.2 Definindo constantes Para definir constantes utilizamos a função define. Uma vez definido, o valor de uma constante não poderá mais ser alterado. Uma constante só pode conter valores escalares, ou seja, não pode conter nem um array, nem um objeto. A assinatura da função define é a seguinte: int define(string nome_da_constante, mixed valor); EADDCC035 – Programação para Web II 23 A função retorna true se for bem-sucedida. Veja um exemplo de sua utilização a seguir: define ("pi", 3.1415926536); $circunf = 2*pi*$raio; 2.8 Operadores 2.8.1 Aritméticos Só podem ser utilizados quando os operandos são números (integer ou float). Se forem de outro tipo, terão seus valores convertidos antes da realização da operação. Tabela 2- Operadores aritméticos Operador Operação + adição - subtração * multiplicação / divisão % módulo 2.8.2 strings Só há um operador exclusivo para strings, o de concatenação (.). Vejamos o exemplo: Figura 12 – Exemplo de concatenação 2.8.3 Atribuição Existe um operador básico de atribuição e diversos derivados. Sempre retornam o valor atribuído. No caso dos operadores derivados de atribuição, a operação é feita entre os dois operandos, sendo atribuído o resultado para o primeiro. A atribuição é sempre por valor, e não por referência. EADDCC035 – Programação para Web II 24 Tabela 3- Operador de atribuição e suas derivações Operador Tipo de atribuição = atribuição simples += atribuição com adição -= atribuição com subtração *= atribuição com multiplicação /= atribuição com divisão %= atribuição com módulo .= atribuição com concatenação Vejamos um exemplo: Figura 13 – Uso do operador de atribuição 2.8.4 Comparação As comparações são feitas entre os valores contidos nas variáveis, e não as referências. Sempre retornam um valor booleano. Tabela 4- Operadores de Comparação Operador Ação == igual a != diferente de < menor que > maior que <= menor ou igual a >= maior ou igual a 2.9 Estruturas de Controle As estruturas que veremos a seguir são comuns para as linguagens de programação imperativas, bastando, portanto, descrever a sintaxe de cada uma delas, resumindo o funcionamento. Em outras palavras, é bem semelhante ao que utilizamos em linguagem C. EADDCC035 – Programação para Web II 25 2.9.1 Comandos de seleção Também chamados de condicionais, os comandos de seleção permitem executar comandos ou blocos de comandos com base em testes feitos durante a execução. 2.9.1.1 if O mais trivial dos comandos condicionais é o if. Ele testa a condição e executa o comando indicado se o resultado for true (valor diferente de zero). Ele possui duas sintaxes: Sintaxe convencional Sintaxe com ednif if (expressão) comando; ou if (expressão) { comando; ...... comando; } if (expressão): comando; . . . comando; endif; O else é um complemento opcional para o if. Se utilizado, o comando será executado se a expressão retornar o valor false (zero). Suas duas sintaxes são: Sintaxe convencional Sintaxe com ednif if (expressão) comando; else comando; ou if (expressão) { comando; ...... comando; } else { comando; ...... comando; } if (expressão): comando; . . . comando; else comando; . . . comando; endif; 2.9.1.2 switch O comando switch atua de maneira semelhante a uma série de comandos if na mesma expressão. Frequentemente o programador pode querer comparar uma variável com diversos valores, e executar um código diferente a depender de qual valor EADDCC035 – Programação para Web II 26 é igual ao da variável. Quando isso for necessário, deve-se usar o comando switch. O exemplo seguinte mostra dois trechos de código que fazem a mesma coisa, sendo que o primeiro utiliza uma série de if’s e o segundo utiliza switch: Lógica com if Lógica com switch if ($i == 0) print “i é igual a zero”; elseif ($i == 1) print “i é igual a um”; elseif ($i == 2) print “i é igual a dois”; switch ($i) { case 0: print “i é igual a zero”; break; case 1: print “i é igual a um”; break; case 2: print “i é igual a dois”; break; } 2.9.2 Comandos de repetição 2.9.2.1 while O while é o comando de repetição (laço) mais simples. Eletesta uma condição e executa um comando, ou um bloco de comandos, até que a condição testada seja falsa. Assim como o if, o while também possui duas sintaxes alternativas: Sintaxe convencional Sintaxe com ednif while (<expressão>) <comando>; while (<expressão>) { <comando>; ...... <comando>; } while (<expressão>): <comando>; . . . <comando>; endwhile; 2.9.2.2 do... while O laço do...while funciona de maneira bastante semelhante ao while, com a simples diferença que a expressão é testada ao final do bloco de comandos. O laço do...while possui apenas uma sintaxe, similar a que utilizamos em linguagem C. 2.9.2.3 for O tipo de laço mais complexo é o for. Para os que programam em C, C++ ou Java, a assimilação do funcionamento do for é natural. EADDCC035 – Programação para Web II 27 2.10 Funções O uso de funções em PHP é um pouco diferente de C, pois como não utilizamos a “tipificação” das variáveis, isso gera algumas diferenças na construção das funções. A sintaxe básica é: function nome_da_função([arg1, arg2, arg3]) { Comandos; ... ; [return <valor de retorno>]; } Algumas considerações: Como a checagem de tipos em PHP é dinâmica, o tipo de retorno não deve ser declarado, sendo necessário que o programador esteja atento para que a função retorne o tipo desejado. Por questões de leitura e compreensão do código, é interessante comentar (//) o tipo de retorno, mas isso não é obrigatório. Toda função pode opcionalmente retornar um valor, ou simplesmente executar os comandos e não retornar valor algum. Não é possível que uma função retorne mais de um valor, mas é permitido fazer com que uma função retorne um valor composto, como listas ou arrays. Em outras palavras, não existe diferença formal entre procedimentos e funções. A declaração do tipo de cada argumento também é utilizada apenas para efeito de documentação. Em PHP é possível ter valores default para argumentos de funções, ou seja, valores que serão assumidos em caso de nada ser passado no lugar do argumento (function teste($php = “testando”)). Quando algum parâmetro é declarado desta maneira, a passagem do mesmo na chamada da função torna-se opcional. 2.11 Trabalhando com Arrays O Array é um conjunto de elementos formado por pares de chaves e valores, ou seja, para acessar o valor de um elemento devemos informar a chave relacionada. Normalmente é usado para manipular grandes quantidades de informações, como leitura de informações de tabelas em Bancos de Dados por exemplo. Para criar um Array em PHP, podemos utilizar a função array. Basta passar a lista de valores como parâmetros (separados por vírgulas) conforme no exemplo a seguir. EADDCC035 – Programação para Web II 28 Figura 14 – Manipulação de Arrays As chaves de um Array também podem ser textos, ou seja, elas não estão limitadas aos números inteiros. Os Arrays que possuem chaves do Tipo string são chamados de Arrays Associativos, pois a deixam o código mais intuitivo (com associação mais visível). Vejamos um exemplo. Figura 15 – Manipulação de Arrays Associativos Os Arrays Associativos também podem ser multidimensionais. Vejamos um exemplo. Figura 16 – Manipulação de Arrays Associativos Multidimensionais Se quisermos saber a quantidade de itens num Array, podemos utilizar a função count(). A linha de código abaixo exemplifica o uso dessa função. $quantidade = count($times); EADDCC035 – Programação para Web II 29 2.12 Bibliotecas Quando estiver projetando seu site da Web, assim como nos programas convencionais, o uso de bibliotecas de funções é sempre interessante. Agora ampliamos a ideia de funções para trechos inteiros de código, mesmo sem fazer parte de uma função. Utilizamos duas formas de chamar esses códigos (armazenados em arquivos): require e include. Os recursos require( ) e include( ) são idênticos em todas as formas exceto pela manipulação de erros. include( ) produz Warning enquanto require() produzirá um Fatal Error. Em outras palavras, não hesite em utilizar require( ) para interromper o processamento de uma página pela falta de um arquivo, por exemplo. Podemos utilizar o require() de três formas distintas: <?php require 'teste.php'; require $arquivo; require ('arquivo.txt'); ?> O recurso mais utilizado é o include( ). No exemplo a seguir vamos incluir cabeçalho e rodapé e um conjunto de variáveis. Figura 17 – Uso do include() Algumas considerações: Podemos incluir um trecho de código em PHP ou mesmo HTML A chamada do include pode ocorrer em qualquer parte do código. Exemplo, linha 11. EADDCC035 – Programação para Web II 30 É inclusão ao pé da letra, ou seja, no local da chamada é colocado o código correspondente. Observe o resultado da página exibição da página gerado pela solicitação do arquivo bibliotecas.php: <html> <body> <h1> Meu site </h1>Usuario ok!<br> <center> <p>---- meusite.com -----</p> </center></body> </html> Veremos mais adiante que podemos utilizar esse recurso para controlarmos as conexões de banco de dados de forma isolada do código de cada página. Para evitar a inclusão repetida de código (principalmente variáveis e funções), utilizamos o seguinte artifício: require_once( ): Seu comportamento é similar ao da instrução require( ), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. include_once( ): inclui e avalia o arquivo especificado durante a execução de um script. Seu comportamento é similar à instrução include( ), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. Como o nome sugere, ele será incluído apenas uma vez. 2.13 Data e Hora Aqui é importante lembrar que, pelo fato de PHP ser server side (rodar no lado do servidor), toda vez que solicitarmos a data ou hora, estaremos consultando a hora do servidor. Isso é importante para diversas ações, principalmente para banco de ados e segurança, mas pode ser ruim quando queremos ter algum comportamento condicionado à hora/data do cliente (como no caso do recurso do gmail que faz com que a imagem de fundo apareça escura durante a noite e clara durante o dia). Para resolver esse tipo de caso, você pode utilizar uma linguagem que roda do lado cliente (navegador), como JavaScript por exemplo. No entanto, neste caso, se a data/hora do Sistema Operacional estiverem incorretas, as informações também serão exibida erradamente no site. EADDCC035 – Programação para Web II 31 O obtenção da data e hora é feita através da função date(). Observe o exemplo a seguir e entenda que o retorno da função está sendo uma string com os diversos componentes da data e hora no formato solicitado. Figura 18 – Exemplo de data e hora Uma lista resumida dos parâmetros para data e hora está na tabela abaixo, extraídos da página: http://php.net/manual/pt_BR/function.date.php. Tabela 5- Parâmetros da função date() Referente Caractere Descrição De Até Dia j Dia do mês sem preenchimento de zero 1 31 d Dia do mês com preenchimento de zero 01 31 Semana w Representação numérica do dia da semana 0 (domingo) 6 (sábado) L Dia da semana por extenso Sunday Saturday Mês n Representação numérica do mês sem preenchimento de zero 1 12 m Representação numérica do mês com preenchimento de zero 01 12 F Mês por extenso January December Ano Y Ano com quatro dígitos y Ano com dois dígitos Hora g Hora sem preenchimento de zero 1 12 h Hora com preenchimentode zero 01 12 G Hora sem preenchimento de zero 0 23 H Hora com preenchimento de zero 00 23 Minuto i Minuto com preenchimento de zero 00 59 Segundo s Segundo com preenchimento de zero 00 59 Desenvolva um script PHP que: 1) Leia a data e informe a quantidade de dias faltam para o próximo natal. 2) Leia s hora e informe a quantidade de segundos do dia atual já se passaram. EADDCC035 – Programação para Web II 32 3. Desenvolvimento Web com PHP Programar para a web pode ser considerado basicamente em receber os dados do usuário, processá-los e enviar uma resposta dinâmica. Uma vez enviada essa resposta é encerrado o contato entre o servidor e o cliente. Então o desafio inicial passa a ser: como receber uma requisição do cliente. Para enviar alguma informação do cliente para o servidor, o protocolo HTTP (utilizado nas páginas da web) permite dois métodos para enviar informações para o servidor web, além obviamente da URL referente ao arquivo solicitado. Esses métodos são o POST e o GET. 3.1 Método GET A especificação do protocolo HTTP/0.9 (a primeira implementação do HTTP) possuía a definição do método GET, utilizado pelo browser para solicitar um documento específico. Por exemplo: a seguinte requisição HTTP retornaria o documento "index.html", localizado no diretório do servidor chamado “qualquer”: GET /qualquer/index.html CRLF Devemos notar que a requisição GET inicia com a palavra GET, inclui o documento solicitado e encerra com a combinação dos caracteres carriage return e line feed (nosso famoso enter). Para um melhor entendimento, você pode fazer uma requisição GET conectando diretamente em algum servidor WEB, conectando através de um programa de telnet (geralmente o servidor HTTP utiliza a porta 80). A resposta será o código da página solicitada, conforme apresentado a seguir. Aqui vale lembrar que a diferença do browser é que ele trata as informações recebidas e exibe a página já formatada. telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. GET /index.php3 (... página solicitada ...) Connection closed by foreign host. Através do método GET também é possível passar parâmetros da requisição ao servidor, que pode tratar esses valores e até alterar a resposta a depender deles, como EADDCC035 – Programação para Web II 33 no exemplo a seguir. No exemplo são passados dois parâmetros: id e tipo. Esses parâmetros estão no formato conhecido por URLencode. telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. GET /index.php3?id=0024horas&tipo=Taxi (... página solicitada ...) Connection closed by foreign host. Apesar de ser possível passar parâmetros utilizando o método GET, e com isso gerar páginas dinamicamente, este método tem pelo menos dois problemas que em determinadas circunstâncias podem ser considerados sérios: 1) O GET permite uma quantidade de dados passados limitado a 1024 caracteres, o que pode não ser interessante/limitante em determinadas aplicações. 2) Pelo fato das informações fazerem parte da URL, todos os dados podem ser vistos pelo usuário. Isso pode ser extremamente perigoso quando informações sigilosas estão envolvidas (senha, por exemplo). Através da captura desses dados via URL, diversas formas de invasões foram elaboradas e praticadas. 3.2 Método POST A versão 1.0 do protocolo HTTP trouxe boas inovações ao mesmo. Uma delas foi a criação de headers nas mensagens de requisição e de resposta. Os headers são informações trocadas entre o navegador e o servidor de maneira transparente ao usuário, e podem conter dados sobre o tipo e a versão do navegador, a página de onde partiu a requisição (link), os tipos de arquivos aceitos como resposta, e uma série de outras informações. Desta forma, foi possível definir outro método de requisição de arquivos, que resolveu os principais problemas do método GET, o método POST. Através da utilização de headers é possível enviar os parâmetros da URL solicitada sem expor esses dados ao usuário e também sem haver um limite de tamanho. Uma conexão ao servidor HTTP utilizando o método POST seria algo semelhante ao que segue: EADDCC035 – Programação para Web II 34 telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. POST /index.php Accept */* Content-type: application/x-www-form-urlencoded Content-length:22 id=0024horas&tipo=Taxi (... página solicitada ...) Connection closed by foreign host. No trecho acima, a linha “Accept */*” informa os tipos de dados que podem ser enviados como resposta (no caso, todos). A linha “Content-type: application/x- www-form-urlencoded” informa o tipo de dado que está sendo enviado (urlencoded). O terceiro header (“Content-length:22”) é o mais importante, pois informa o tamanho do corpo da mensagem, que contém os parâmetros. Após todos os headers há um salto de linha e então é iniciado o corpo da mensagem, no formato urlencoded. Obviamente o usuário não deve se preocupar com os headers, em codificar os dados ou em calcular o tamanho do corpo da mensagem. O navegador faz isso de maneira transparente. 3.3 Utilizando GET e POST O método GET pode ser utilizado através da digitação de um endereço no local apropriado do navegador (barra de endereços) ou através de um hiperlink de uma página, ou seja, uma referência de uma página a outra. Nesses casos é preciso converter os dados para o formato urlencode. A terceira maneira de utilizar o GET é através de formulários HTML, e neste caso o usuário não precisa se preocupar com a codificação dos dados. A utilização de formulários HTML é a única maneira possível de submeter dados pelo método POST. 3.3.1 Exemplo utilizando o método GET Vamos criar uma página PHP com o nome “dirigir.php”, coloque este arquivo dentro da pasta no servidor web. A Figura a seguir apresenta o código e a execução do mesmo. Vale observar que na barra de endereços do navegador, passamos como parâmetro o valor a ser manipulado. EADDCC035 – Programação para Web II 35 Figura 19 – Exemplo de uso do método GET Na linha 8 utilizamos $_GET[“idade”] para “pegar” o valor do parâmetro idade recebido através do parâmetro colocado na URL (http://localhost/dirigir.php?idade=10). Observe nos “prints” da Figura que conforme o valor passado como parâmetro, a frase a ser impressa é diferente. Na última tentativa de execução não passamos a variável idade como parâmetro e durante a execução do código PHP, a tentar “pegar” essa variável ($_GET[“idade”]), é gerado um erro de execução. Quando queremos passar mais de um parâmetro utilizamos ‘&’ entre eles. Por exemplo: http://localhost/dirigir2.php?idade=10&nome=Ze Gere o código “dirigir.php” e, após sua chamada pelo navegador, mande exibir o código fonte recebido. Você perceberá que o HTML recebido não contém os detalhes de codificação do PHP, mas somente os textos gerados. Essa é a ideia: a complexidade da aplicação fica em PHP e o usuário somente visualiza e manipula o resultado dessa execução. EADDCC035 – Programação para Web II 36 3.3.2 Exemplo utilizando o método POST Como comentamos anteriormente, o método GET não é um método seguro para envio de informação, pois qualquer usuário poderá visualizar o valor que está sendo passado e alterá-lo ou roubar essas informações. Por exemplo, não deveríamos passar uma senha via método GET. Para tornar o envio de informaçãoum pouco mais seguro, podemos utilizar o método POST como forma de envio, pois os dados são enviados de forma oculta ao usuário comum. Para usar o método POST como forma de envio, devemos utilizar formulários HTML. Vamos exemplificar o uso do POST. Primeiramente iremos criar um formulário, chamado dados.html, contendo o seguinte código: Figura 20 – Arquivo dados.html No arquivo dados.html podemos observar: Uso da tag <form></form> Botão do tipo submit (linha 10), indicando que após o usuário clicar no botão, alguma ação (action) deverá ser executada. Duas informações definidas pelas tags input do tipo texto (type=”text”) nas linhas 8 e 9, chamadas respectivamente de nome e idade. Parâmetro action da tag form, indicando quem (no nosso caso qual arquivo PHP) receberá os dados do formulário (nome e idade) após o usuário clicar no botão “ok” (submit). No nosso exemplo será chamado o arquivo “meusdados.php” que está localizado no mesmo diretório de dados.html. EADDCC035 – Programação para Web II 37 Como esses parâmetros serão passados é definido pelo parâmetro method da tag form. No nosso exemplo o definimos como POST. Vamos agora criar o código do arquivo meusdados.php, que é o responsável por receber e tratar os dados enviados por dados.html. Figura 21 – código php do arquivo meusdados.php O destaque para o código do arquivo meusdados.php é para as linhas 8 e 9, nas quais recebemos os valores passados por parâmetro. Observe que o nome da variável deve ser exatamente o mesmo da variável criada no formulário que passará os dados. A seguir temos exemplos da execução desse exemplo: Figura 22 – Execução do exemplo do POST EADDCC035 – Programação para Web II 38 Assim como nos exemplos anteriores, verifique como o código HTML apresentado no cliente, referente à execução do arquivo meusdados.php, ficou simples e sem nenhuma referência aos parâmetros recebidos e lógica implementada. Como exercício, gere uma calculadora simples, na qual o usuário fornece, via formulário HTML, dois valores e uma operação (+, -, *, /). Um arquivo chamado calculadora.php deve receber esses parâmetros e apresentar o cálculo correto ( conforme a operação solicitada no formulário HTML). 3.4 Resumindo o uso de formulários Como podemos ver nos exemplos anteriores, o uso de formulários são de grande utilidade na Web, pois permitem a interatividade entre o usuário e o servidor, coletando dados fornecidos pelo usuário. Podendo com isso, ler e gravar informações em Banco de Dados, gerando enormes possibilidades de uso para a Internet. O esquema de ações disparadas por um formulário HTML é visto na Figura a seguir. Figura 23 – Servidor web Estas ações podem ser assim descritas: PASSO 1: O usuário preenche os dados do formulário e aciona o botão Submit (post, enviar ou outro nome utilizado). PASSO 2: O navegador pega os dados do formulário. EADDCC035 – Programação para Web II 39 PASSO 3: Se tiverem scripts (javascript) associados ao formulário, estes são executados. PASSO 3.5: Dependendo do script, o navegador poderá alertar o usuário de algum erro de preenchimento e voltamos ao PASSO 1. PASSO 4: O navegador envia os dados para o servidor de páginas (servidor WWW) via Internet, através de uma requisição HTTP, solicitando como resposta uma página. PASSO 5: Os dados do formulário chegam ao servidor e são manipulados pelo servidor de páginas que os repassa à página mencionada no campo action do formulário. PASSO 6: Caso a página que recebeu os dados do formulário contenha algum script, o servidor o executa. PASSO 7: Caso o script necessite dados de/para o banco de dados, é feito esse acesso. PASSO 8: O servidor de páginas envia para o computador a página solicitada. PASSO 9: O computador recebe a página solicitada pelo formulário. PASSO 10: O navegador exibe os dados da página recebida. Alguns aspectos importantes sobre um formulário: 1) Delimita-se uma área de interação através das tags <form> e </form>; 2) Os atributos ACTION (pra quem) e METHOD (como) devem ser definidos; 3) Dentro do form, são colocados os elementos de interação da HTML, formando assim os campos do formulário; 4) Este formulário deve conter um botão que ative a ação de enviar (“postar”) o formulário, ou seja, enviar os dados preenchidos pelo usuário para que o script (cgi, asp, php, jsp, etc.) possa processar esses dados e retornar um resultado, conforme programação pré-estabelecida no script. Faça uma leitura detalhada de revisão sobre como manipular formulários em HTML. A apostila de Programação para Web I contém esse material. EADDCC035 – Programação para Web II 40 4. Sessões e Cookies Cookies e Sessões são uma maneira de preservar certos dados (variáveis) através de acessos subseqüentes. Este tipo de recurso é muito interessante quando, por exemplo, o usuário informa seu nome ou “loga” no sistema e queremos utilizar suas informações pessoais nas diversas páginas do site. Desta forma podemos construir aplicações mais personalizadas e aumentar a atração do site. O Cookie é um arquivo que é armazenado no computador do usuário e será checado sempre que se quiser realizar alguma operação. Já a Sessão é mais complexa, pois consiste num mecanismo (de rede) de confiança entre a máquina do usuário e o servidor. Tabela 6 – Cookies x Sessão Características Cookies Sessão Localização Máquina do usuário Servidor Dependência Depende da habilitação do recurso (conFiguração do navegador + anti- vírus+firewall) ConFiguração do servidor. Estabilidade Não garante o funcionamento, pois depende totalmente de conFigurações da máquina do usuário. Maior estabilidade. Segurança Depende totalmente de cada usuário. Mecanismo muito utilizado por bancos e e- commerce, pois concentra a maior parte da segurança no servidor. Sobrecarga Armazenamento na máquina do usuário. Rede e processamento devido às diversas sessões que podem estar ativas num determinado instante. 4.1 Cookies Vamos elaborar um exemplo de uso de cookies. Para tal vamos fazer uso de uma recursividade, ou seja, a página PHP sempre chama a si mesma e somente será redirecionada para outra página quando a situação desejada ocorra (usuário e senha corretos). Assim, no nosso exemplo, enquanto o usuário não estiver fornecendo login e password corretos, ele ficará na mesma página. A Figura a seguir ilustra um grafo de execução desse acesso. Figura 24 – Esquema de funcionamento do nosso Cookie login.php Login ou password errado(s) verificada.php Login e password corretos Sair (deslogar) EADDCC035 – Programação para Web II 41 Inicialmente o usuário entra na página de acesso ao sistema (login.php). Ele deverá fornecer usuário e senha para que tenha acesso à área restrita (verificada.php). Caso não forneça usuário e senha corretos, ele continua na página de login. Ao fornecer um usuário e senha corretos, é criado um cookie chamado “acesso” e o usuário é direcionado automaticamente para a área restrita. Toda vez que essa área for acessada, a primeira ação é verificar se existe o cookie de acesso. Ao sair da área restrita (deslogar), o cookie é removido e o sistema volta automaticamente para a página de login. Algumas considerações: Não estamos limitando a quantidade de tentativa de acesso. Em situações reais, essa quantidade de tentativas é controlada para evitar a situação de alguém querer adivinhar uma senha. O usuário e a senha estão armazenados no próprio código. Em situaçõesreais isso é feito via banco de dados (que aprenderemos a manipular mais a frente). Não utilizaremos o recurso de “tempo de vida” do cookie. Assim, se o usuário logar e ficar com o computador ligado um mês, o acesso continua ativo. O cookie pode armazenar mais de uma informação, o que não é tão comum. Podemos utilizar vários cookies. Por exemplo, um para dizer se o usuário está logado, outro para identificar o usuário e outro para identificar sua idade. Vamos começar a analisar o código, começando pela página login.php. Figura 25 – Código da página login.php EADDCC035 – Programação para Web II 42 Vamos fazer algumas observações sobre esse código: Antes da primeira execução, vamos verificar que não existe um cookie chamado acesso e criado pelo site “localhost”. Observe que para cada navegador web, você terá uma forma diferente de exibir os cookies presentes. Figura 26 – Verificação dos cookies ativos com nome *acesso* Na primeira vez que for executada (sem o envio dos dados do formulário), a condição da linha 5 (if(isset($_POST["envia"]))) retornará falso e todo o processo de verificação do usuário e senha e criação do cookie não ocorrerá. Como a variável $valor está vazia (linha 2), a condição da linha 22 retornará falso e o desvio não será efetuado. Como também não temos nenhum erro de acesso, nada será impresso na linha 25. Somente o formulário será exibido. Figura 27 – Primeira execução da página login.php A partir do momento que alguém tentar logar (fornecer os dados para o formulário e clicar no botão “login”), a linha 5 retornará verdadeiro e então o código de verificação do usuário e senha será executado. Caso algum dos dados fornecidos esteja incorreto, o cookie não será criado e uma mensagem de erro (linhas 15 e 16) será definida. Como o cookie não foi criado, o redirecionamento de página da linha 22 não ocorrerá, mas a mensagem de erro será impressa na linha 25. O formulário será novamente exibido, solicitado uma nova entrada de dados. EADDCC035 – Programação para Web II 43 Figura 28 – Resultado do fornecimento correto de login e password Agora considere que os dados fornecidos estejam corretos. O formulário chama novamente a página login.php (linha 30 - action="login.php"). A linha 5 retornará verdadeiro e então o código de verificação do usuário e senha será executado. Como usuário e senha estarão corretos (linha 10), será atribuído o valor “OK” à variável $valor e será criado o cookie chamado “acesso” (linha 13). Ao chegar na linha 22, como a variável $valor recebeu “OK”, a condição será verdadeira e a página será redirecionada para “verificada.php” (apresentado mais a frente). Figura 29 – Acesso permitido Agora vamos observar o cookie criado, vide Figura a seguir. Um ponto interessante a ser observado são as propriedades do cookie, com destaque para Valor e Validade. Em http://php.net/manual/pt_BR/function.setcookie.php você aprenderá diversas formas de criação de um cookie e todos os seus parâmetros. No nosso exemplo não colocamos um tempo ou data de expiração para o cookie. Figura 30 – Cookie criado pela nossa aplicação EADDCC035 – Programação para Web II 44 Agora vamos ver o código da página verificada.php. Figura 31 – Código da página verificada.php Observações sobre a página verificada.php: A ideia é similar à pagina de login, pois existe também a recursividade, mas agora com o intuito de limpar o cookie (linha 6) quando o usuário pretende sair (deslogar) (linhas 22 a 24). Quando a página é chamada pela página login.php ou mesmo diretamente (experimente fazer isso sem logar para ver o que acontece), a condição da linha 3 retorna falso e as linhas 4 a 7 não serão executadas. A condição da linha 8 testará a existência do cookie “acesso”. Em caso positivo, será verificado o seu conteúdo (linha 11). Caso o cookie não exista ou o seu conteúdo não seja o esperado, a variável $logout receberá o valor “sim”. Caso esteja tudo correto (exista o cookie e seu conteúdo está conforme o esperado), o conteúdo da página será apresentado. Caso contrário, a condição da linha 17 será satisfeita e o usuário será redirecionado para a página login.php para um novo acesso. Quando o usuário estiver com acesso à página e resolver sair, ele clicará no botão “Sair” (linha 23) e, ao ser chamada novamente a mesma página, será verificado (linha 3) que o usuário pediu para deslogar e portanto temos que sinalizar sua saída (linha 5) e limpar o cookie (linha 6). Posteriormente ele será redirecionado para a página de login (linha 17). EADDCC035 – Programação para Web II 45 Observe que a ideia base da página verificada.php pode se propagar para diversas páginas, ou seja, o controle de verificação do cookie e saída poderia bem estar em arquivos adicionais e inseridos nas demais páginas através de include()! Desafios para melhorar o entendimento de manipulação de cookies: Tente atribuir um tempo para o seu cookie e ver se funcionou (utilize um tempo bem pequeno) Adicione mais de um usuário ao sistema Coloque mais de uma página no sistema após o usuário estar logado. Dica: coloque a parte de sair e verificação em arquivos adicionais e chame-as através de include() Crie outro cookie com o login do usuário e imprima-o em todas as páginas do sistema. 4.2 Sessão As sessões são mais seguras do que os cookies, pois o seu controle se encontra do lado do servidor, minimizando falhas durante a execução (o usuário pode ter desabilitado o uso de cookies) e a obtenção dos dados colocados no cookie de forma indevida (hackers). Observe que atualmente é comum nos depararmos com sessões para acesso à internet banking e sites de e-commerce. Quem já não se deparou com uma mensagem do tipo “Sessão expirada, favor logar novamente”? É importante lembrar que uma sessão é estabelecida entre a máquina do usuário e o servidor através de recursos de rede (lembre-se da pilha TCP/IP e do modelo OSI que aprendemos em Fundamentos de Redes de Computadores). Portanto, estamos acessando recursos de rede de forma transparente, somente chamando funções específicas que têm acesso a esses recursos. Mantemos somente uma sessão entre um computador e um servidor num determinado instante e essa sessão pode conter diversos tipos de informações que nos auxiliam no processo de segurança do sistema. O nosso de sistema de sessão será simplificado (sem aspectos avançados de segurança), devido à natureza da nossa disciplina e nosso estágio atual de aprendizagem. Observe o esquema geral do sistema: Figura 32 – Esquema geral do sistema controla por sessão Usuário ou senha incorreto(s) Solicita acesso ao sistema login.php verifica.php sessao.php <biblioteca> continua.php logout.php Sair do sistema Usuário e senha corretos EADDCC035 – Programação para Web II 46 De forma geral, o usuário fornecerá um usuário e senha na página login.php. Estes dados serão direcionados para a página verifica.php, com o intuito de verificar se o usuário e senha são válidos e em caso positivo, criar uma sessão para esse e o sistema será redirecionado automaticamente para a página continua.php. Caso contrário, o sistema será redirecionado novamente para a página de login. Quando o usuário estiver logado (continua.php), ele poderá continuar usando o sistema (continuar na página continua.php) ou sair do sistema (link para a página sair.php). A página sair.php finalizará a sessão e irá automaticamente para a página de login. Todas as funcionalidades de manipulação da sessão estão na nossa biblioteca(sessão.php). Vejamos agora aos arquivos e sua forma de funcionamento. Vamos iniciar ver o arquivo sessao.php. Figura 33 – Código da biblioteca sessao.php Este arquivo será utilizado como biblioteca para acesso aos recursos de nossa sessão. São três funções, a saber: Sessao_Login(): No nosso exemplo, temos somente dois usuários válidos e cada um tem um tipo diferente (somente como exemplo). Caso o conjunto usuário e senha recebidos como parâmetro na função estiverem corretos, a variável $TipoUsuario receberá um ou dois. Se estiver válido, habilitaremos três variáveis EADDCC035 – Programação para Web II 47 para essa sessão: login (com o nome do usuário), TipoUsuario (valendo 1 ou 2) e valor (com um valor diferente para cada tipo de usuário). Sessao_Verifica(): Caso a sessão esteja ativa e com uma das variáveis válidas (fazemos a verificação do login, pois é o único valor igual para os dois tipos de usuário) é retornado true (um), caso contrário retorna false (zero). Sessao_Logout(): Tem como função, limpar as variáveis da sessão e posteriormente destruí-la (recurso da rede). Utilizamos a verificação de uma variável extra ($op), somente para demonstrar que ações desse tipo podem ser realizadas (a sessão só será destruída se um código específico for informado). A página de login.php não tem recursos especiais e poderia até mesmo ser desenvolvida em HTML puro. Basicamente é um formulário para solicitar usuário e senha e posteriormente enviar isso para uma rotina de verificação (verifica.php). Figura 34 – Página de login EADDCC035 – Programação para Web II 48 5. Banco de Dados Até agora vimos os comandos e sintaxe do PHP, mas o PHP não teria grande serventia se não houvesse a integração com um banco de dados. Os Bancos de Dados são responsáveis por armazenar os dados que serão exibidos no site. Isso significa que você tem uma página que pega a informação de um banco de dados e a insere em seu conteúdo a cada vez que é carregada. O MySQL é um sistema de gerenciamento de banco de dados de código-fonte aberto popular geralmente utilizado em aplicações Web devido à sua velocidade, flexibilidade e confiabilidade. O MySQL emprega a linguagem SQL, ou Structured Query Language, para acessar e processar os dados contidos em bancos de dados. Através do uso de um banco de dados podemos responder de forma rápida e fácil questões como, qual de seus produtos está vendendo melhor ou que tipo de clientes gasta mais. 5.1 Conceitos de Banco de Dados Um banco de dados é um conjunto de informação organizada de maneira que possa ser utilizada eficientemente. Um diretório telefônico é um bom exemplo de um banco de dados. Outros exemplos são um dicionário, um calendário ou um livro de receitas. A informação em um banco está organizada em forma de registros. Cada registro contém toda a informação sobre uma pessoa ou um elemento do banco. Por exemplo, cada registro no diretório telefônico contém um nome, endereço e número telefônico de uma pessoa. Cada registro contém campos. Um campo é utilizado para armazenar o endereço e outro campo para armazenar o número telefônico da pessoa. Cada registro contém cada um destes campos e cada registro pode ter informação nestes campos. O nome de um campo geralmente identifica a informação armazenada no campo. Por exemplo, os campos podem se chamar Nome, Endereço ou Número telefônico. Cada campo tem um tipo que identifica a classe de informação que pode ser armazenada: números, datas, caracteres alfanuméricos e outros. Como cada campo contém um tipo específico de dados, você pode realizar cálculos e outras operações com a informação guardada neles. Por exemplo, pode somar os números dos campos. EADDCC035 – Programação para Web II 49 Pode comparar a data de um campo com a de outro. Pode mostrar o nome de uma pessoa (armazenado em um campo) depois de seu sobrenome (armazenado em outro campo) para construir a primeira linha de uma etiqueta de correio. O conjunto de registros que utilizam os mesmos campos forma uma tabela. Cada banco de dados pode ter muitas tabelas. A Figura 35 ilustra como se relacionam estes conceitos Figura 35 – Esquema de um Banco de Dados No banco de dados acima podemos observar que estamos armazenando às informações das notas dos alunos, e de suas disciplinas. Assim temos no banco de dados uma tabela que guarda as disciplinas cursadas por alunos. Essa tabela possui os campos para armazenar a disciplina, os alunos e suas três notas. Desafio: 1) Proponha os campos necessários para armazenar os dados dos veículos de uma concessionária. 5.2 Integração PHP com MySQL 5.2.1 Criação do Banco de Dados Para começar a integração do php com o mySQL precisamos criar o banco de dados, para isto iremos utilizar o phpMyAdmin, um cliente amigável de banco de dados que permite a manipulação do mySQL. Geralmente o phpMyAdmin pode ser acessado através do endereço: http://localhost/phpmyadmin. EADDCC035 – Programação para Web II 50 Figura 36 – Página inicial do PHPMYADMIN O phpmyadmin pode apresentar algumas variações em relação à interface apresentada acima, devido a versão ou ao programa utilizado para sua instalação. A versão utilizada na elaboração desta apostila foi a versão 3.4.5 Observe que não estamos interessado em como instalar o phpMyAdmin, geralmente ele já estará instalado caso você faça uso desses programas que fará a instalação completa do php. Pesquise: 1) Pesquise outros programas que podem ser utilizados para criar banco de dados no mysql 2) Pesquise a respeito dos programas, Xampp, easyPHP, entre outros. Para que eles servem? Para criar o banco de dados, clique na opção de banco de dados, defina seu nome, e aperte o botão criar, conforme ilustração abaixo. Crie um banco de dados chamado BD_LPII. EADDCC035 – Programação para Web II 51 Figura 37 – Criando o banco de dados Após a confirmação o banco estará criado, e na barra lateral constará o nome do banco. Figura 38 – Banco de dados criado Ao clicar no banco de dados podemos adicionar as tabelas contidas nesse banco de dados, no caso, a tabela disciplina. Clique no link SQL, para executar o comando de criação de tabelas. Figura 39 – Acesso aos comandos SQL Nome do Banco de dados Não há tabelas criadas Permitirá a execução dos comandos SQL. EADDCC035 – Programação para Web II 52 Digite o comando de criação da tabela disciplina na área apresentada na Figura 40. Figura 40 – Área de comandos SQL Figura 41 – Comando SQL para a criação da tabela Após a execução do comando acima a tabela estará criada. Figura 42 – Tabela criada e disponível para manipulação EADDCC035 – Programação para Web II 53 Cliquando sobre a tabela podemos observar a estrutura criada para a tabela. Figura 43 – Visualização da estrutura da tabela Após a criação do Banco de dados acima, estamos prontos para criar nossas primeiras páginas php que acesse e armazene os dados nessa tabela. 5.2.2 Inserindo registro na tabela no Banco de Dados Agora vamos criar uma página php que permita a inclusão de registros nessa tabela. Veja o código da página php que fará a entrada dos dados na tabela. Figura 44-a – Formulário para inserção de dados na tabela Figura 44-b – Formulário para inserção de dados na tabela EADDCC035 – Programação para Web II 54
Compartilhar