Você está na página 1de 61

Desenvolvendo aplicaes com PHP e MySQL

2 Sumrio Notas do Autor, 3 Introduo, 4 Instalando o VertrigoServ no Windows, 5 Instalando o Xampp (Apache, MySQL, PHP, Perl) no Linux, 6 Um primeiro Script, 6 Sintaxe Bsica, 7 Tipos, 7 Array, 11 Variveis, 12 Constantes, 13 Expresses, 14 Operadores, 15 Estruturas de Controle, 18 Estruturas de repetio, 21 Funes, 23 Algumas funes do PHP, 25 Manipulao de Arrays, 32 Funes Matemticas, 37 PHP - Constantes Matemticas, 41 Formulrios e Interao com HTML, 44 Um pouco sobre Sesses, 46 MySQL, 47 Inserir, deletar e selecionar com MySQL, 49 Funes do MySQL, 51 PHP interagindo com o Banco de Dados MySQL, 52 Construindo uma Aplicao PHP+MySQL, 54 Referncias Bibliogrficas, 61

3 Notas do Autor Este guia no tem a pretenso de exaurir o assunto, mas servir de fonte de consulta a iniciantes em programao que querem desenvolver aplicaes para Web. muito importante que o leitor teste os exemplos, faa os exerccios propostos e refaa os exerccios resolvidos. Os pr-requisitos para a leitura deste guia so: lgica de programao e familiarizao com HTML. Estima-se que pouco mais de 10% dos domnios na Internet possuem o PHP instalado, da uma grande oportunidade a esses estudantes e profissionais. Esta a primeira verso do guia. Daniel Moreira dos Santos
Tcnico em Informtica e Licenciando em Matemtica

Contatos: daniel-htm@hotmail.com http://www.danielmoreira.wordpress.com Dvidas, sugestes e crticas so bem-vindas. 12 Setembro de 2009 Devido a outras ocupaes voltei a escrever o guia e at mesmo a usar o PHP apenas neste ano de 2010. Hoje, dia 29 de Julho de 2010, publico a primeira verso, que chamarei de verso 0 (zero). Espero em breve atualiz-la com idias que j tenho em mente e tambm com sugestes de leitores e amigos. Fico feliz de poder contribuir de alguma forma para o seu aprendizado. O segredo dividir para conquistar! Daniel Moreira dos Santos 29 de Julho de 2010

4 Introduo O nome PHP um acrnimo que significa PHP Hypertext Preprocessor. PHP uma linguagem de script interpretada utilizada em maioria para desenvolver aplicaes Web embutida em um HTML, mas tambm pode ser usada para o desenvolvimento de aplicaes desktop GUI (veja sobre PHP-GTK) e scripts de linha de comando. O PHP que temos hoje o sucessor do PHP/FI, que significa Personal Home Page/Forms Interpreter. O PHP/FI foi criado por Rasmus Lerdorf por volta de 1995 com o intuito de controlar os acessos a sua home page (currculo on line). Voc pode consultar mais sobre a histria do PHP na pgina oficial http://www.php.net. Atualmente o PHP est na verso 5. Esta verso pode ser encontrada no site assim como a documentao em portugus. A princpio daremos uma nfase maior ao desenvolvimento de aplicaes para Web. Para tal, voc precisa ter instalado em sua mquina um cliente (browser) Web, um servidor Web (usaremos o Apache) e evidentemente o interpretador PHP. Caso no tenha voc pode instal-los separadamente ou baixar os pacotes pr-configurados, voc pode alugar um servidor que possua isso instalado se preferir. Como a configurao no nosso objetivo mostraremos onde e como baixar esses pacotes no Linux e Windows. Grande parte das aplicaes Web faz interao com um banco de dados, ns utilizaremos o banco de dados MySQL, j que muito utilizado e gratuito. O PHP uma linguagem de script Server-Side, isto , um conjunto de cdigos que sero interpretados no servidor. Uma caracterstica que o cdigo de um arquivo.php no exibido como acontece com um cdigo HTML ou Java script que so chamados linguagens Client-Side, so interpretadas no cliente Web.

5 Instalando o VertrigoServ no Windows Como dito anteriormente, precisamos instalar o Apache (servidor Web HTTP), PHP e o MySQL (Sistema Gerenciador de Banco de Dados). Para tal vamos instalar O VertrigoServ, que um projeto desenvolvido para facilitar a instalao desses componentes. O VertrigoServ ainda inclui SQLite, SQLiteManager, ZendOptimizer, Smarty e o PhpMyAdmin. Esse ltimo ns utilizaremos algumas vezes para manusearmos o nosso banco MySQL. Para baix-lo abra a pgina do projeto http://vertrigo.sourceforge.net/?lang=br e procure pela verso mais recente. Depois de instalar, inicie a aplicao. Note que na barra de tarefas ( direita) aparecer um cone com um detalhe verde significando que tudo est funcionando (Apache, PHP e MySQL). Clique sobre o cone e em seguida sobre WWW Folder. Esta pasta onde os seus arquivos.php devero estar. Crie uma pasta com o nome do seu projeto, para visualizar seus arquivos .php abra o seu navegador preferido e digite http://localhost/nome_da_sua_pasta/nome_do_arquivo.php. Voc pode acessar o PhpMyAdmin em Tools (ou Ferramentas) e depois clicando sobre PhpMyAdmin. Pronto, isso tudo que precisaremos no momento!

6 Instalando o Xampp (Apache, MySQL, PHP, Perl) no Linux. Abra o seu Web browser e digite http://sourceforge.net/project/showfiles.php?group_id=61776, essa a pgina do projeto. Procure pela verso mais nova para Linux. Agora abra o seu terminal e digite: sudo tar xvfz xampp-linux-1.6.4.tar.gz -C /opt Agora vamos iniciar as aplicaes: sudo /opt/lampp/lampp start Pronto. Est tudo instalado no diretrio /opt/lampp com a configurao padro. Voc pode instalar em outro diretrio se preferir. Para ver seus arquivos.php atravs de um Web browser coloque-os na pasta /opt/lampp/htdocs. No navegador digite: http://localhost/nome_da_pasta/nome_do_arquivo.php Um primeiro Script Aqui vamos mostrar um primeiro script em PHP que imprimir a mensagem Ol Mundo! no document do seu browser.

Este no um script muito til, pois sua sada ser a mesma de: <p> Ol&aacute; Mundo </p>. Mas a inteno de mostrar como ele aparece em um cdigo HTML. Note que um script em PHP comea com <?php e termina com ?>. O que estiver entre esses delimitadores de cdigo no aparece no lado cliente como um cdigo. Clique com o boto direito do mouse sobre o document, em seguida clique em exibir cdigo-fonte, note que voc no consegue visualizar o cdigo PHP. A funo echo imprime uma string na tela, nesse caso imprimimos Ol Mundo.

7 Sintaxe Bsica Como falado anteriormente, um script em PHP inicia com a tag <?php e termina com a tag ?>. Essas so as tags mais utilizadas para delimitar um cdigo PHP, mas voc tambm pode usar <? e ?> desde que a opo short_open_tag esteja ativada no seu php.ini ou tambm se o PHP foi configurado com a opo --enable-short-tags. Outra opo, porm menos comum, a de usar <script language-php> e </script>. Como curiosidade voc poderia pesquisar sobre como usar tags asp no php. Uma boa prtica de programao usar ponto e vrgula ( ; ) no final de cada comando. O ponto e vrgula diz ao PHP que a instruo chegou ao fim, e se no houver erro ele executa a prxima instruo. Voc pode omitir o ltimo ponto e vrgula ( ; ) do bloco de cdigo, pois a tag ?> diz ao php que o fim da instruo e do bloco. Tipos O PHP tem suporte a oito tipos primitivos: boolean, integer, float (double), string, array, object, resource e null. O PHP uma linguagem dita fracamente tipada, pois o tipo da varivel depende do contexto em que ela est inserida, isto decidido em tempo de execuo. A funo var_dump() checa o tipo e o valor de uma varivel ou expresso. Mas comumente queremos saber apenas o tipo de uma varivel, ento usamos as funes is_int(), is_float, is_string() e is_bool(). Assim como em outras linguagens podemos forar um tipo em uma varivel. Para fazermos isso usamos o que chamamos de casting ou a funo settype(). Para converter um tipo no PHP escrevemos o nome do tipo que queremos moldar a varivel entre parntesis e em seguida o nome da varivel. Veja a sintaxe do casting no exemplo abaixo:

