Baixe o app para aproveitar ainda mais
Prévia do material em texto
ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 1 Tópico 5: PHP – Parte 1 1. Introdução ............................................................................................................... 5 2. O que é necessário para utilização de PHP ............................................................. 8 3. Sintaxe básica de PHP .......................................................................................... 12 4. Variáveis ............................................................................................................... 15 4.1. Dados numéricos ............................................................................................ 17 4.2. Strings ............................................................................................................ 18 Aspas Simples ......................................................................................................... 19 Aspas Duplas .......................................................................................................... 20 Aspas Invertidas ..................................................................................................... 22 Operador de concatenação .................................................................................... 23 Função strlen() ....................................................................................................... 24 Função strpos(str1, str2) ........................................................................................ 25 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 2 Especificação completa das funções associadas a strings em PHP ...................... 25 4.3. Constantes ...................................................................................................... 26 4.4. Arrays ............................................................................................................. 28 4.5. Escopo das variáveis ...................................................................................... 32 4.6. Conversões de variáveis (casting) ................................................................. 35 5. Operadores ............................................................................................................ 37 5.1. Operadores Aritméticos ................................................................................. 37 5.2. Operadores de Atribuição .............................................................................. 38 5.3. Operadores de Incremento e Decremento ...................................................... 38 5.4. Operadores de Comparação ........................................................................... 39 5.5. Operador ternário (condicional) .................................................................... 39 5.6. Operadores Lógicos ....................................................................................... 40 5.7. Operadores de arrays ..................................................................................... 41 5.8. Operadores bit-a-bit ....................................................................................... 42 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 3 5.9. Precedência de Operadores ............................................................................ 43 6. Estruturas de controle ........................................................................................... 44 6.1. if ..................................................................................................................... 45 6.2. switch ............................................................................................................. 46 6.3. for ................................................................................................................... 47 6.4. foreach ........................................................................................................... 48 6.5. while ............................................................................................................... 50 6.6. do ... while ...................................................................................................... 51 6.7. break .............................................................................................................. 51 6.8. continue .......................................................................................................... 53 7. Funções ................................................................................................................. 54 7.1. Passagem de parâmetros: valor e referência .................................................. 56 7.2. Parâmetros: definição de valor padrão ........................................................... 58 8. PHP e formulários HTML .................................................................................... 60 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 4 8.1. Enviando informações para um programa PHP ............................................. 63 8.2. Tratando informações recebidas .................................................................... 69 8.3. Funções especiais para formatação de dados ................................................. 71 9. Exercício 1 ............................................................................................................ 77 10. Referências .......................................................................................................... 78 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 5 1. Introdução § PHP à PHP: Hypertext Preprocessor; § PHP é uma linguagem de programação que, como JavaScript, permite a criação de páginas dinâmicas; o No entanto, PHP é executado no servidor. § O navegador exibe a página final resultante do processamento; § Não permite que o cliente veja o código dos scripts em PHP. § Os arquivos PHP podem conter texto, tags HTML e scripts; o Apenas HTML puro é enviado ao cliente em uma requisição; o Extensão padrão (depende da configuração do servidor): .php ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 6 § PHP oferece suporte para programação orientada a objetos; § PHP oferece suporte a vários sistemas gerenciadores de banco de dados (SGBDs): o Oferece funções que permitem a interação e manipulação de dados armazenados em cada um deles; o MySQL, PostgreSQL, Sybase, Oracle, SQL Server... o Os bancos de dados não suportados diretamente podem ser acessados via ODBC (Open Data Base Connectivity): § Padrão para acesso a diferentes SGBDs. § Os arquivos de instalação de PHP podem ser obtidos gratuitamente: o http://www.php.net ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 7 o Além de gratuito, PHP é um software com código aberto; § PHP pode ser executado em diferentes plataformas: Windows, Linux, Unix, OSX... § PHP é compatível com a maioria dos servidores web disponíveis. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 8 2. O que é necessário para utilização de PHP§ Caso o website esteja armazenado em um provedor de hospedagem: o O servidor deve oferecer suporte a PHP e a algum sistema gerenciador de banco de dados compatível com PHP (caso você vá efetivamente usar o SGBD); § Para montar o seu próprio servidor, que ofereça suporte a PHP, é necessário: o Um servidor web: § Apache, IIS, nginx, ... o PHP: o suporte à linguagem de programação propriamente dita; o SGBD: de sua preferencia (MySQL, PostgreSQL ....); ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 9 § Após a instalação das três ferramentas, é necessário configurá-las para que consigam “conversar” adequadamente: o O link abaixo contém um tutorial sobre a instalação e configuração de Apache, PHP e MySQL: § http://www.niederauer.com.br/livros/php/roteiro.html § Também é possível obter gratuitamente na internet pacotes de software que realizam a instalação e configuração automática das três ferramentas: o XAMPP (http://www.apachefriends.org/en/xampp.html): ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 10 § Além de Apache, MySQL e PHP, o pacote XAMPP inclui também suporte a Perl; § É gratuito; § Possui distribuições para Linux, Windows, OSX e Solaris; § É o pacote de software disponível nos laboratórios da FT/Unicamp; § Os alunos devem salvar os arquivos relacionados aos sites desenvolvidos no subdiretório “htdocs” do diretório de instalação do XAMPP; • Os arquivos serão acessados através do endereço (ex.: arquivo.htm): http://localhost/arquivo.htm ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 11 o Além do XAMPP, existe uma série de outros pacotes de instalação simplificada de Apache + PHP + MySQL: § WampServer (Windows): http://www.wampserver.com/ § MAMP (OSX): http://www.mamp.info/en/index.html § EasyPHP (Windows): http://www.easyphp.org/ ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 12 3. Sintaxe básica de PHP § Como visto anteriormente, arquivos que contêm código em PHP geralmente misturam texto puro, tags HTML e scripts; § Um script em PHP pode ser colocado em qualquer lugar no documento: o Extensão padrão dos arquivos com códigos PHP: .php o Os scripts devem estar entre “<?php” e “?>”. <html> <body> <?php echo "<p>Hello World</p>"; ?> </body> </html> <html> <body> <p>Hello World</p> </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 13 § Cada linha de um script em PHP deve terminar com um “;” § Existem dois métodos básicos para gerar um texto na saída de um script PHP: o echo: exibe uma ou mais strings § void echo ( string $arg1 [, string $... ] ); § echo não é considerado uma função, então os parâmetros passados não precisam estar entre parênteses; o print: exibe uma string § int print ( string $arg ) § Também não é considerado uma função, então o parâmetro não precisa estar entre parênteses; § Retorna sempre o valor 1; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 14 § Comentários em PHP podem ser inseridos de duas formas: o //: comentário de uma única linha; o /* e */: comentário de múltiplas linhas: <html> <body> <?php // Comentário simples echo "Hello World"; /* Comentários de múltiplas linhas */ ?> </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 15 4. Variáveis § PHP não possui comandos para declaração de variáveis; o A variável é criada no momento em que um valor é atribuído a ela; o Se você desejar criar uma variável sem atribuir um valor, atribua o valor null; § PHP é uma linguagem de programação de tipagem fraca: o Não é necessário associar o tipo de dado à variável; o Basta atribuir diretamente o valor à variável; § Regras para os nomes de variáveis em PHP: o Deve começar com underscore ( _ ) ou com uma letra; o Deve ser formado apenas por caracteres alfanuméricos e underscores; o Não pode conter espaços; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 16 § Toda referência a uma variável deve começar com o caractere ‘$’: o Ex.: $nome = “Guilherme”; § PHP é sensível à capitalização dos caracteres (diferencia letras maiúsculas de minúsculas): o “$x” e “$X” são referências a duas variáveis distintas; <html> <body> <?php $frase = "Hello World!"; echo $frase; ?> </body> </html> <html> <body> Hello World! </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 17 4.1. Dados numéricos § PHP é capaz de trabalhar com os tipos de dados numéricos mais comuns: o Valores inteiros na base decimal: § Ex.: $var = 5; o Valores inteiros na base octal (todo valor inteiro iniciado com zero): § Ex.: $var = 033; o Valores inteiros na base hexadecimal (valores iniciados com 0x): § Ex.: $var = 0xBC; o Valores em ponto flutuante: § Ex.: $var = 3.14; § Ex.: $var = .15; (equivalente a $var = 0.15); § Ex.: $var = 4.3E+7; (PHP aceita representação em notação científica). ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 18 4.2. Strings § Em PHP, o conteúdo de strings pode ser delimitado por: o Aspas duplas (“ ”); o Aspas simples (‘ ’); o Aspas invertidas (` `); o PHP dá interpretações diferentes para conteúdos de strings delimitados com cada tipo de aspas; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 19 Aspas Simples § Podem ser usadas para delimitar qualquer sequência de caracteres; § Deve-se ter cuidado quando a sequência de caracteres contém ‘: o PHP pode interpretar como o final daquela string; o Deve ser usado \’ no conteúdo da sequência de caracteres; § O uso de aspas simples permite a quebra de linha sem a necessidade de se usar “\n”: o Ex.: echo ‘Era uma vez um gato xadrez’; o O exemplo acima gerará na saída um texto com a quebra de linha: § Atenção: isto não será visível no modo de exibição HTML. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 20 Aspas Duplas § Strings com conteúdo delimitado por aspas duplas são muito parecidas com as de conteúdo delimitado por aspas simples; § A principal diferença é que a delimitação por aspas duplas permite a chamada interpolação de variáveis: o Consiste em escrever o valor de uma ou mais variáveis dentro da string que será mostrada na tela ou atribuída a outra variável; o Ex.: <?php $titulo = "Sr."; $nome = "João"; echo "Olá $titulo $nome"; ?> Olá Sr. João ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 21 o Na interpolação de variáveis, deve-se tomar cuidado quando o texto restante da string estiver “colado” ao nome da variável: § Forma errada: $x = “tri”; echo “Eu não sou $xcolor”; (erro: não existe a variável $xcolor); § Forma correta: echo “Eu não sou ${x}color”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 22 Aspas Invertidas§ Strings com conteúdo delimitado por aspas invertidas são interpretadas pelo PHP como strings que contêm comandos a serem passados ao sistema operacional; § Você deve ter permissão para executar os comandos passados através do conteúdo de uma string com aspas invertidas; § Ex.: <html> <body> <?php echo `ls -l`; ?> </body> </html> <html> <body> total 16 -rwxr-xr-x 1 guilherme admin 248 Feb 6 15:17 prog1.php -rwxr-xr-x@ 1 guilherme admin 170 Apr 15 17:50 teste.php </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 23 Operador de concatenação § Além da interpolação de variáveis, outro operador muito útil de PHP, associado a strings, é o operador de concatenação: o Como o próprio nome diz, este operador concatena várias strings; o É representado por “.”; o Ex.: $x = “tri”; echo “Eu não sou ” . $x . “color”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 24 Função strlen() § A função strlen() retorna o número de caracteres (comprimento) da string passada como parâmetro; § Ex.: <html> <body> <?php $texto = "Olá mundo!"; echo strlen($texto); ?> </body> </html> <html> <body> 10 </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 25 Função strpos(str1, str2) § A função strpos(str1, str2) retorna a posição da primeira ocorrência da string/caractere ‘str2’ na string ‘str1’; o Caso não encontre, retorna FALSE. § Ex.: Especificação completa das funções associadas a strings em PHP § Pode ser encontrada em: http://w3schools.com/php/php_ref_string.asp <html> <body> <?php $t = "Olá mundo!"; echo strpos($t,”mundo”); ?> </body> </html> <html> <body> 4 </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 26 4.3. Constantes § A definição de constantes em PHP é feita com o comando “define”, que tem a seguinte sintaxe: o bool define(string nome, tipo valor [, bool case_insensitive]); § nome: nome da constante no código; § valor: valor atribuído à constante (booleano, inteiro, ponto flutuante ou string); § case_insensitive: valor lógico (opcional) que indica se PHP deve diferenciar maiúsculas de minúsculas em referências a esta constante (valor default = TRUE); ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 27 § Ex.: § Algumas constantes pré-definidas em PHP: o TRUE: valor verdadeiro (usado para comparações); o FALSE: valor falso; o _ _FILE_ _: nome do script em execução; o PHP_VERSION: versão corrente do PHP; o PHP_OS: nome do sistema operacional no qual o PHP está rodando; <html> <body> <?php define("meunome","Guilherme"); echo "Meu nome é " . meunome; ?> </body> </html> <html> <body> Meu nome é Guilherme </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 28 4.4. Arrays § Como em outras linguagens, arrays em PHP são estruturas de dados capazes de armazenar múltiplos valores (vetores) e cada um destes valores é acessado pelo nome do array seguido pelo índice do valor desejado entre “[ ]”; o Ex.: $vetor[0] = 10; $vetor[1] = 30; § Arrays em PHP permitem que cada posição armazene valores de tipos diferentes; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 29 § Em PHP, arrays podem ser de três tipos diferentes: o Arrays Numéricos: são aqueles cujos índices são valores numéricos (inteiros) iniciados em ‘0’ (zero); o Arrays Associativos: são aqueles cujos índices são textos (chamados de chaves associativas); o Arrays Multidimensionais: são as matrizes. § Ex.: $time[“SP”][“São Paulo”] = “Palmeiras”; $time[“SP”][“Campinas”] = “Guarani”; $time[“SC”][“Florianópolis”] = “Figueirense”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 30 § Em arrays numéricos, caso atribua-se um dado valor ao array com índice vazio, o PHP procurará a última posição ocupada do vetor e tentará inserir o novo elemento na posição seguinte: o Ex.: $valor[ ] = 40; /* considerando o exemplo anterior, 40 será inserido na terceira posição ($valor[2]) */ § Um mesmo array pode ter índices numéricos e associativos simultaneamente; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 31 § Outra maneira de criar arrays em PHP é através da função array(): o Ex.: $vetor = array(1, 2, 3, “nome”=>”Guilherme”); <html> <body> <?php $vetor = array(1, 2, 3, "nome"=>"Guilherme"); echo $vetor[0] . "\n <br /> \n"; echo $vetor["nome"]; ?> </body> </html> <html> <body> 1 <br /> Guilherme </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 32 4.5. Escopo das variáveis § Da mesma maneira que outras linguagens de programação, o escopo de uma variável em PHP pode ser global ou local (definidas dentro de funções); § No entanto, PHP apresenta algumas diferenças quanto a utilização de variáveis de escopo global: o Variáveis globais são aquelas declaradas fora de qualquer função; o Para acessar estas variáveis dentro de uma função, deve-se: § Defini-las como global no início da função, através da palavra reservada “global”: ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 33 • Ex.: global $x; $x = $x + 1; § Acessá-las através do array pré-definido $GLOBALS, que utiliza os nomes das variáveis como chaves associativas; • Ex.: $GLOBALS[“x”] = $GLOBALS[“x”] + 1; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 34 <html> <body> <?php $x = 5; $y = 10; function testa_escopo() { global $x; $x = $x + 1; $GLOBALS["y"] = $GLOBALS["y"] + 1; } echo $x . "<br />"; echo $y . "<br />"; testa_escopo(); echo $x . "<br />"; echo $y . "<br />"; ?> </body> </html> <html> <body> 5<br />10<br />6<br />11<br /> </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 35 4.6. Conversões de variáveis (casting) § Se tivermos uma string contendo somente números, PHP é capaz de somar esta string a outras variáveis numéricas; § No entanto, se uma dada string contiver texto e números, PHP utilizará somente a parte numérica (contida no início da string) para realizar as operações aritméticas: <html> <body> <?php $x = 5; $y = "7 bla 3 bla 4 bla 5"; $z = $x + $y; echo $z; ?> </body> </html> <html> <body> 12 </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 36 § Diante disso, muitas vezes é necessário realizar uma conversão manual de tipos de variáveis, para que certas operações possam ser feitas; § Isto é feito através de conversores de tipos (casting – muito parecido com C): Conversor Descrição(int), (integer) Converte para inteiro. (real), (float), (double) Converte para ponto flutuante. (string) Converte em string. (array) Converte em array. (object) Converte em objeto. <?php $x = 50; $y = 2.35; $z = $x + (int) $y; echo $z; ?> 52 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 37 5. Operadores 5.1. Operadores Aritméticos ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 38 5.2. Operadores de Atribuição 5.3. Operadores de Incremento e Decremento ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 39 5.4. Operadores de Comparação 5.5. Operador ternário (condicional) § Semelhante ao de outras linguagens: o cond ? exp1 : exp2; § Se a condição “cond” for verdadeira, a expressão “exp1” é executada. Caso contrário, “exp2” é executada. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 40 5.6. Operadores Lógicos § Na tabela acima, os operadores “&&” e “||” têm maior precedência sobre “and” e “or”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 41 5.7. Operadores de arrays § PHP possui também uma série de operadores que podem ser aplicados diretamente em arrays § O operador de união (“+”) adiciona os elementos do array da direita no array da esquerda, sem sobrescrever os elementos de mesmo índice (NÃO é append); $a = array("a" => "maçã", "b" => "banana"); $b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango"); $c = $a + $b; // Uniao de $a e $b //c["a"] == "maçã"; c["b"] == "banana"; c["c"] == "morango" ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 42 5.8. Operadores bit-a-bit § São operadores que atuam em um nível mais baixo de abstração (diretamente nos bits); § Podem ser usados para inverter bits de um operando, deslocar bits para a direita (divisões por 2) ou para a esquerda (multiplicações por 2) e realizar operações lógicas bit a bit; § O resultado de operações bit-a-bit sempre será um número inteiro. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 43 5.9. Precedência de Operadores ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 44 6. Estruturas de controle § Os comandos condicionais são: o if; o switch; § Já os comandos de repetição são: o while; o do ... while; o for; o foreach. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 45 6.1. if § Sintaxes: // Forma 1: if (expr 1) { bloco 1; } elseif (expr 2) { bloco 2; } else { bloco 3; } // Forma 2: if (expr 1): bloco 1; elseif (expr 2): bloco 2; else: bloco 3; endif; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 46 6.2. switch § Sintaxe: § O uso do bloco default não é obrigatório no comando switch; switch (operador) { case valor1: <comandos> break; case valor2: <comandos> break; .... case valorN: <comandos> break; default: <comandos> break; } ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 47 6.3. for § Sintaxes: § “inicialização” pode ser qualquer comando que deve ser executado no início do loop (até mesmo múltiplos comandos separados por “,”); // Forma 1: for (inicialização; condição; operador) { <comandos> } // Forma 2: for (inicialização; condição; operador): <comandos> endfor; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 48 6.4. foreach § É usado para percorrer todos os elementos de um array; § Foi implementado a partir da versão 4 de PHP; § Existem duas formas de utilização do comando foreach: // Forma 1: foreach ($nome_array as $valor) { <comandos> } // Forma 2: foreach ($nome_array as $chave => $valor) { <comandos> } ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 49 § No primeiro caso, todos os elementos do array são percorridos (do primeiro ao último) e, a cada iteração, o valor do elemento corrente do array é atribuído à variável $valor; § Já o segundo caso faz a mesma coisa, com a diferença que a chave (ou índice) do elemento atual também é atribuída à variável $chave; o Útil principalmente quando se tem arrays associativos. // Exemplo: $vetor = array(5, 6, 7, 8); foreach ($vetor as $v) { echo "O valor atual é $v <br />"; } foreach($vetor as $chave => $v) { echo "\$vetor[$chave] => $v <br />"; O valor atual é 5 <br /> O valor atual é 6 <br /> O valor atual é 7 <br /> O valor atual é 8 <br /> $vetor[0] => 5 <br /> $vetor[1] => 6 <br /> $vetor[2] => 7 <br /> $vetor[3] => 8 <br /> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 50 6.5. while § Sintaxes: // Forma 1: while (expr) { <comandos> } // Forma 2: while (expr): <comandos> endwhile; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 51 6.6. do ... while § Sintaxe: 6.7. break § O comando break encerra a execução do comando atual (if, for, while ou switch); o A execução passa para o primeiro comando após o término da estrutura que estava em execução; do { <comandos> } while (expr) ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 52 § Pode ser usado para forçar a saída de um comando condicional ou de um loop em execução. § break pode receber um parâmetro numérico (opcional) que indica o número de estruturas em execução que devem ser interrompidas; o Permite interromper, com um único comando, vários loops aninhados; o Ex.: “break 2;” pode interromper dois loops aninhados. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 53 6.8. continue § O comando continue é utilizado dentro dos comandos de repetição; o Permite ignorar as instruções restantes no laço corrente, e ir para o início da próxima iteração. § Como break, o comando continue também aceita um parâmetro numérico opcional, que indica o número de níveis que devem ser reiniciados; o Ex.: se tivermos um “continue 2” dentro de dois whiles aninhados, a execução saltará para o início da iteração seguinte do while mais externo. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 54 7. Funções § Funções em PHP permitem: o O agrupamento de trechos de códigos que realizam funções específicas (como em outras linguagens de programação); o O encapsulamento de trechos de códigos que não devem ser executados quando a página é carregada; § PHP disponibiliza uma grande quantidade de funções pré-definidas, que permitem realizar as mais diferentes tarefas: o Uma lista com estas funções pode ser encontrada em: § http://w3schools.com/php/default.asp § http://www.php.net/manual/pt_BR/funcref.php ST670: Tópicos em Programação Web Guilherme Palermo Coelho– FT/Unicamp – 2s2013 Tópico 5: PHP 55 § Para criar suas próprias funções, a sintaxe é a seguinte: o Na sintaxe acima, o retorno de um valor é opcional; § Pode ser retornado um array; function nome_funcao(arg1, arg2, arg3, ..., argN) { <comandos> [return <expressao>] } ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 56 7.1. Passagem de parâmetros: valor e referência § Quando se passa uma determinada variável para uma função, por padrão esta passagem se dá por valor, ou seja, alterações internas na variável não se refletem externamente: function incrementa($x) { $x = $x + 1; } $x = 1; incrementa($x); echo $x; // Será impresso o valor 1 a ret ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 57 § No entanto, PHP também permite a passagem de variáveis por referência, ou seja, de forma que alterações nestas variáveis dentro de uma função se reflitam fora dela; o Para isso, deve-se colocar o símbolo “&” antes do nome da variável no cabeçalho da função. function incrementa(&$x) { $x = $x + 1; } $x = 1; incrementa($x); echo $x; // Será impresso o valor 2 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 58 7.2. Parâmetros: definição de valor padrão § PHP também permite que sejam definidos valores padrão que os parâmetros de uma função devem ter: o Estes valores padrão são utilizados quando o parâmetro não é passado para a função no instante de sua chamada. o Para definir estes valores padrão, basta colocar um operador de atribuição após o parâmetro no cabeçalho da função, seguido pelo valor que deve ser considerado padrão. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 59 § Atenção: os parâmetros que terão valores padrão definidos devem ser os últimos parâmetros no cabeçalho da função. function teste($time, $titulo = “Campeão Mundial”) { Echo “O $time é $titulo <br />”; } teste(“Internacional”, “Campeão Gaúcho”); teste(“Santos”, “Campeão Paulista”); teste(“Barcelona”); O Internacional é Campeão Gaúcho <br /> O Santos é Campeão Paulista <br /> O Barcelona é Campeão Mundial <br /> function errada($a = 10, $b, $c) { ... } ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 60 8. PHP e formulários HTML § A principal forma de interação entre programas PHP e usuários é através dos formulários HTML; o Estes formulários (criados com a tag <form>) podem conter diversos elementos de entrada de dados (definidos com a tag <input>); <form> <p>Digite seu e-mail: <input type=”text” name=”eml” size=”20” /> </p> <p><input type=”submit” value=”Enviar!” name=”enviar” /></p> </form> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 61 § No exemplo anterior, os dados são perdidos ao se clicar no botão “Enviar!”; o O navegador não sabe para onde enviar os dados do formulário; § Para que o exemplo anterior se torne útil, é preciso indicar ao navegador o destino para o qual os dados de um formulário devem ser enviados: o No nosso caso, este destino será nossos programas em PHP. o Isto é feito através da atribuição do programa PHP (arquivo .php) ao atributo action do elemento <form>: ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 62 o Neste novo exemplo, os dados do formulário (conteúdo do campo e- mail) será enviado para o programa “recebe_dados.php”, que deverá trata-lo. <form action=”recebe_dados.php”> <p>Digite seu e-mail: <input type=”text” name=”eml” size=”20” /> </p> <p><input type=”submit” value=”Enviar!” name=”enviar” /></p> </form> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 63 8.1. Enviando informações para um programa PHP § Além de definir o programa PHP que receberá os dados no atributo action do formulário é preciso definir também como estes dados serão passados; § Existem dois métodos de passagem de parâmetros: GET e POST o Estes métodos são definidos no atributo method do elemento form: § <form action=”recebe_dados.php” method=”POST”> § <form action=”recebe_dados.php” method=”GET”> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 64 8.1.1. Método GET § O método GET é o método padrão para envio de dados; o Se nenhum método for especificado em method, GET é utilizado. § Neste método, os dados são enviados juntamente com o nome da página (na URL) que processará os dados recebidos: § Considere o exemplo abaixo: <form action="teste2.php"> Nome: <input type="text" name="fname" /> Idade: <input type="text" name="age" /> <input type="submit" /> </form> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 65 § Se preenchermos os campos acima com “Maria” e “23”, a URL que será chamada ao pressionarmos o botão “Enviar” será: o http://localhost:8080/teste2.php?fname=Maria&age=23 § Ou seja, os campos do formulário serão passados como parâmetros após o endereço de destino; o O caractere “?” sinaliza o início de uma cadeia de variáveis; o O caractere “&” é um separador de variáveis; o As variáveis (nomes) e seus respectivos valores são separados por “=”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 66 § A utilização do método GET possui duas desvantagens principais: o Os valores de todos os campos são visíveis para o usuário, § Isto pode ser um problema, no caso de passagem de senhas; o Existe um limite máximo de caracteres que podem ser enviados (cerca de 2.000); § Por outro lado, GET também tem vantagens: o Pode ser usado para passar parâmetros diretamente através do link; § Ex.: identificar um produto em uma loja virtual • http://www.loja.com/produto.php?id_produto=23 o Permite que o usuário salve, nos favoritos, links com os valores já preenchidos de um formulário. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 67 8.1.2. Método POST § Para utilização do método POST, deve-se obrigatoriamente utilizar o atributo method da tag <form>: § Diferentemente do método GET, o método POST envia os dados do formulário por meio do corpo da mensagem HTTP enviada ao servidor; o O usuário não vê mais os valores dos parâmetros na URL, apenas o endereço do programa ativado. <form action="teste2.php" method=”POST”> Nome: <input type="text" name="fname" /> Idade: <input type="text" name="age" /> <input type="submit" /> </form> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 68 § Além desta “ocultação” dos dados, outra vantagem do método POST é que não há limitação de tamanho de dados que estão sendo enviados. § O método POST também permite o envio de outros tipos de dados que não podem ser enviados pelo GET, como, por exemplo, imagens ou outros arquivos; o Para isso, usa-se o valor file no atributo type do elemento <input>. o Mais informações sobre o envio de arquivos para scripts PHP: § http://www.php.net/manual/en/features.file-upload.php ST670: Tópicos em Programação Web GuilhermePalermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 69 8.2. Tratando informações recebidas § Depois de especificar qual programa PHP receberá os dados de um formulário e como estes dados serão enviados, resta saber como trabalhar estes dados; § Para acessar estes dados, basta utilizar dois arrays predefinidos pelo PHP: o O array $_GET (usado para valores passados pelo método GET); o O array $_POST (usado para valores passados pelo método POST); § Em ambos os casos, os nomes dos campos no formulário HTML são usados como chaves associativas: o Os valores dos campos do formulário são armazenados como valores dos arrays; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 70 § Supondo o exemplo acima, no programa “teste2.php” poderíamos acessar os valores preenchidos nos campos do formulário através de: o $_POST[“fname”] (valor do campo “Nome”); o $_POST[“age”] (valor do campo “Idade”); § Se o método de envio tivesse sido GET, bastaria acessarmos: o $_GET[“fname”] (valor do campo “Nome”); o $_GET[“age”] (valor do campo “Idade”); <form action="teste2.php" method=”POST”> Nome: <input type="text" name="fname" /> Idade: <input type="text" name="age" /> <input type="submit" /> </form> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 71 8.3. Funções especiais para formatação de dados § Quando um programa em PHP recebe um conjunto de dados de um formulário, muitas vezes é necessário pré-processar estes dados antes de sua utilização; § Para realizar este pré-processamento, PHP disponibiliza algumas funções especiais, que serão tratadas a seguir. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 72 8.3.1. Função htmlspecialchars(<string>) § Esta função é útil para evitar que strings passadas pelo usuário, via formulários, contendo códigos HTML maliciosos sejam interpretadas pelo navegador como códigos HTML; o Por exemplo, inserção de imagens inapropriadas em um fórum de discussões. § Esta função recebe uma string como entrada e substitui todas as tags HTML por caracteres especiais: o & é substituído por & o “ é substituído por " ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 73 o < é substituído por < o > é substituído por > § Ao fazer estas substituições, o navegador não mais interpreta a string como código HTML, e sim como texto puro; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 74 8.3.2. Função stripslashes(<string>) § Quando o usuário digita em um formulário dados que contêm caracteres especiais, o PHP insere nestes dados o caractere de controle \ antes de cada caractere especial: o Ex.: “Lula” da Silva seria recebido por um programa PHP como \”Lula\” da Silva; § Para situações em que é necessário manipular estas strings sem os caracteres de controle, utiliza-se a função stripslashes; o Ex.: stripslashes(“\”Lula\” da Silva)” gera a string “Lula da Silva“. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 75 8.3.3. Funções urldecode(<string>) e urlencode(<string>) § Quando o método de envio dos dados é GET, todos os caracteres que não são alfanuméricos ou underscore ( _ ) são convertidos para um código hexadecimal precedido de %: o Ex.: “Maria da Silva” é enviada, via GET, pela seguinte URL: http://www.site.com/programa.php?nome=Maria%20da%20Silva § Para converter estes caracteres de volta para texto normal, utiliza-se a função urldecode: o Ex.: $nome = urldecode(“Maria%20da%20Silva”); o Neste exemplo, os códigos hexadecimais são convertidos de volta para os caracteres que eles representam. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 76 § De maneira análoga, caso seja necessário enviar alguma string para outro programa PHP via URLs, os caracteres não alfanuméricos (ou underscore) precisariam ser codificados antes do envio; o Isso pode ser feito pela função urlencode(<string>); § Esta função tem comportamento exatamente oposto a urlencode, ou seja, substitui os caracteres não alfanuméricos pela respectiva codificação hexadecimal precedida de %. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 77 9. Exercício 1 § Crie um documento HTML com os seguintes campos para cadastro de uma pessoa: nome completo, CPF, RG, idade, sexo, estado civil, telefone fixo, telefone celular e endereço. Quando estes campos forem preenchidos e o usuário clicar no botão “Cadastrar”, os dados devem ser enviados para um script PHP que exibirá o cadastro feito pelo usuário em um novo documento HTML. Garanta que este novo documento gerado pelo script PHP siga a especificação XHTML 1.1 (faça a validação no site do W3C). ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 78 10. Referências [1] Niederauer, J. “Desenvolvendo Websites com PHP”, 2ª ed. Novatec, 2011. [2] W3Schools PHP Tutorial: http://w3schools.com/php/default.asp [3] Manual do PHP: http://php.net/manual/pt_BR/index.php [4] Hudson, P. “Practical PHP Programming”: http://www.tuxradar.com/practicalphp [5] Gutmans, A., Bakken, S. S. & Rethans, D. “PHP5 Power Programming”: http://ptgmedia.pearsoncmg.com/images/013147149X/downloads/013147149X_book.pdf ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 1 Tópico 5: PHP – Parte 2 1. Server Side Includes (SSI) ...................................................................................... 2 2. Tratamento de exceções .......................................................................................... 6 3. Acesso a Banco de Dados ..................................................................................... 11 3.1. Conectando-se com um banco de dados ........................................................ 12 3.2. Executando comandos SQL em programas PHP ........................................... 15 3.3. Exibindo o resultado de comandos SQL ........................................................ 19 4. Exercício 2 ............................................................................................................ 22 5. Cookies e sessões em PHP .................................................................................... 23 5.1. Cookies ........................................................................................................... 26 5.2. Sessões ........................................................................................................... 32 6. Referências ............................................................................................................ 39 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 2 1. Server Side Includes (SSI) § É possível inserir o conteúdo de um arquivo PHP dentro de outro antes que o servidor execute o programa PHP; § Esta possibilidade simplifica várias atividades relacionadas a programação web: o Facilita a manutenção de partes de documentos HTML que são comuns a todos os documentos de um site: § Cabeçalhos e rodapés; § Menus, ...; o Permite uma melhor organização de programas PHP e a reutilização de código.ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 3 § SSI pode ser feito em PHP com as funções include() e require(): o O funcionamento destas duas funções é idêntico, exceto pela forma com que cada uma trata erros: § include apenas emite um warning e permite que a execução do programa continue; § require emite um erro e a execução do programa é encerrada; o Sintaxe: § include “caminho_e_nome_do_arquivo”; § require “caminho_e_nome_do_arquivo”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 4 // Arquivo “menu.php” <a href="/default.php">Home</a> <a href="/tutorials.php">Tutorials</a> <a href="/references.php">References</a> <a href="/examples.php">Examples</a> <a href="/about.php">About Us</a> <a href="/contact.php">Contact Us</a> // Arquivo “teste.php“ <html> <body> <div class="sitemenu"> <?php include("menu.php"); ?> </div> <h1>Bem vindo à página de teste!</h1> <p>Bla bla bla.</p> </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 5 § No caso de utilização de SSI para reaproveitamento de código, recomenda-se a utilização da função require; o Um script não deve ser executado se todas as funções não estiverem devidamente carregadas. // Arquivo resultante para o navegador <html> <body> <div class="sitemenu"> <a href="/default.php">Home</a> <a href="/tutorials.php">Tutorials</a> <a href="/references.php">References</a> <a href="/examples.php">Examples</a> <a href="/about.php">About Us</a> <a href="/contact.php">Contact Us</a> </div> <h1>Bem vindo à página de teste!</h1> <p>Bla bla bla.</p> </body> </html> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 6 2. Tratamento de exceções § A partir da versão 5, PHP também passou a oferecer novos mecanismos de tratamento de exceções; o Baseados em comandos try, catch e throw; o Muito semelhante ao de outras linguagens de programação OO. § Como em outras linguagens, trechos de códigos sujeitos a erros específicos são monitorados (em blocos try); § Exceções que ocorrem nestes blocos são lançadas (com o comando throw) e então capturadas (método catch) para receberem tratamento adequado. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 7 // Código que lança uma exceção: <?php function checkNum($number) { if($number>1) { throw new Exception("Valor maior que 1"); } return true; } //Lançamento explícito de uma exceçao checkNum(2); ?> // Mensagem de erro de PHP: Fatal error: Uncaught exception 'Exception' with message 'Valor maior que 1' in /Applications/MAMP/htdocs/testException.php:14 Stack trace: #0 /Applications/MAMP/htdocs/testException.php(20): checkNum(2) #1 {main} thrown in /Applications/MAMP/htdocs/testException.php on line 14 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 8 § No exemplo anterior, a mensagem de erro foi lançada mas não foi devidamente tratada pelo programa; o Isso deveria ter sido feito com os comandos try ... catch. // Código que lança uma exceção: <?php function checkNum($number) {...} try // O código dentro deste bloco é monitorado: { checkNum(2); } catch(Exception $e) // Tratamento da exceção lançada” { echo 'Mensagem de erro: ' .$e->getMessage(); } ?> // Mensagem de PHP: Mensagem de erro: Valor maior que 1 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 9 § PHP permite que se defina uma função-padrão (criada pelo usuário) a ser chamada toda vez que for lançada uma exceção não capturada; o Top Level Exception Handler; o Sintaxe: set_exception_handler(‘nome_da_funcao’); // Lançamento de uma exceção personalizada: <?php function myException($exception) { echo "<b>Exceção:</b> " . $exception->getMessage(); } set_exception_handler('myException'); throw new Exception('Exceção não capturada.'); ?> Exceção: Exceção não capturada. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 10 § Regras gerais para exceções em PHP: o Cada bloco try ou comando throw deve estar acompanhado de uma bloco catch correspondente; o Múltiplos blocos catch podem ser usados para capturar exceções de classes diferentes; o Exceções podem ser relançadas de dentro de um bloco catch: § Este bloco catch deve estar dentro de um bloco try. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 11 3. Acesso a Banco de Dados § PHP possui uma série de funções nativas que permitem o acesso e a manipulação de dados em diferentes Sistemas Gerenciadores de Bancos de Dados (SGBDs); § Aqui serão tratados apenas os mecanismos de interação entre PHP e MySQL; o Não serão discutidos detalhes sobre sistemas de bancos de dados e sobre a linguagem SQL (Structured Query Language) o Para maiores informações sobre o MySQL: http://dev.mysql.com/ o Para maiores informações sobre a linguagem SQL: http://www.w3schools.com/sql/default.asp ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 12 3.1. Conectando-se com um banco de dados § O primeiro passo que deve ser tomado antes de se acessar um banco de dados para realização de operações é abrir uma conexão com o banco; § Em PHP, isto é feito com a função mysqli_connect(), que retorna um apontador para a conexão (ou false em caso de erro) e pode receber seis parâmetros (opcionais): o string servidor: endereço do servidor MySQL; o string usuario: nome do usuário para autenticação no MySQL; o string senha: senha do usuário para autenticação; o string nome_db: nome da base de dados a ser usada; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 13 o int porta: número da porta a ser usada para conexão com o MySQL; o string socket: especifica o socket que deve ser usado para conexão. o Mais informações: http://w3schools.com/php/func_mysqli_connect.asp <?php $con = mysqli_connect("localhost","root","pwd","bdteste"); /* Verifica Conexão */ if (!$con) { echo "Erro: " . mysqli_connect_error(); } //... ?> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 14 § Por definição, a conexão com o banco de dados é automaticamente encerrada quando o script termina sua execução. o Caso seja necessário fechar a conexão antes, pode-se usar a função mysqli_close(), que recebe como parâmetro o ponteiro para a conexão retornado por mysqli_connect(). <?php $con = mysqli_connect("localhost","root","pwd","bdteste"); /* Verifica Conexão */ if (!$con) { echo "Erro: " . mysqli_connect_error(); } //... mysqli_close($con); ?> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 15 3.2. Executando comandos SQL em programas PHP § Depois de estabelecida a conexão com o BD, é possível executar quaisquer comandos SQL no banco de dados através do comando mysqli_query() do PHP; § A sintaxe deste comando é: o recurso mysqli_query(recurso conexão, string cmd [, int modo]); § O parâmetro conexão especifica a conexão com o BD a serutilizada; § O parâmetro cmd é uma string que contém o comando SQL a ser enviado ao BD (não deve terminar em “;”); § O parâmetro modo (opcional) indica o modo com que os resultados serão tratados. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 16 § Ex.: criação da tabela “produtos”: <?php $con = mysqli_connect("localhost","root","pwd","bdteste"); $sql = “CREATE TABLE produtos ( codigo_produto smallint NOT NULL, PRIMARY KEY(codigo_produto), nome_produto varchar(80) NOT NULL, descricao_produto text, preco float NOT NULL, peso float, cod_categoria smallint NOT NULL, cod_subcategoria smallint NOT NULL, adicionais text)”; $res = mysqli_query($con, $sql); // Se $res == FALSE, a query não foi executada (erro). ?> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 17 § Ex.: inserção de um registro na tabela “produtos”: <?php $con = mysqli_connect("localhost","root","pwd","bdteste"); $sql = “INSERT INTO produtos VALUES ( 1, 'Camiseta do Palmeiras', 'Camiseta nas cores verde e branco', 89.95, 1.5, 5, 2, 'Disponível nos tamanhos: 3, 5, 9 e 10')”; $res = mysqli_query($con, $sql); //… ?> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 18 § Ex.: obtenção de todos os registros armazenados em uma tabela chamada “produtos”, armazenada na base de dados “bdteste”; § No exemplo acima, a variável $resultado conterá um ponteiro para o conjunto de registros retornado pelo comando SELECT; § Nos exemplos anteriores, $res conterá um valor booleano (TRUE se a operação foi bem sucedida, FALSE caso contrário); <?php $con = mysqli_connect("localhost","root","pwd","bdteste"); $resultado = mysqli_query($con, “SELECT * FROM produtos“); //… ?> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 19 3.3. Exibindo o resultado de comandos SQL § Para tratar as informações retornadas pelos comandos SQL executados, PHP disponibiliza uma série de funções: Função Descrição mysqli_affected_rows() Retorna o número de linhas afetadas por uma operação. mysqli_fetch_array() Retorna uma linha do resultado em um array de strings. - Por ser array associativo, numérico ou misto. mysqli_fetch_object() Retorna uma linha como um objeto. mysqli_fetch_row() Armazena a linha atual do resultado em um array. mysqli_num_rows() Retorna o número de linhas retornadas por uma consulta. - Usada na operação SELECT. mysqli_num_fields() Retorna o número de colunas de uma consulta. § Informações sobre parâmetros e outras funções: http://w3schools.com/php/php_ref_mysqli.asp ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 20 § Para ilustrar, vamos supor que queiramos exibir os resultados de uma consulta. § Para isso, podemos usar a função mysqli_fetch_array(), que coloca as linhas retornadas em um array associativo (nome do campo na tabela é o índice do vetor); o A cada execução dessa função o ponteiro armazenado na variável de resultados do comando SQL é avançado para a próxima linha; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 21 <?php $con = mysqli_connect("localhost","root","pwd","bdteste"); $resultado = mysqli_query($con, “SELECT * FROM produtos“); while($row = mysqli_fetch_array($resultado)) { echo “Nome do produto: ”.$row[“nome_produto”].“<br />“; echo “Descrição: ” . $row[“descricao_produto”]; echo "<br />"; } mysqli_close($con); ?> Nome do produto: Camiseta do Palmeiras Descrição: Camiseta nas cores verde e branco ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 22 4. Exercício 2 § Crie um site que contenha um menu lateral (exibido via SSI) que contenha opções de acesso a duas páginas: o A primeira delas deve conter um formulário de cadastro de produtos para uma loja de artigos esportivos. Este formulário deve permitir o cadastro do código do produto, do nome, da sua descrição, do seu preço e do seu peso. Ao clicar em no botão “Cadastrar”, o produto deve ser cadastrado em uma tabela de um banco de dados (use MySQL). o A segunda página, ao ser carregada, deve consultar e listar para o usuário todos os produtos cadastrados no banco de dados. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 23 5. Cookies e sessões em PHP § Quando se acessa um website pelo protocolo HTTP, o servidor trata cada requisição a um documento (página) como um evento independente; o HTTP não permite o armazenamento de informações de estado (ex.: um mesmo usuário acessando dois documentos diferentes); § Neste contexto, cookies e sessões são muito úteis, pois permitem que se mantenha informações sobre os usuários enquanto eles navegam pelo site; o Cookies: são arquivos texto que ficam armazenados no computador do usuário e podem ser recuperados posteriormente pelo servidor em que o site está hospedado; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 24 o Sessões: são recursos que podem ser usados para manter uma conexão com o usuário enquanto ele estiver navegando pelo site: § São variáveis que armazenam informações sobre cada usuário enquanto ele estiver acessando as páginas de um site. § Entre as utilidades de cookies e sessões, pode-se citar: o Autenticação de usuários: criação de um sistema que permita operações de login, autenticação e logout, garantindo o acesso do conteúdo de um site apenas a usuários autorizados; o Carrinho de compras: usado por sites de comércio eletrônico; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 25 o Exibição de anúncios e imagens: para não exibir o mesmo anúncio ou imagem repetidamente; o Personalização de páginas: por exemplo, uma livraria poderia exibir um anúncio de um livro de culinária se o mesmo usuário tiver feito buscas sobre este tópico em visitas anteriores ao site. ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 26 5.1. Cookies § São arquivos-texto armazenados no computador do cliente e recuperados posteriormente pelo servidor; § Um cookie é formado por um par nome/valor (possui um nome pelo qual ele é referenciado e um valor a ele associado); § Cookies podem ser utilizados em qualquer aplicação que: o Precise compartilhar dados entre diferentes páginas; o Precise compartilhar dados entre diferentes acessos (em dias e horários distintos); § Cookies podem ser mantidos na máquina do usuário por vários dias; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 27 § Para criar e excluir cookies da máquina do usuário, PHP disponibiliza a função setcookie(); o Sintaxe: bool setcookie(string nome [, string valor [, int validade [, string caminho [, string domínio [, int seguro [, bool somente_http ]]]]]]); § nome: indica o nome do cookie sendo enviado ao cliente (é o único parâmetro obrigatório); § valor: é o valor do cookie; § validade: define o tempo de validade do cookie (em número de segundos a partir de 01/01/1970 – 0:00h). Caso não definido, expira quando o browser for fechado; ST670: Tópicosem Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 28 § caminho: caminho do servidor para o qual o cookie estará disponível; § domínio: domínio para o qual o cookie estará disponível; § seguro: indica se o cookie é seguro (‘1’ só permitirá a transmissão do cookie se a conexão for HTTPS); § somente_http: se for TRUE, indica que o cookie só estará disponível via protocolo HTTP (não estará disponível para linguagens de script como JavaScript). o Ex.: criar um cookie § setcookie(“nome”, “Guilherme”); ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 29 o Ex.: excluir o cookie criado anteriormente (prazo de validade anterior ao tempo atual) § setcookie(“nome”, “”, time()-3600); o Ex.: criar um cookie válido por 48h: § setcookie(“nome”, “Guilherme”, time()+172800); § Atenção: o envio de cookies para o cliente deve ser a primeira coisa na execução da página, ou seja, a função setcookie() deve ser utilizada antes de qualquer tag HTML; § Para acessar um cookie enviado pelo navegador do cliente, PHP disponibiliza o array superglobal “$_COOKIE”; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 30 o $_COOKIE é um array com índices associativos; o O nome do cookie é o índice no array; o Ex.: obter o valor do cookie “nome” criado no exemplo anterior: § $valor = $_COOKIE[“nome”]; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 31 <?php if (isset($_COOKIE["nome"])) { $message = "Bem vindo de volta, " . $_COOKIE["nome"]; setcookie("nome", "", time()-3600); //apaga } else { $message = "Seja bem vindo! <br />"; setcookie("nome", "Guilherme"); } echo $message; ?> // Primeira execução: Seja bem vindo! // Segunda execução: Bem vindo de volta, Guilherme! ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 32 5.2. Sessões § Uma sessão de PHP permite que sejam armazenados, no servidor, informações sobre o usuário que acessa um determinado website; o Estas informações de sessão ficarão armazenadas no servidor enquanto o usuário estiver navegando pelas páginas do site (enquanto a sessão estiver aberta); § Cada sessão tem um número identificador único à “session id”; o No início de uma sessão, o PHP atribui o session id à constante “SID”; o Para uma página ter acesso aos dados da sessão, ela deve conhecer este identificador; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 33 o É necessário transmitir o session id entre páginas; § Isto pode ser feito de duas formas: • Via cookies (automaticamente, se estiver habilitado na diretiva session.use_cookies do arquivo php.ini); • Via propagação de variáveis na URL; o Neste caso, adiciona-se o valor de SID ao final da URL: § echo ‘<a href=“pagina.php?’ . SID . ‘“>Clique </a>’; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 34 § O primeiro passo para armazenar informações em uma sessão é iniciar uma sessão no servidor; o Isto pode ser feito através da função session_start(); § A função session_start() serve tanto para criar uma sessão quanto para restaurar os dados de uma sessão com base no identificador corrente (session ID); o Sintaxe: bool session_start(); o Esta função deve aparecer antes de qualquer tag HTML; § Após a criação de uma sessão, pode-se então registrar variáveis a esta sessão; ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 35 § Ao registrar uma variável a uma sessão, ela se torna disponível para todas as páginas que serão acessadas até o término da sessão; § A maneira mais recomendada de registrar variáveis a uma sessão é através da adição direta de entradas ao array “$_SESSION”; <?php session_start(); if (!isset($_SESSION[‘contador’])) { $_SESSION[‘contador’] = 1; } else { $_SESSION[‘contador‘]++; } ?> ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 36 § Por fim, para apagar os dados de uma sessão, pode-se adotar duas abordagens: o Utilizar a função unset() do PHP, que permite a eliminação de variáveis específicas: § <?php unset($_SESSION[‘contador’]); ?> o Utilizar a função session_destroy(), que encerra a sessão corrente e elimina todas as variáveis de sessão: § <?php session_destroy(); ?> § Maiores informações sobre sessões em PHP podem ser acessadas em: o http://www.php.net/manual/en/book.session.php ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 37 § Exemplo: acessando informações de uma página em outra, via variáveis de sessão (SID passado via cookie); ?php session_start(); echo "Esta é a primeira página"; $_SESSION['nome'] = "Guilherme"; $_SESSION['sobrenome'] = "Coelho"; $_SESSION['data'] = date('d/m/Y', time()); echo '<br /><br /><a href="session2.php">Página 2</a>'; ?> Esta é a primeira página Página 2 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 38 ?php session_start(); echo "Esta é a segunda página <br />"; echo $_SESSION['nome'] . "<br />"; echo $_SESSION['sobrenome'] . "<br />"; echo $_SESSION['data'] . "<br />"; echo '<br /><a href="session1.php?">Página 1</a>'; session_destroy(); ?> Esta é a segunda página Guilherme Coelho 03/05/2012 Página 1 ST670: Tópicos em Programação Web Guilherme Palermo Coelho – FT/Unicamp – 2s2013 Tópico 5: PHP 39 6. Referências [1] Niederauer, J. “Desenvolvendo Websites com PHP”, 2ª ed. Novatec, 2011. [2] W3Schools PHP Tutorial: http://w3schools.com/php/default.asp [3] Manual do PHP: http://php.net/manual/pt_BR/index.php [4] Hudson, P. “Practical PHP Programming”: http://www.tuxradar.com/practicalphp [5] Gutmans, A., Bakken, S. S. & Rethans, D. “PHP5 Power Programming”: http://ptgmedia.pearsoncmg.com/images/013147149X/downloads/013147149X_book.pdf
Compartilhar