Moldagens possveis: (int), (integer) - molde para inteiro. (bool), (boolean) - converte para booleano. (float), (double), (real) - converte para nmero de ponto flutuante. (string) - converte para string (binary) - converte para string binria (array) - converte para array (object) - converte para objeto Booleano

8 Booleano, bool ou boolean, o tipo mais simples. Pode assumir apenas dois valores: true ou false. Esses so os chamados tipos lgicos. Observe que as palavras true e false so insensitivas, sendo assim o mesmo que escrever True e False. Usualmente o tipo booleano utilizado quando retornado de uma expresso envolvendo algum operador lgico: ==, >=, <=, >, <, !=. Como vimos acima, podemos converter um valor qualquer para boolean explicitamente utilizando casting ou atribuindo esse tipo a uma varivel. Entretanto se uma estrutura de controle, operador ou funo necessitar de um argumento booleano, esse ser enviado para o PHP mesmo que a varivel seja de um outro tipo qualquer. Isso ocorre porque o PHP decide o tipo da varivel em tempo de execuo, isso significa que uma varivel pode ser boolean dependendo do contexto. Em uma converso para booleano esses valores se tornam false: 1. 2. 3. 4. 5. 6. 7. O prprio booleano FALSE. O inteiro 0 (zero) o ponto flutuante 0.0 (zero). Uma string vazia e a string "0". Um array sem elementos. Um objeto sem elementos membros (somente PHP 4). O tipo especial NULL (incluindo variveis no definidas). Objeto SimpleXML criado para tags vazias.

Qualquer valor diferente assumido como true. Inteiro O tipo inteiro o mesmo que conhecemos na matemtica quando falamos de conjuntos numricos. Um inteiro um elemento do conjunto Z={..., -2, -1, 0, 1, 2, ...}. No entanto, a memria do computador limitada, por isso existe um valor mximo para um inteiro no computador. O tamanho mximo depende da plataforma, sendo um numero aproximado a 2 bilhes que um nmero de 32 bits com sinal. Como observado no manual do PHP, ele no suporta inteiros sem sinal. O tamanho do inteiro pode ser determinado por PHP_INT_SIZE, o valor mximo para PHP_INT_MAX desde o PHP 4.4.0 e PHP 5.0.5. Os inteiros podem ser representados em notao decimal (ou base 10), octal (ou base 8) e hexadecimal (ou base 16). Para que o PHP entenda que um nmero est sendo representado em uma outra base numrica preciso que voc explicite isso. Preceda o nmero com um 0 para indicar escrita em notao octal e com 0x para indicar notao hexadecimal. Veja esse exemplo:

Uma observao importante que se voc usa um nmero maior que o limite suportado pelo tipo inteiro, o PHP interpreta como um float. No existe um operador de diviso inteira no PHP como o DIV em algumas linguagens. Entretanto voc pode usar o casting que vai truncar o nmero real restando apenas os dgitos inteiros ou voc pode usar a funo round(). Para converter um valor para o tipo inteiro voc pode usar os modificadores (int) e (integer) como dito anteriormente ou ento deixar com o que o PHP converta como acontece com as converses para booleano. Isso acontece desde que algum operador, estrutura de controle ou funo necessite de um argumento inteiro. O valor lgico true convertido para inteiro como 1, e o valor lgico false convertido com 0. Quando um ponto flutuante moldado para inteiro atravs do casting ele truncado. Se o nmero estiver alm dos limites de um inteiro o resultado indefinido. Ponto Flutuante O tipo float, double ou em portugus, ponto flutuante, uma representao de um nmero real. Mas como j mencionado, o computador possui uma memria finita, o que implica que um float uma aproximao limitada do nmero. O tamanho de um float dependente da plataforma assim como o tamanho de um int, sendo o mximo de ~1.8e308 com uma preciso de 14 casas decimais (nmero de 64 bits). Por problemas de perda de preciso, nunca podemos ter certeza se um dado nmero de ponto flutuante realmente exato. Na maioria das vezes ele uma aproximao suficientemente boa para algum propsito especfico. O PHP vem com algumas funes de preciso arbitrria que podem te ajudar se precisar de uma preciso maior do que a fornecida. Para converter um boolean ou um float, primeiro a converso feita para um int e ento segue a regra de converso de inteiros para ponto flutuante. O caso do tipo primitivo string especial e veremos adiante. Veja um exemplo de representaes de ponto flutuante:

10

String Uma string uma cadeia de caracteres. No PHP uma string no possui um tamanho mximo, isto , pode ser uma cadeia to longa quanto se queira. Voc pode representar uma string com ' ' (apstrofo) ou (aspas duplas). O PHP entende mais seqncias de escape para caracteres especiais quando a string delimitada por aspas. Veja abaixo algumas seqncias de escape extradas do manual: \n fim de linha (linefeed ou LF ou 0x0A (10) em ASCII) \r retorno de carro (carriage return ou CR ou 0x0D (13) em ASCII) \t TAB horizontal (HT ou 0x09 (9) em ASCII) \v TAB vertical (VT ou 0x0B (11) em ASCII) (desde o PHP 5.2.5) \f form feed (FF ou 0x0C (12) em ASCII) (desde o PHP 5.2.5) \\ contra barra ou barra invertida \$ sinal de cifro \" aspas \[0-7]{1,3} a seqncia de caracteres batendo a expresso regular dos caracteres em notao octal \x[0-9A-Fa-f]{1,2} a seqncia de caracteres batendo a expresso regular de um caractere em notao hexadecimal. Veja este exemplo do uso de strings retirado do manual:

11 Array Um array um conjunto de variveis indexadas em uma lista. No PHP, um array um tipo bastante complexo, voc pode acessar um valor da lista atravs de um ndice que pode ser um inteiro ou at uma string. Um array pode armazenar valores de diversos tipos, como, inteiro, float, booleano, string e at mesmo outro array introduzindo o conceito de array multidimensional. Um array de uma dimenso comumente chamado de vetor. Podemos simular rvores binrias como array de arrays, mas esse conceito foge da nossa pauta inicial. Um array pode ser construdo com o mtodo array() do PHP. Veja a sintaxe e logo abaixo um exemplo ilustrativo do uso do construtor: array( ndice => valor, ndice=>valor, ... ) Como falamos anteriormente, o ndice pode ser um inteiro ou uma string. Valor pode ser de qualquer tipo.

importante notar algumas coisas, se voc indexar um valor com um float, isto , us-lo como um ndice no seu array, ele ser convertido para inteiro. possvel criar um array omitindo os ndices, isto faz com que o PHP fixe os ndices como inteiros. Se todos os ndices forem omitidos o PHP inicializa o primeiro ndice com 0 e o restante de 1 em 1 em ordem crescente. Se forem omitidos alguns ndices apenas, o PHP pega o maior ndice inteiro acrescentado de um e indexa o novo valor da lista.

Veja este exemplo de um array multidimensional:

12 Existem outras observaes a serem feitas sobre o tipo array. O uso do valor lgico true como ndice ser interpretado pelo PHP como o inteiro 1. Analogamente, false ser interpretado como 0 inteiro. Usar NULL para indexar um valor no array interpretado como uma string vazia e usar uma string vazia como chave ir criar (ou sobrescrever) uma chave com uma string vazia e seu valor. Um aviso importante: voc no pode usar um array ou outro objeto como ndice, isso far com que o PHP exiba a seguinte mensagem de erro: Illegal offset type.. Tambm existe a possibilidade de indexar valores em um array com colchetes explicitando o ndice e o valor a ser atribudo. Veja o prximo exemplo:

Variveis Uma varivel, tanto no PHP como em qualquer outra linguagem, uma referncia uma regio limitada da memria que contem informao de um determinado tipo de dado. Toda varivel no PHP deve iniciar com $, isto se torna muito bom quando necessrio identificar variveis em um cdigo muito extenso. O PHP case sensitive, isto , h distino no uso de letras maisculas e minsculas. Logo, uma varivel $Variavel diferente de $variavel, $vArIaVeL, $VARIAVEL e etc. O nome de uma varivel no PHP pode ter qualquer tamanho, desde que obedea algumas regras. Um nome de varivel sempre deve iniciar com uma letra ou sublinhado, evidentemente depois do $, seguido de qualquer seqncia de letras, algarismos e sublinhados. Veja o prximo exemplo sobre o uso de variveis no PHP:

Como na linguagem C possvel atribuir uma varivel a outra por valor e atribuir por referncia. Uma atribuio por valor significa que uma cpia da varivel atribuda passada para a outra varivel. Quando o valor de uma das duas modificado o da outra permanece inalterado. Quando feita uma atribuio por referncia a segunda varivel referencia (aponta) para a varivel original. Logo possvel alterar o valor da varivel original utilizando a varivel que recebeu a

13 atribuio. Para fazer referncia necessrio o uso do & antes da varivel original. Veja este exemplo:

Como mostrado no exemplo acima, s possvel atribuir por referncia variveis com nome. As variveis no precisam ser inicializadas no PHP, falaremos um pouco sobre boas prticas de programao e riscos que isso representa no Captulo de Segurana. Quando no inicializadas elas recebem um valor padro do tipo delas, que como dissemos, decidido em tempo de execuo de acordo com o contexto - FALSE, zero, string vazia ou null. Constantes Pela prpria definio da palavra, uma constante no uma varivel. Uma varivel um identificador para um valor que pode ser alterado, e no PHP at receber um valor de outro tipo. Uma constante um identificador de um nico valor que no alterado no decorrer do script. O nome ou identificador de uma constante sempre maisculo por padro. Como qualquer outro rtulo no PHP, o nome de uma constante vlida comea com uma letra ou sublinhado, seguido por uma seqncia de letras, nmeros e/ou sublinhados. Veja este exemplo:

A forma de definir uma constante utilizando a funo define(). Uma constante no pode ser alterada depois de sua definio. Constantes podem ser boolean, int, float ou string. Uma constante no pode ser um objeto, que estudaremos adiante. Para acessar o valor de uma constante basta escrever seu nome ou utilizar a funo constant(). Uma observao importante que voc no pode utilizar o caractere $ no nome de uma constante.

14 Expresses Utilizamos expresses em todos os exemplos dados acima. Uma expresso uma sentena com valor. As expresses podem ser separadas em expresses de atribuio e expresses de comparao. A forma mais simples de aparecer uma expresso em uma atribuio de um valor constante a uma varivel, mas uma expresso aparece em diversas outras formas como comparaes retornando um valor lgico. Veja o exemplo abaixo:

O PHP avalia uma atribuio da direita para a esquerda, portanto vlido e muito comum escrevermos $a=$b=45;. O que acontece que o PHP atribui a constante 45 a $b e a $a. No exemplo acima utilizamos os operadores incremento e decremento. Um incremento uma atribuio do tipo $a++;, que o mesmo que $a=$a+1;. Analogamente um decremento subtrair 1 do valor original da varivel, portanto $a--; o mesmo que $a=$a-1; Existem vrios operadores de comparao, todos eles so utilizados em expresses. Vamos cit-los aqui e v-los no prximo captulo com mais detalhe. Operador de atribuio =, operador de incremento ++, operador de decremento --, operadores de comparao: > (maior que), >= (maior ou igual a), < (menor que), <= (menor ou igual a), == (igual), != (diferente), === (igual a e do mesmo tipo), !== (diferente de ou no do mesmo tipo). Note que existem formas diferentes de escrever a mesma coisa, por exemplo, $a+=1; isso interpretado pelo PHP como o valor de $a incrementado de 1. Um outro operador bem conhecido, mas talvez no to utilizado seja o operador condicional ternrio. A segunda sub-expresso avaliada e tem seu valor retornado se a primeira sub-expresso for verdadeira, se a primeira sub-expresso for falsa a terceira sub-expresso avaliada e seu valor retornado. Daremos um exemplo do seu uso mais adiante.

15 Operadores Um operador algo que d vida a uma expresso lgica, em outras palavras, ele avalia uma expresso de um ou mais valores e retorna um outro valor. Existem os operadores unrios que operam em apenas um valor, os operadores binrios que operam em dois valores e o operador ternrio que opera em trs valores. Como na matemtica, no PHP existe uma precedncia de operadores, isto , quem ser o primeiro a ser avaliado quando vrios operadores esto na mesma expresso. Veja as tabelas abaixo retiradas do manual do PHP: Precedncia dos operadores Associao no associativo esquerda no associativo no associativo no associativo direita esquerda esquerda esquerda no associativo no associativo esquerda esquerda esquerda esquerda esquerda esquerda direita esquerda esquerda esquerda esquerda Operador clone new [ ++ -~ - (int) (float) (string) (array) (object) (bool) @ instanceof ! */% +-. << >> < <= > >= <> == != === !== & ^ | && || ?: = += -= *= /= .= %= &= |= ^= <<= >>= and xor or , Informao adicional clone e new array() incremento/decremento tipos tipos lgico aritmtico aritmtico e string Bit-a-bit comparao comparao Bit-a-bit e referncias Bit-a-bit Bit-a-bit lgico lgico ternrio atribuio lgico lgico lgico muitos usos

16

Operadores Aritmticos Exemplo -$a $a + $b $a - $b $a * $b $a / $b $a % $b Operadores de comparao Exemplo Nome $a == $b Igual $a === $b Idntico $a != $b Diferente $a <> $b Diferente $a !== $b No idntico $a < $b $a > $b Menor que Maior que Menor ou $a <= $b igual Maior ou $a >= $b igual Resultado Verdadeiro (TRUE) se $a igual a $b. Verdadeiro (TRUE) se $a igual a $b, e eles so do mesmo tipo (introduzido no PHP4). Verdadeiro se $a no igual a $b. Verdadeiro se $a no igual a $b. Verdadeiro de $a no igual a $b, ou eles no so do mesmo tipo (introduzido no PHP4). Verdadeiro se $a estritamente menor que $b. Verdadeiro se $a estritamente maior que $b. Verdadeiro se $a menor ou igual a $b. Verdadeiro se $a maior ou igual a $b. Nome Negao Adio Subtrao Multiplicao Diviso Mdulo Resultado Oposto de $a. Soma de $a e $b. Diferena entre $a e $b. Produto de $a e $b. Quociente de $a por $b. Resto de $a dividido por $b.

17 Operadores de Incremento/Decremento Exemplo ++$a $a++ --$a $a-Operadores Lgicos Exemplo $a and $b $a or $b $a xor $b ! $a $a && $b $a || $b Operadores de array Exemplo Nome $a + $b Unio $a == $b Igualdade Resultado Nome E OU XOR NO E OU Resultado Verdadeiro (TRUE) se tanto $a quanto $b so verdadeiros. Verdadeiro se $a ou $b so verdadeiros. Verdadeiro se $a ou $b so verdadeiros, mas no ambos. Verdadeiro se $a no verdadeiro. Verdadeiro se tanto $a quanto $b so verdadeiros. Verdadeiro se $a ou $b so verdadeiros. Nome Pr-incremento Ps-incremento Pr-decremento Ps-decremento Efeito Incrementa $a em um, e ento retorna $a. Retorna $a, e ento incrementa $a em um. Decrementa $a em um, e ento retorna $a. Retorna $a, e ento decrementa $a em um.

Unio de $a e $b. TRUE se $a e $b tem os mesmos pares de chave/valor. TRUE se $a e $b tem os mesmos pares de chave/valor na mesma ordem e $a === $b Identidade do mesmo tipo. $a != $b Desigualdade TRUE se $a no igual a $b. $a <> $b Desigualdade TRUE se $a no igual a $b. $a !== $b No identidade TRUE se $a no idntico a $b.

18 Estruturas de Controle Basicamente as estruturas de controle so divididas em dois tipos: Estruturas condicionais e as estruturas de repetio (loops). As estruturas de controle aglomeram instrues que devero ser executadas dada uma condio ou que sero executadas um nmero finito de vezes. If O if, ou se em portugus, uma estrutura de controle do tipo condicional, isto , um dado bloco de comandos ser executado se certa condio for verificada. Note que j usamos esta estrutura de controle anteriormente. Para ficar mais claro vamos ver um exemplo:

Neste exemplo $valor igual a 10, se $valor igual a 10 ento a prxima instruo para imprimir a string Valor=10. A sintaxe bsica da estrutura condicional if : if(condio){ bloco_de_comandos } If else O if else (se seno) funciona de forma semelhante, apenas tem-se um bloco de comandos de escape caso a condio no seja satisfeita. Seguindo o exemplo anterior:

Neste exemplo impresso a string Valor!=11 pois a expresso $valor==10 retorna o valor lgico false. Lembre-se que ser executado apenas um dos dois blocos de comandos. A sintaxe bsica do if else : if(condio){ bloco_de_comandos_1 }else{ bloco_de_comandos_2 }

19 Encadeando if else if muito freqente o uso de if's encadeados durante a confeco de um programa. Vamos dar um exemplo de como seria o seu uso.

Switch case O Switch case uma outra estrutura condicional, mas diferente de outras linguagens, no PHP o switch case pode ser usado para testar condies sobre strings alm de nmeros inteiros. A instruo switch executa case a case, quando uma instruo case encontrada com um valor igual ao valor dentro do switch, o PHP executa as instrues seguintes. O PHP executa as instrues at o fim do bloco switch ou na primeira vez que encontrar uma instruo break. Se voc no escrever uma instruo break no fim das instrues case, o PHP continuar executando os cases seguintes. Vamos ver alguns exemplos:

20 Exemplo com strings:

No exemplo acima quando o case correto encontrado o programa sai do switch devido ao break aps imprimir a frase correspondente. O case default:

Este case executado quando nenhum outro executado.

21 Estruturas de Repetio (Loops) As estruturas de repetio, ou laos de repetio, so utilizadas quando um bloco de comandos precisa ser executado um determinado nmero de vezes. For O for uma estrutura de repetio que herdou uma sintaxe bem compacta da linguagem C. Sua sintaxe bsica : for(inicializao; condio de parada; incremento/decremento){ bloco_de_comandos } Veja um exemplo comentado do uso do for:

Neste exemplo a varivel $i serviu como um contador de passos. Voc pode omitir a inicializao da varivel, no exemplo acima no faria nenhuma diferena j que o php inicializa a varivel com 0. Se a instruo de incremento fosse omitida teramos o que chamamos de loop infinito, ou seja, ele iria imprimir Programando em PHP indefinidamente, provavelmente at o seu computador travar por falta de memria. Esse seria o exemplo, mas no vale a pena rod-lo, apenas didtico:

Note que como $i++ foi omitido ele verifica a condio (tambm chamada teste de parada) aps executar o bloco de comandos, como o valor de $i no foi alterado, a condio sempre verdadeira e o loop no pra.

22 While Daremos os mesmos exemplos acima, mas substituindo o for pelo while com as devidas modificaes. Quando avanarmos um pouco mais nas peculiaridades da linguagem teremos exemplos mais interessantes para olhar. Sintaxe bsica do while: while(condio){ bloco_de_comandos }

Outra forma de criar um loop infinito testando uma condio que sempre verdadeira. Veja o exemplo abaixo:

Do While No nada mais do que o while que permite que o bloco de comandos seja executado uma vez antes que a condio de parada seja testada. Sintaxe do Do While: do{ bloco_de_comandos }while(condio); Veja este simples exemplo para ilustrar o seu uso:

23 Funes At agora ns usamos somente uma funo, a funo echo usada para imprimir caracteres no document do nosso browser. Uma funo um bloco de comandos que pode ser invocado sempre quando necessrio sem a necessidade de repetir todo o bloco, apenas fazendo referenciando o seu nome. Geralmente quando se chama uma funo, um conjunto de argumentos passado e retornado um valor. A seguir vamos ver como declarar uma funo, como passar argumentos, como retornar valores gerados dentro dela e tambm veremos algumas funes interessantes que usaremos no decorrer deste guia. Construindo Suas Funes Para declarar uma funo comeamos com a palavra function seguida do nome que queremos d-la. Dentro de parntesis, uma lista de argumentos separados por vrgula. Abrimos e fechamos o bloco de comandos da funo respectivamente com { e }. function nome_da_funcao(lista_de_argumentos){ bloco_de_comandos return valor } Veja o exemplo abaixo:

claro que o exemplo acima apenas ilustrativo. No precisamos criar uma funo para somar dois nmeros, podemos usar o operador + de uma vez. O prximo exemplo mais interessante, pois mostra como seria incmodo repetir o bloco de comandos da funo toda vez que precisssemos dela. A partir dele voc pode inferir como til construir funes para resolver problemas maiores.

24

Veremos nos exemplos a seguir que uma funo pode no precisar de uma lista de argumentos e/ou retornar algum valor.

O exemplo anterior poderia ser assim:

25 Algumas funes do PHP Segue uma lista de funes do PHP que utilizaremos algumas vezes. Parte da lista foi retirada da internet e parte retirada do manual do PHP. Voc pode adquirir a prtica de consult-lo sempre que necessitar. Manipulao de Strings 1) Funes relacionadas HTML . htmlspecialchars string htmlspecialchars(string str); Retorna a string fornecida, substituindo os seguintes caracteres: & para '&' " para '"' < para '<' > para >' . htmlentities string htmlentities(string str); Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os caracteres da string que possuem uma representao especial em html, como por exemplo: para '' para '' para '' para ' . nl2br string nl2br(string str); Retorna a string fornecida substituindo todas as quebras de linha ("\n") por quebras de linhas em html ("<br>").

26 Exemplo:

. get_meta_tags array get_meta_tags(string arquivo); Abre um arquivo HTML e percorre o cabealho em busca de "meta" tags, retornando num array todos os valores encontrados. Exemplo: No arquivo teste.html temos: ... <head> <meta name="author" content="jose"> <meta name="tags" content="php3 documentation"> ... </head><!-- busca encerra aqui --> ... A execuo da funo:

. strip_tags string strip_tags(string str); Retorna a string fornecida, retirando todas as tags html e/ou PHP encontradas. Exemplo: . urlencode string urlencode(string str); Retorna a string fornecida, convertida para o formato urlencode. Esta funo til para passar variveis para uma prxima pgina.

27 . urldecode string urldecode(string str); Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para texto normal. 2) Funes relacionadas arrays . implode e join string implode(string separador, array partes); string join(string separador, array partes); As duas funes so idnticas. Retornam uma string contendo todos os elementos do array fornecido separados pela string tambm fornecida. Exemplo:

. split array split(string padrao, string str, int [limite]); Retorna um array contendo partes da string fornecida separadas pelo padro fornecido, podendo limitar o nmero de elementos do array. Exemplo:

. explode array explode(string padrao, string str); Funciona de maneira bastante semelhante funo split, com a diferena que no possvel estabelecer

28 um limite para o nmero de elementos do array. Comparaes entre strings . similar_text int similar_text(string str1, string str2, double [porcentagem]); Compara as duas strings fornecidas e retorna o nmero de caracteres coincidentes. Opcionalmente pode ser fornecida uma varivel passada por referncia (ver tpico sobre funes), que receber o valor percentual de igualdade entre as strings. Esta funo case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes. Exemplo:

. strcasecmp int strcasecmp(string str1, string str2); Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor menor que zero se str1 < str2. Esta funo case insensitive, ou seja, maisculas e minsculas so tratadas como iguais. . strcmp int strcasecmp(string str1, string str2); Funciona de maneira semelhante funo strcasecmp, com a diferena que esta case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes. . strstr string strstr(string str1, string str2); string strchr(string str1, string str2); As duas funes so idnticas. Procura a primeira ocorrncia de str2 em str1. Se no encontrar, retorna uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto. Exemplo:

29

. stristr string stristr(string str1, string str2); Funciona de maneira semelhante funo strstr, com a diferena que esta case insensitive, ou seja, maisculas e minsculas so tratadas como iguais. . strpos int strpos(string str1, string str2, int [offset] ); Retorna a posio da primeira ocorrncia de str2 em str1, ou zero se no houver. O parmetro opcional offset determina a partir de qual caractere de str1 ser efetuada a busca. Mesmo utilizando o offset, o valor de retorno referente ao incio de str1. . strrpos int strrpos(string haystack, char needle); Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se no houver. 3) Funes para edio de strings . chop string chop(string str); Retira espaos e linhas em branco do final da string fornecida. Exemplo:

. ltrim string ltrim(string str); Retira espaos e linhas em branco do final da string fornecida. Exemplo: . trim

30 string trim(string str); Retira espaos e linhas em branco do incio e do final da string fornecida. Exemplo:

. strrev string strrev(string str); Retorna a string fornecida invertida. Exemplo:

. strtolower string strtolower(string str); Retorna a string fornecida com todas as letras minsculas. Exemplo:

. strtoupper string strtoupper(string str); Retorna a string fornecida com todas as letras maisculas.

Exemplo:

31

. ucfirst string ucfirst(string str); Retorna a string fornecida com o primeiro caracter convertido para letra maiscula. Exemplo:

. ucwords string ucwords(string str); Retorna a string fornecida com todas as palavras iniciadas por letras maisculas. Exemplo:

. str_replace string str_replace(string str1, string str2, string str3); Altera todas as ocorrncias de str1 em str3 pela string str2. 4) Funes diversas . chr string chr(int ascii); Retorna o caractere correspondente ao cdigo ASCII fornecido.

. ord

32 int ord(string string); Retorna o cdigo ASCII correspondente ao caractere fornecido. . echo echo(string arg1, string [argn]... ); Imprime os argumentos fornecidos. . print print(string arg); Imprime o argumento fornecido. . strlen int strlen(string str); Retorna o tamanho da string fornecida. Manipulao de Arrays array array array(...); a funo que cria um array a partir dos parmetros fornecidos. possvel fornecer o ndice de cada elemento. Esse ndice pode ser um valor de qualquer tipo, e no apenas de inteiro. Se o ndice no for fornecido o PHP atribui um valor inteiro seqencial, a partir do 0 ou do ltimo ndice inteiro explicitado. Vejamos alguns exemplos: Exemplo 1:

Temos o seguinte mapeamento: 0 => "um" (0 o primeiro ndice, se no houver um explicito) 1 => "dois" (o inteiro seguinte) "tr" => "tres" 5 => "quatro" (valor explicitado) 6 => "cinco" (o inteiro seguinte ao ltimo atribudo, e no o prximo valor, que seria 2)

33

Exemplo 2: Temos o seguinte mapeamento: 0 => "um 6 => "dois tr" => tres 5 => "quatro" (seria 7, se no fosse explicitado) 7 => "cinco" (seria 6, se no estivesse ocupado) Em geral, no recomendvel utilizar arrays com vrios tipos de ndices, j que isso pode confundir o programador. No caso de realmente haver a necessidade de utilizar esse recurso, deve-se ter bastante ateno ao manipular os ndices do array. . range array range(int minimo, int maximo); A funo range cria um array cujos elementos so os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parmetro for maior do que o do segundo, a funo retorna false (valor vazio). . shuffle void shuffle(array &arr); Esta funo "embaralha" o array, ou seja, troca as posies dos elementos aleatoriamente e no retorna valor algum. . sizeof int sizeof(array arr); Retorna um valor inteiro contendo o nmero de elementos de um array. Se for utilizada com uma varivel cujo valor no do tipo array, retorna 1. Se a varivel no estiver setada ou for um array vazio, retorna 0.

1) Funes de "navegao Toda varivel do tipo array possui um ponteiro interno indicando o prximo elemento a ser acessado no

34 caso de no ser especificado um ndice. As funes seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array para verificar seu contedo (chaves e elementos). . reset mixed reset(array arr); Seta o ponteiro interno para o primeiro elemento do array, e retorna o contedo desse elemento. . end mixed end(array arr); Seta o ponteiro interno para o ltimo elemento do array, e retorna o contedo desse elemento. . next mixed next(array arr); Seta o ponteiro interno para o prximo elemento do array, e retorna o contedo desse elemento. Obs.: Esta no uma boa funo para determinar se um elemento o ltimo do array, pois pode retornar false tanto no final do array como no caso de haver um elemento vazio. . prev mixed prev(array arr); Seta o ponteiro interno para o elemento anterior do array, e retorna o contedo desse elemento. Funciona de maneira inversa a next. . pos mixed pos(array arr); Retorna o contedo do elemento atual do array, indicado pelo ponteiro interno. . key mixed key(array arr); Funciona de maneira bastante semelhante a pos, mas ao invs de retornar o elemento atual indicado pelo ponteiro interno do array, retorna seu ndice. . each array each(array arr);

35 Retorna um array contendo o ndice e o elemento atual indicado pelo ponteiro interno do array. O valor de retorno um array de quatro elementos, cujos ndices so 0, 1, "key" e "value". Os elementos de ndices 0 e "key" armazenam o ndice do valor atual, e os elementos de ndices 1 e "value" contm o valor do elemento atual indicado pelo ponteiro. Esta funo pode ser utilizada para percorrer todos os elementos de um array e determinar se j foi encontrado o ltimo elemento, pois no caso de haver um elemento vazio, a funo no retornar o valor false. A funo each s retorna false depois q o ltimo elemento do array foi encontrado. Exemplo:

2) Funes de ordenao So funes que servem para arrumar os elementos de um array de acordo com determinados critrios. Estes critrios so: manuteno ou no da associao entre ndices e elementos; ordenao por elementos ou por ndices; funo de comparao entre dois elementos. . sort void sort(array &arr); A funo mais simples de ordenao de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os ndices. . rsort void rsort(array &arr); Funciona de maneira inversa funo sort. Ordena os elementos de um array em ordem decrescente, sem manter os relacionamentos com os ndices. . asort void asort(array &arr); Tem o funcionamento bastante semelhante funo sort. Ordena os elementos de um array em ordem crescente, porm mantm os relacionamentos com os ndices.

36

. arsort void arsort(array &arr); Funciona de maneira inversa funo asort. Ordena os elementos de um array em ordem decrescente e mantm os relacionamentos dos elementos com os ndices. . ksort void ksort(array &arr); Funo de ordenao baseada nos ndices. Ordena os elementos de um array de acordo com seus ndices, em ordem crescente, mantendo os relacionamentos. . usort void usort(array &arr, function compara); Esta uma funo que utiliza outra funo como parmetro. Ordena os elementos de um array sem manter os relacionamentos com os ndices, e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio. . uasort void uasort(array &arr, function compara); Esta funo tambm utiliza outra funo como parmetro. Ordena os elementos de um array e mantm os relacionamentos com os ndices, utilizando para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio. . uksort void uksort(array &arr, function compara); Esta funo ordena o array atravs dos ndices, mantendo os relacionamentos com os elementos., e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois ndices do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.

37 Funes Matemticas abs() Retorna o valor absoluto de um nmero. acos() Retorna o arco co-seno de um nmero. acosh() Retorna o arco co-seno hiperblico de um nmero. asin() Retorna o arco seno de um nmero. asinh() Retorna o arco seno hiperblico de um nmero. atan() Retorna o arco tangente de um nmero como um valor numrico compreendido entre -PI/2 e PI/2 radianos. atan2() Retorna o ngulo teta de um ponto (x, y) como um valor numrico entre -PI e PI radianos. atanh() Retorna a tangente hiperblica inversa de um nmero. base_convert() Converte um nmero de uma base para outra. bindec() Converte um nmero binrio para um nmero decimal. ceil() Retorna o prximo maior valor inteiro arredondando para cima do valor, se fracionrio. cos() Retorna o co-seno de um nmero. cosh() Retorna o co-seno hiperblico de um nmero.

38 decbin() Converte um nmero decimal para um nmero binrio. dechex() Converte um nmero decimal para um nmero hexadecimal. decoct() Converte um nmero decimal para um nmero octal. deg2rad() Converte grau para radiano. exp() Retorna o valor da exponencial de um nmero. expm1() Retorna o valor da exponencial de um nmero e subtrai uma unidade. floor() Retorna o prximo menor valor inteiro ao se arredondar para baixo do valor, se necessrio. fmod() Retorna o mdulo da diviso dos argumentos. getrandmax() Retorna o valor randmico mximo que pode ser retornado pela funo rand(). hexdec() Converte um nmero hexadecimal em um nmero decimal. hypot() Retorna o comprimento da hipotenusa de um tringulo retngulo. is_finite() Retorna true se um valor um nmero finito. is_infinite() Retorna true se um valor um nmero infinito. is_nan() Retorna true se um valor no um nmero. lcg_value() Retorna um pseudo nmero randmico entre 0 e 1.

39 log() Retorna o logaritmo natural de um nmero (base E). log10() Retorna o logaritmo na base 10 de um nmero. log1p() Retorna o logaritmo de 1 + um nmero. max() Retorna o nmero com o valor mais alto dentre dois especificados. min() Retorna o nmero com o valor mais baixo dentre dois especificados. mt_getrandmax() Retorna o valor mais comprido que pode ser retornado por mt_rand(). mt_rand() Retorna um inteiro randmico usando o algoritmo de Mersenne Twister. octdec() Converte um nmero octal em um nmero decimal. pi() Retorna o valor de PI. pow() Retorna a base elevada ao expoente exp. rad2deg() Converte um nmero em radiano para graus. rand() Retorna um inteiro randomicamente. round() Arredonda um nmero. sin() Retorna o seno de um nmero. sinh() Retorna o seno hiperblico de um nmero. sqrt() Retorna a raiz quadrada de um nmero.

40 tan() Retorna a tangente de um ngulo. tanh() Retorna a tangente hiperblica de um ngulo.

41

PHP Constantes Matemticas


Na ltima coluna est a verso do PHP que suporta a constante especificada. Constante M_E M_EULER M_LNPI M_LN2 M_LN10 M_LOG2E M_LOG10E M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_SQRTPI M_2_SQRTPI M_SQRT1_2 M_SQRT2 M_SQRT3 Descrio Retorna e (aprox. 2.718) Retorna a constante de Euler (aprox. 0.577) Retorna o logaritmo natural de PI (aprox. 1.144) Retorna o logaritmo natural de 2 (aprox. 0.693) Retorna o logaritmo natural de 10 (aprox. 2.302) Retorna o logaritmo de E na base 2 (aprox. 1.442) Retorna o logaritmo de E na base 10(aprox. 0.434) Retorna PI (aprox. 3.14159) Retorna PI/2 (aprox. 1.570) Retorna PI/4 (aprox. 0.785) Retorna 1/PI (aprox. 0.318) Retorna 2/PI (aprox. 0.636) Retorna a raiz quadrada de PI (aprox. 1.772) Retorna 2/raiz quadrada de PI (aprox. 1.128) Retorna raiz quadrada de 1/2 (aprox. 0.707) Retorna a raiz quadrada de 2 (aprox. 1.414) Retorna a raiz quadrada de 3 (aprox. 1.732) PHP 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4

42 Exerccios Propostos 1. Dado um vetor qualquer com 8 nmeros reais, faa um algoritmo que informa se h ou no nmeros repetidos nesse vetor. 2. Crie um mdulo que imprime na tela os elementos de um vetor de 5 nmeros inteiros na ordem inversa. 3. Calcular a quantidade de dinheiro gasta por um fumante. Dados: o nmero de anos que ele fuma; o nmero de cigarros fumados por dia e o preo de uma carteira. 4. Ler dois nmeros inteiros, x e y, e imprimir o quociente e o resto da diviso inteira entre eles. 5. Dados dois nmeros inteiros (A e B), verificar e imprimir qual deles o maior, ou a mensagem A=B caso sejam iguais. 6. Dados trs valores, dizer se eles formam um tringulo. Caso afirmativo, dizer seu tipo (eqiltero, issceles ou escaleno). 7. Ler um nmero e verificar se ele par ou mpar. 8. Imprimir a srie de Fibonacci. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,... 9. Calcular a soma dos primeiros termos da srie: 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10 + 10. Faa um algoritmo para indicar o maior entre 3 nmeros. 11. Faa um algoritmo para escrever por extenso qualquer nmero de 1 algarismo digitado pelo usurio. 12. Elabore um algoritmo para informar qual a idade do usurio (quantos anos tem, apenas), sendo informado a data atual e sua data de nascimento. 13. Faa um algoritmo para calcular o fatorial de qualquer nmero inteiro. 14. Faa um algoritmo para ordenar um vetor de nmeros inteiros. 15. Construa um algoritmo que calcule o valor de um nmero n elevado a qualquer nmero x. 16. Calcule o dgito verificador de uma conta corrente segundo os seguintes critrios: Some cada algarismo da conta Se o resultado dessa soma for composto de apenas um algarismo, esse o dgito verificador Se no resultado dessa soma houver mais de um algarismo, some-os at encontrar apenas um

43 algarismo que ser, ento, o dgito verificador. O algoritmo deve mostrar na tela a conta corrente completa, com o dgito verificador.

Por exemplo: Conta Corrente: 46793 Soma dos algarismos: 4+6+7+9+3= 29 Como 29 possui dois algarismos, deve-se somar novamente: 2+9 = 11 Como 11 tambm possui dois algarismos, deve-se somar novamente: 1+1 = 2 Como 2 possui apenas um algarismo, esse o dgito verificador procurado. A resposta na tela deveria ser: 46793-2 17. Faa um algoritmo para calcular todos os nmeros primos entre 2 e 1000. 18. Uma empresa decidiu fazer um levantamento sobre o perfil dos candidatos que se apresentarem para o preenchimento de vagas de seu quadro de funcionrios. Para cada candidato, ser solicitado o sexo, a idade e se tem ou no experincia no servio. Esses dados sero guardados em vetores. Escrever um algoritmo para ler os dados dos candidatos e, a seguir, calcular e imprimir as seguintes informaes: a) O nmero de candidatos do sexo feminino e masculino b) A idade mdia das mulheres que j tm experincia no servio c) A menor idade entre as mulheres que j tm experincia no servio d) A porcentagem dos homens com mais de 45 anos, com relao ao total de homens. e) O nmero de homens com idade inferior a 30 anos sem experincia no servio. 19. Escreva funes de soma, subtrao, multiplicao e diviso, passados dois valores por parmetro e implemente-as. 20. Escreva uma nica funo que faa as quatro operaes matemticas elementares.

44 Formulrios e Interao com HTML Comearemos agora a interagir com o HTML, HyperText Marker Language, ou ainda, Linguagem de Marcao de Hipertexto. Nosso primeiro passo nesta segunda etapa do guia receber valores passados atravs de formulrios HTML, trabalharmos com eles e exibir o resultado no document. Por fim, teremos scripts muito mais flexveis no sentido de interao com o usurio. Nos exemplos e exerccios acima no vimos nenhuma interao entre o usurio e o script. Veja a resoluo do exerccio 5 com os dados passados pelo usurio atravs do teclado: Arquivo html (num.html):

No arquivo acima temos um formulrio com dois campos de texto onde sero digitados os valores e um boto submit para enviar os dados. Veja que na linha form temos um action com o nome do arquivo que receber os dados digitados (no nosso caso maior.php) e qual ser o method (no nosso caso POST). necessrio que todos os campos que tero seus valores utilizados no script PHP tenham o parmetro name. O mtodo indica como os dados sero passados. No nosso caso, POST significa que os dados sero passados sem serem exibidos na URL e possibilita o envio de longas informaes, ao contrrio do mtodo GET.

45 Arquivo php (maior.php):

No exemplo acima poderamos ter usado simplesmente $valor1 e $valor2 ao invs de $_POST, que o PHP entenderia que seriam os campos de formulrio com mesmo nome. Mas desde que a diretiva register_globals no seu php.ini esteja ativada, caso contrrio, $valor1=$valor2=0. Tambm existe uma outra soluo com o uso de import_request_variables que veremos mais adiante. Ainda existem alguns problemas que precisamos tratar. No sabemos se o usurio digitou dois nmeros de fato, ele pode ter digito um texto ou at mesmo no ter digitado nada. Precisamos validar os nossos dados. Veja como ficaria com as alteraes de validao:

A funo isset serve para verificar se uma varivel foi definida ou no. A funo is_nan verifica se o parmetro passado de fato um nmero. Pronto, nosso exerccio est resolvido.

46 Um pouco sobre Sesses Basicamente, as sesses so mtodos que preservam determinados dados ativos enquanto o navegador do cliente estiver aberto, ou enquanto a sesso no expirar. Quando acessa um web site, um usurio recebe um identificador chamado id de sesso. Este salvo em um cookie do lado do cliente ou propagado via URL. Voc pode armazenar vrias informaes em uma sesso. No site oficial do manual do PHP voc encontrar diversas funes para manipular as sesses: http://www.php.net/manual/pt_BR/ref.session.php Voc j deve ter tido contado com sesses ao comprar em uma loja virtual e ter adicionado seus produtos ao carrinho de compras, ao fazer login de usurio em algum site, frum e etc. Em nossa aplicao desenvolveremos uma rea de login para ilustrar o uso de sesses. Veja este exemplo do uso de sesso:

No exemplo acima utilizamos a funo ob_start() que inicializa o buffer e impede qualquer sada para o navegador at que voc o encerre. Em seguida, abrimos a sesso com a funo session_start() e gravamos um nome e uma string com uma idade no array de sesso $_SESSION. Tambm gravamos na sesso o user agent, isto , a identificao do navegador.

47 MySQL O MySQL um Sistema de Gerenciamento de Banco de Dados (SGBD) da linguagem SQL Structured Query Language, que significa linguagem de consulta estruturada. Existem outros SGBD populares, mais o MySQL se destaca pela facilidade de integrao aos scripts PHP. Dentre suas caractersticas podemos destacar: Portabilidade (suporta praticamente qualquer plataforma atual);

Compatibilidade com diversas linguagens de programao. Excelente desempenho e estabilidade. No exige muito recurso de hardware. Fcil de usar. um software livre com base na GPL. Suporta Triggers. Interfaces grficas ([MySQL Toolkit]) de fcil utilizao cedidos pela MySQL Inc.

Voc pode adquirir mais informaes sobre verses, documentao e downloads no site oficial do MySQL: http://www.mysql.com Criando Banco de Dados e Tabelas com PHPMyAdmin Basicamente, um banco composto por tabelas que so formadas por campos. Cada tabela precisa ter um campo chave primria que faz referncia a sua tabela em outras tabelas. Agora utilizaremos o famoso PHPMyAdmin para criar nossos Banco de Dados e Tabelas. Se voc utiliza o VertrigoServ pode acess-lo iniciando o programa, em seguida clicando sobre o cone na barra de tarefas. Um menu vai aparece em cima da barra, agora v at Tools (ou ferramentas) e clique em PHPMyAdmin. Caso esteja utilizando o Xampp, inicie o programa e em seguida abra o seu navegador. Digite http://localhost, voc ver a pgina principal do Xampp, no menu esquerdo procure por Tools (ou ferramentas) e pelo PHPMyAdmin. Pronto. Na pgina principal do PHPMyAdmin encontramos do lado esquerdo um menu superior com os botes: Home (para voltar a pgina principal do PHPMyAdmin), SQL - Query Window (para escrever um script SQL ou import-lo de algum arquivo texto), PHPMyAdmin Documentation (para visualizar a

48 documentao do seu PHPMyAdmin) e Documentation (para acessar a documentao do SQL). Logo embaixo voc pode visualizar todos os bancos de dados criados. Clicando sobre eles pode visualizar as tabelas de cada banco e clicando sobre elas pode visualizar os seus campos, com mais um clique sobre Browser, poder visualizar os dados armazenados nela. Agora vamos criar nosso primeiro banco de dados com PHPMyAdmin. Acesse-o pelo seu navegador e em seguida, no lado direito voc ver escrito create new database e um campo text. Se o seu PHPMyAdmin estiver configurado em portugus provavelmente estar criar novo banco de dados. Neste campo text digitaremos o nome do banco que queremos criar, no nosso caso, digite infpessoais sem as aspas. Agora clique no boto create. Pronto, nosso banco de dados infpessoais est criado. Note que aparecer no seu navegador uma coluna esquerda com o nome do seu banco e um zero entre parntesis indicando que ele no possue nenhuma tabela. Do lado direito do document do navegador voc ver alm do menu superior do PHPMyAdmin, a mensagem No tables found in database e logo abaixo Create new table on database infpessoais, isto , crie uma nova tabela no banco de dados infpessoais. Ento no campo text indicado como name digite informacoes que o nome da nossa tabela. Em Number of fields digite 3, isso significa que nossa tabela ter 3 campos. Agora clique em go. Agora temos a tela de insero dos 3 campos da nossa tabela informacoes. Na mesma coluna escreva no primeiro text id_contato, tipo INT, escolha o extra auto_increment e o radio button Primary. Com isso voc est dizendo que o campo id_contato uma chave primria, ou seja, o ndice da tabela que pode fazer referncia dela em outras tabelas do mesmo banco. Nesse primeiro exemplo s temos uma tabela. O argumento auto_increment diz que ao adicionar um registro na tabela esse campo automaticamente incrementado de 1. Nas duas ltimas colunas insira respectivamente nos campos text nome e telefone e escolha o tipo dos campos como TEXT. Agora clique em go e nossa tabela informacoes est pronta. Clicando em informacoes no lado esquerdo podemos ver todos os campos da nossa tabela. Veja que clicando em Insert no menu superior do PHPMyAdmin possvel inserir dados nos campos da nossa tabela. Mas isso no tem muita graa aqui, pois queremos fazer isso atravs do PHP.

49 Alternativamente, podemos criar um banco de dados, criar tabelas neste banco e inserir seus campos atravs do cdigo SQL correspondente. Perderamos a interface intuitiva do PHPMyAdmin, mas ganharamos na praticidade. Veja como ficaria o cdigo para criar o banco infpessoais e a tabela informacoes com seus campos:

O atributo NOT NULL significa que o campo no pode ser nulo. Isso especificado pelo programador. Inserir, deletar e selecionar com MySQL Agora que temos nosso banco infpessoais criado, podemos inserir, deletar e selecionar dados nele. Afinal, para isso que ele serve. Nesta parte da apostila veremos como fazer isso em cdigo SQL e posteriormente, como fazer atravs do PHP. Inserir Suponha que voc queira adicionar um contato na sua tabela informacoes. Veja o exemplo abaixo de como fazer:

O cdigo acima significa: Insira no banco 'infpessoais', na tabela 'informacoes' que possui os campos 'id_contato', 'nome' e 'telefone', os valores '1', 'Daniel Moreira dos Santos', '9999-0000' respectivamente.

50 Deletar

Percebemos que o cdigo bem sugestivo. Delete de 'informacoes', onde 'id_contato' = 1. Lembre que id_contato nossa chave primria. Selecionar Atravs do cdigo SQL podemos selecionar um registro ou grupo de registros que satisfazem uma condio estabelecida. Como exemplo, suponha que temos os seguintes registros na tabela informacoes: 1 2 3 Daniel Moreira dos Santos Jos Carlos de Oliveira Jr. Jairo Ludtke Jr. 9999-0000 0000-9999 8888-0000

E queremos selecionar para um fim, (mostrar em uma tabela, por exemplo), os registros que possuem 8 no nmero de telefone. Nosso cdigo ficaria assim:

O asterisco (*) no cdigo acima faz referncia a todos os campos da tabela informacoes. Ento temos, Selecione todos os campos da tabela informacoes onde telefone parece com 8888-8888 e ordene por id_contato. Atualizar Suponha que queremos atualizar o telefone de um dos contatos registrados. Para isso, usamos o comando UPDATE. Veja o exemplo:

Note que s ser atualizado o telefone do registro com id_contato igual a 2, que por sua vez nico. Destruir

O comando DROP exclui definitivamente a nossa tabela com todos os seus registros. bom tomar certo cuidado com este comando.

51 Funes do MySQL Assim como o PHP, o MySQL possui algumas funes muito teis para manipulao dos registros de um banco de dados. Aqui registrei algumas: avg(coluna) Retorna a mdia dos valores da coluna. count(item) Se item for uma coluna, ser retornado o nmero de valores no nulos(NULL) nesta coluna. Se a palavra-chave DISTINCT for colocada na frente do nome da coluna, ser retornado o nmero de valores distintos nesta coluna. Se for passado count(*), ser retornado o nmero total de registros independente de quantos tenham valor NULL. min(coluna) Retorna o valor mnimo da coluna. max(coluna) Retorna o valor mximo da coluna. sdt(coluna) Retorna o desvio padro dos valores da coluna. sdtdev(coluna) O mesmo que SDT(coluna). sum(coluna) Retorna a soma dos valores da coluna.

52 PHP interagindo com o Banco de Dados MySQL Chegou a hora de interagir com o banco de dados e preparar o terreno para a construo da nossa aplicao PHP/MySQL. Refaa a sua tabela 'informacoes' no banco de dados infpessoais. Iremos utilizar o PHP para inserir e manipular alguns registros. mysql_affected_rows() Retorna o nmero de linhas atingidas na operao anterior do MySQL. Obtm o nmero de linhas atingidas pela consulta INSERT, UPDATE, REPLACE ou DELETE mais recente associada ao link_identifier. mysql_close() Fecha a conexo MySQL no persistente ao servidor MySQL que esta associado ao identificador de conexo dado. Se link_identifier no for especificado, a ultima conexo aberta usada. Retorna true em caso de xito e false caso contrrio. mysql_connect() Abre uma conexo com um servidor MySQL. Os parmetros so: Server, usurio e senha do banco de dados. mysql_fetch_array() Obtm uma linha como uma matriz associativa, uma matriz numrica, ou ambas. Retorna uma matriz que corresponde a linha obtida e move o ponteiro interno dos dados adiante. mysql_fetch_row() Retorna o resultado de uma linha numa matriz numrica. Retorna uma matriz numrica que corresponde linha, ou false se no houver mais linhas. mysql_field_len() Retorna o tamanho do campo especificado. mysql_field_name() Retorna o nome do campo especificado no resultado de uma query. mysql_field_table() Retorna o nome da tabela onde esta o campo especificado. mysql_field_type() Retorna o tipo do campo especificado em um resultado de query. mysql_get_client_info() Retorna informao da verso do cliente MySQL, uma string que representa a verso da biblioteca do cliente.

53 mysql_get_server_info() Retorna informao do servidor MySQL. mysql_num_rows() Retorna o nmero de linhas em um resultado. Este comando valido apenas para obter o nmero de linhas afetadas por um SELECT. mysql_query() Realiza uma query MySQL. Envia uma query para o banco de dados ativo no servidor da conexo informada atravs do identificador. Se o parmetro identificador no especificado, a ultima conexo aberta usada. Se nenhuma conexo esta aberta, a funo tenta estabelecer uma conexo como mysql_connect() seja chamada sem argumentos e usa-a. O resultado guardado em buffer. Uma observao que a string da query no deve terminar com ponto e vrgula (;). mysql_select_db() Seleciona um banco de dados MySQL. Veremos como isso feito mais adiante.

54 Construindo uma Aplicao PHP+MySQL Agora chegamos parte mais esperada, onde aplicaremos tudo que aprendemos nas pginas anteriores. Vamos construir como exemplo de aplicao, uma agenda de contatos com: login, cadastro, excluso e edio de contatos. Iremos utilizar o banco de dados infpessoais criado anteriormente e a tabela informacoes para armazenar os dados dos nossos contatos. Em primeiro lugar vamos construir a tela de login de usurios. Como voc j est familiarizado com HTML no ter dificuldades e poder fazer como quiser, modificando e melhorando este simples exemplo.

Observe que os nomes dos campos so login e senha e no User e Pass. Ento, nossa tela inicial ficou assim:

55 Agora, precisamos verificar se o usurio e a senha foram digitados corretamente. Essa verificao ns faremos no arquivo apontado pelo action que est no cabealho do nosso formulrio, que neste caso o arquivo logar.php. Veja:

Note que nosso exemplo de login ainda muito simples, sem interao com banco de dados e possui apenas um usurio e senha. Abrimos e gravamos em seo as variveis $login (que no nosso caso a string danielms) e $data_login que a data em que foi acessada a agenda de contatos. Logando com sucesso, veremos a tela principal da nossa aplicao. Esta bem simples e possui um visual feito com HTML bem bsico.

56 Este o arquivo agenda.php:

A tela principal est dividida na parte superior com as boas-vindas e os links Inserir e SAIR e na parte inferior onde os contatos so listados e podem ser editados ou excludos. Abaixo segue o arquivo listar.php:

57 O prximo passo a insero de contatos no sistema. Segue os arquivos form_inserir.php e inserir.php respectivamente. Quando clicamos em Inserir no menu superior da agenda, o arquivo form_inserir.php chamado no frame principal, onde encontramos um formulrio a ser preenchido.

58 Agora vamos edio de contatos cadastrados no sistema. Segue os arquivos form_editar.php e editar.php respectivamente. Quando clicamos em ++ ao lado do contato listado na agenda, o arquivo form_editar.php chamado no frame principal, onde encontramos um formulrio preenchido com os dados do contato e estes podem ser alterados.

59 Quando clicamos em XX ao lado do contato listado na agenda, o arquivo excluir.php chamado no frame principal e o registro ento eliminado da tabela informacoes. Veja o arquivo excluir.php:

Ao clicarmos no link SAIR a sesso encerrada e voltamos a tela inicial de login da aplicao. Isso acontece porque o link chama o arquivo deslogar.php abaixo:

60 Exerccios Propostos Faa uma agenda de contatos com login e interao ao banco de dados, cadastro, excluso e edio de contatos, envio de e-mail com formatao de texto e imagem, aviso de compromissos, upload de foto no cadastro do contato, cadastro mltiplo de contatos atravs de leitura de arquivo texto. Este exerccio ser resolvido na prxima verso do guia. Um abrao a todos.

61 Referncias Bibliogrficas MANUAL do PHP. http://php.net/manual/pt_BR/index.php PHP 5 AND MYSQL BIBLE. Tim Converse and Joyce Park with Clark Morgan. Wiley Publishing, Inc. Beginning PHP 5, Apache, MySQL Web Development. Elizabeth Naramore, Jason Gerner, Yann Le Scouarnec, Jeremy Stolz, Michael K. Glass. Wrox. Cdigos na Web. http://www.codigosnaweb.com HTML Staff. http://www.htmlstaff.org

Você também pode gostar