Vous êtes sur la page 1sur 32

109 PHP E SCOLA PHP 110 Escola Alcides Maya - Terceira Mdulo 111 PHP 1. INTRODUO 1.1.

O QUE PHP? PHP significa: Hypertext Preprocessor. Realmente, o produto foi originalmente ch amado de Personal Home Page Tools ; mas como se expandiu em escopo, um nome novo e mais apropriado foi escolhido por votao da comunidade. Voc pode utilizar qualquer extenso que desejar para designar um arquivo PHP, mas os recome ndados foram .php , .phtml. O PHP est atualmente na verso 5, chamado de PHP5 ou, simplesmente de PHP. PHP uma linguagem de criao de scripts embutida em HTML no servidor. Os produtos pa tenteados nesse nicho do mercado so as Active Server Pages da Microsoft, o Coldfusion da Allaire e as Java Server Pages da Sun. Exploraremos a criao de script no servidor, mais profundamente, nos prximos captulos , mas, no momento, voc pode pensar no PHP como uma coleo de supertags de HTML que permitem adicionar funes do se rvidor s suas pginas da Web. Por exemplo, voc pode utilizar PHP para montar instantaneamente uma complexa pgina da Web ou desencadear um programa que automaticamente execute o dbito no carto de crdito quando um cliente r ealizar uma compra. Falando estritamente, o PHP tem pouca relao com layout, eventos ou qualquer coisa relacionada aparncia de uma pgina da Web. De fato, a maior parte do que o PHP realiza invisvel para o usurio fi nal. Algum visualizando uma pgina de PHP no ser capaz de dizer que no foi escrita em HTML, porque o resultado final d o PHP HTML. O PHP um mdulo oficial do servidor HTTP Apache, o lder do mercado de servidores We b livres que constitui aproximadamente 55% dos sites da Internet. Isso significa que o mecanismo de scr ipt do PHP pode ser construdo no prprio servidor Web, tornando a manipulao de dados mais rpida. Assim como o servidor Apach e, o PHP compatvel com vrias plataformas, o que significa que ele executa em seu formato original em vrias ver ses do UNIX e do Windows. Todos os projetos sob a gide da Apache Software Foundation incluindo o PHP so software de cd igo-fonte aberto. Histria do PHPRasmus Lerdorf engenheiro de software, membro da equipe Apache e o homem misterioso do ano o criador e a fora motriz original por trs do PHP. A primeira parte do PHP foi des envolvida para utilizao pessoal no final de 1994. Tratava-se de um wrapper de PerlCGI que o auxiliava a monitorar as pess oas que acessavam o seu site pessoal. No ano seguinte, ele montou um pacote chamado de Personal Home Page Tools (tambm con hecido como PHP Construction Kit) em resposta demanda de usurios que por acaso ou por relatos falados depararam-se com o seu trabalho. A verso 2 foi logo lanada sob o ttulo de PHP/FI e inclua o Form Interpreter, uma ferramenta para anali sar sintaticamente consultas de SQL. Em meados de 1997, o PHP estava sendo utilizado mundialmente em aproximadamente 50.000 sites. Obviamente estava se tornando muito grande para uma nica pessoa administrar, mesmo para algum concen

trado e cheio de energia como Rasmus. Agora uma pequena equipe central de desenvolvimento mantinha o projeto s obre o modelo de junta benevolente do cdigo-fonte aberto, com contribuies de desenvolvedores e usurios em todo o mundo. Zeev Suraski e Andi Gutmans, dois programadores israelenses que desenvolveram os analisadores de sintaxe PHP3 e PHP4, tambm generalizaram e estenderam seus trabalhos sob a rubrica de Zend.com (Zeev, Andi, Zend, entendeu? ).O quarto trimestre de 1998 iniciou um perodo de crescimento explosivo para o PHP, quando todas as tecnologias de cdigo-f onte aberto ganharam uma publicidade intensa. Em outubro de 1998, de acordo com a melhor suposio, mais de 100.000 domnio s nicos utilizavam PHP de alguma maneira. Um ano depois, o PHP quebrou a marca de um milho de domnios. Enqua nto escrevo esta apostila, o nmero explodiu para cerca de dois milhes de domnios. 1.2. O que pode ser feito com php? Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser f eita tambm com PHP, como coletar dados de um formulrio, gerar pginas dinamicamente ou enviar e receber cookies. PHP tambm tem como uma das caractersticas mais importantes o suporte a um grande nm ero de bancos de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Co nstruir uma pgina baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP. Alm disso, PHP tem suporte a outros servios atravs de protocolos como IMAP, SNMP, N NTP, POP3 e, logicamente, HTTP. Ainda possvel abrir sockets e interagir com outros protocolos. 112 Escola Alcides Maya - Terceira Mdulo 2. SINTAXE BSICA DO PHP 2.1. Introduo O PHP empresta um pouco de sua sintaxe de outras linguagens como o C, shell, Per l e at mesmo Java. realmente um linguagem hbrida, pegando as melhores caractersticas de outras liguagens, criando uma linguagem de script fil de usar. Ao trmino deste captulo, voc ter aprendido: A estrutura bsica do PHP Como o PHP pode ser embutido no HTML Como escrever comentrios Trabalhar com variveis e tipos bsicos de dados Definir constantes para valores simples As estruturas de controle mais comuns, a maioria das quais esto disponveis em outr as linguagens de programao Funes pr definidas ou definidas pelo usurio. 2.2 misturando php e html A primeira coisa que se deve saber como utilizar o PHP dentro do HTML. <HTML> <HEAD>Sample PHP Script</HEAD> <BODY> The following prints Hello, World : <?php print Ol, Mundo ; ?> </BODY> </HTML> Neste exemplo, v-se que o cdigo PHP se encaixa no seu HTML. Toda a vez que o Inter pretador PHP encontra uma tag de abertura PHP <?php, ele executa o cdigo dentro da tag at o delimitador ?>. O PHP ento substitui o cdigo com a

sua sada (se houver alguma) enquanto quaisquer textos no-PHP (como o HTML) passado do jeito que est para o cliente web. Assim sendo, o script do exemplo levaria a sequinte sada: <HTML> <HEAD>Sample PHP Script</HEAD> <BODY> A seguir, escreve Ol, Mundo : Ol, Mundo </BODY> </HTML> Dica: Pode-se utilizar a abreviao <? como tag de abertura para um cdigo PHP se a opo short_open_tags do arquivo php.ini for habilitada; entretanto, esse tipo de abreviao no recomendada e est desab ilitada por padro, apesar de que na maioria dos servios de hospedagem esta opo est habilitada. 2.2. Comentrios O prximo tpico a ser abordado como escrever comentrios, pois a maioria dos exemplos deste captulo possui comentrios. Pode-se escrever comentrios de 3 maneiras diferentes: Padro C /* Este um comentrio no padro C 113 PHP * que pode ser separado em multiplas * linhas at chegar a tag de fechamento */ Padro C++ // Este um comentrio no padro C++ que termina ao fim da linha Padro shell # Este um comentrio no padro shell que termina ao fim da linha 2.3. Variveis Variveis no PHP so bem diferentes daquelas em linguagens compiladas como C e Java. A razo disto a natureza fraca de tipagem do PHP, que em resumo significa que no existe a necessidade de d eclarar variveis antes de us-las, no necessrio declarar seu tipo e, como resultado, uma varivel pode mudar o tipo de se u valor tanto quanto necessrio. Variveis no PHP so precedidas com sinal de $, e de modo similar a maioria das ling uagens modernas, elas podem iniciar com uma letra (A-Za-z) ou _ (underline) e podem conter tantos caracteres alfanumr icos quantos forem necessrios. Exemplos de nomes vlidos de variveis: $count $_Obj $A123 Exemplos de nomes invlidos de variveis incluem: $123 $*ABC Como mencionado anteriormente, no existe a necessidade de declarar variveis ou seu s tipos antes de utiliz-las em PHP. O cdigo abaixo exemplifica o uso de variveis: $PI = 3.14; $raio = 5; $circunferencia = $PI * 2 * $raio; Pode-se ver que nenhuma das variveis foi declarada antes de serem usadas. Alm diss o, o fato de que $PI um nmero decimal, e $raio (um inteiro) no so declarados antes de serem inicializadas. PHP no oferece suporte como muitas outras linguagens de programao (exceto para algu mas variveis especiais prdefinidas, que sero discutidas posteriormente). Variveis so locais a seu escopo, e se forem cr

iadas em uma funo, elas estaro disponveis apenas durante o tempo de vida da funo. Variveis que so criadas no cript principal (no esto em uma funo) no so variveis globais; no podem ser vistas dentro de funes, mas voc pod las utilizando o array especial $GLOBALS[], utilizando o nome da varivel como ndice do vetor. O exemplo a nterior poderia ser reescrito da seguinte forma: $PI = 3.14; $raio = 5; $circunferencia = $GLOBALS[ PI ] * 2 * $GLOBALS[ raio ]; Pode-se perceber que mesmo estando este cdigo dentro do escopo principal (no utili zou-se nenhuma funo), ainda pode-se fazer uso de $GLOBALS[], apesar de que neste caso no trazer vantagem algu ma. 2.3.1. REFERNCIAS INDIRETAS A VARIVEIS Uma caracterstica extremamente til do PHP que voc pode acessar variveis utilizando r eferncias indiretas, ou para ser mais claro, voc pode criar e acessar variveis em tempo de execuo. Considere o seguinte exemplo: $nome = Rafael ; $$nome = Usurio registrado ; print $Rafael; Este cdigo resulta na escrita de Usurio Registrado . A linha em negrito utiliza um $ adicional para acessar a varivel com o nome espec ificado pelo valor de $name ( Rafael ) e muda o seu valor para Usurio registrado . Assim sendo, uma varivel chamada $Rafael criada. 114 Escola Alcides Maya - Terceira Mdulo Pode-se utilizar quantos nveis de aes indiretas forem desejados apenas colocando um smbolo $ adicional na frente de u ma varivel. 2.3.2. Gerenciando variveis Trs construtores de linguagem so utilizados para gerenciar variveis. Eles permite c hecar se determinada varivel existe, remover variveis, e verificar os valores reais de variveis. 2.3.2.1. Isset() Isset() determina se uma certa varivel j foi declarada pelo PHP. Retorna um valor booleano true caso a varivel j tenha sido setada, e false em caso contrrio ou se o valor da varivel NULL. Considere o seguinte script: If (isset($primeiro_nome)) { print $primeiro_nome est setada ; } Este cdigo verifica se a varivel $primeiro_nome est definida. Se $primeiro_nome est definida, isset() retorna true, oq vai acarretar em mostrar $primeiro_nome est setada . Caso contrrio, nenhuma sada g rada. l Checking an array element: if (isset($arr[ offset ])) { ... } l Checking an object property: if (isset($obj->property)) { ... } Nota-se que nos dois exemplos acima, $arr ou $obj no foram testados para sua exis tncia (antes de verificar offset ou propriedade, respectivamente). A funo isset() retorna false automaticamente se ele

s no estiverem setados. isset() a nica dos 3 construtores de linguagem que aceita uma quantidade arbitrria de parmetros. O seu prottipo mais exato est descrito abaixo: isset($var1, $var2, $var3, ...); Somente retorna true se todas as variveis foram definidas; de outro modo, retorna false. Isto til quando deseja-se verificar se as variveis de entrada de um script foram realmente enviadas para o cliente, economizando assim uma srie de verificaes isset() separadas. 2.3.2.2 unset() unset() desdeclara uma varivel previamente setada, e libera quaisquer memria que foi utilizada por, desde que nenhuma outra varivel referencie o seu valor. Uma chamada para isset() em uma var ivel em que se utilizou unset() retorna false. Por exemplo: $name = John Doe ; unset($name); if (isset($name)) { print $name is set ; } Este exemplo no gera nenhuma sada, pois isset() retorna false. unset() tambm pode s er utilizada em arrays e propriedades de objetos de modo similar a isset(). 2.3.2.3 empty() empty() pode ser utilizado para verificar se uma varivel no foi declarada ou o seu valor false. Este construtor de linguagem utilizado normalmente para verificar se uma varivel de formulrio no foi e nviada ou no contm dados. Ao verificar pelo valor verdadeiro da varivel, o valor da mesma primeiramente conver tido para um Boolean de acordo com as regras na seguinte seco de cdigo, e ento verificado por true/false. Por Exemplo: if (empty($name)) { 115 PHP print Error: Forgot to specify a value for $name ; } Este cdigo imprime uma mensagem de erro se $name no contm um valor que possa retorn ar true. 2.3.3 superglobals Como regra geral, o PHP no suporta variveis globais (variveis que podem ser acessad as em qualquer escopo). Porm, certas variveis internas especiais comportam-se como variveis globais similares em outras linguagens. Essas variveis so chamadas superglobais e so predefinidas pelo PHP para o programador poder utiliza r. Alguns exemplos dessas superglobais so: l $_GET[] - Um array que inclui todas as variveis GET que o PHP recebe do navegad or do cliente, sendo essas vindas de formulrios ou links. l $_POST[] - Um array que inclui todas as variveis POST que o PHP recebe do naveg ador do cliente. l $_COOKIE[] - Um array que inclui todos os COOKIES que o PHP recebe do navegado r do cliente. l $_SESSION[] - Um array que contm todas as variveis de sesso, definidas pelo progr ama. l $_REQUEST[] - Um array que contm todas as variveis dos mtodos anteriores, sem faz er distino da origem.

l $_ENV[] - Um array com as variveis de ambiente. l $_SERVER[] - Um array com os valores das variveis do servidor WEB. importante lembrar que voc pode acessar essas variveis em qualquer lugar do script em qualquer funo, mtodo ou escopo global. No necessrio usar o array $_GLOBALS[], que permite o acesso a varive is globais sem a necessidade de pr-declarao ou usando a palavra-chave ultrapassada globals. 2.4 tipos bsicos de dados Existem oito tipos diferentes de dados em PHP, cinco dos quais so escalares e cad a um dos trs tipos diferentes tem suas prprias caractersticas. As variveis previamente discutidas podem conter valores de cada um desses tipos de dados sem declarar explicitamente o tipo. As variveis comportam-se de acordo com o tipo de dado que contm. 2.4.1 integer Integers so nmeros inteiros equivalentes em amplitude ao tipo long em C. Na maiori a dos computadores comuns isto significa um nmero signed de 32bits com uma amplitude entre -2.147.483.648 at +2.1 47.483.647. Inteiros podem ser escritos nas notaes decimal, hexadecimal (prefixo 0x), e notao oc tal (prefixo 0), e podem incluir sinais de + ou -. Alguns exemplos de inteiros incluem: 240000 0xABCD 007 -100 2.4.2 nmeros floating-point. Nmeros floating-point (tambm conhecidos como nmeros reais) representam nmeros reais e so equivalentes ao tipo de dado double em C. Na maioria das plataformas, o tamanho do tipo de dado 8 byt es e sua amplitude aproximadamente 2.2E-308 at 1.8E-308. Nmeros de ponto flutuante incluem um ponto decimal e podem i ncluir um sinal +/- e um sinal de exponenciao. Exemplos de nmeros de ponto flutuante incluem: 3.14 +0.9e-2 -170000.5 54.6E42 2.4.3 strings Strings em PHP so uma cadeia de caracteres que so terminadas internamente em null. Entretanto, diferentemente de outras liguagens, como o C, o PHP no se baseia no null final para calcular o t amanho de uma string, mas memoriza o p tamanho internamente. Isto permite uma manipulao mais fcil de dados binrios em PHP or exemplo, criar uma imagem on-the-fly e mostr-la no navegador. O tamanho mximo de strings varia de acordo com a plataforma e compilador C, mas 116 Escola Alcides Maya - Terceira Mdulo voc pode esperar que suporte pelo menos 2GB. No escreva programas para testar este limite, pois voc provavelmente vai atingir o limite de memria. Quando da escrita de valores string no cdigo-fonte, pode-se utilizar aspas duplas ( ), aspas simples ( ) ou here-docs para delimit-las. Cada mtodo explicado abaixo. 2.4.3.1 EXEMPLOS DE USO DAS ASPAS DUPLAS: PHP: Hypertext Pre-processor GET / HTTP/1.0\n

1234567890 Strings podem conter praticamente todos os caracteres. Alguns caracteres no podem ser escritos como so e necessitam uma notao especial: \n Nova linha \t Tabulao \ Aspa dupla \\ Contra-barra \0 ASCII 0 (nulo) \r Nova linha \$ Escapa o sinal $ para que assim ele no seja tratado como uma varivel, mas como o caracter $. \{Octal #} O caracter representado pelo octal especificado em # - Por exemplo, \ 70 representa a letra 8. \x{Hexadecimal #} O caracter representado pelo hexadecimal especificado em # - p or exemplo, \0x32 representa a letra 2. Uma caracterstica adicional das strings com aspas-duplas que certas notaes de varive is e expresses podem ser embutidas diretamente dentro delas. Sem entrar em detalhes, seguem alguns exempl os de strings vlidas que possuem variveis embutidas. As referncias para variveis so automaticamente substitudas com os valores das variveis, e se esses valores no so strings, eles so convertidos para as suas representaes correspondentes como strings (por exemplo, o integer 123 seria primeiramente convertido para a string 123 ). O resultado $resultado\n O ndice $i do array contm $arr[$i] Em certos casos, onde h necessidade de concatenar strings com valores (assim como variveis e expresses) e essa sintaxe no for suficiente, voc pode usar o operador . (ponto) para concatenar duas ou mais strings. 2.4.3.2 ASPAS SIMPLES Alm das aspas duplas, aspas simples tambm podem ser utilizadas para delimitar stri ngs. Entretanto, em contraste com as aspas duplas, aspas simples no suportam todas as expresses de escape e de subst ituio de variveis das aspas duplas. A tabela abaixo mostra as duas nicas expresses de escape suportadas pelas aspas si mples. \ Aspa simples \\ Contrabarra utilizada quando existe a necessidade de representar uma contraba rra seguida por uma aspa simples por exemplo, \\ Exemplos: Ol, Mundo uma linda queda d\ gua 2.5.3.3 HERE-DOCS Here-docs possibilitam que o programador utilize grandes quantidades de texto em butida em seus scripts, o que pode incluir muitas aspas duplas e simples, sem a necessidade de estar constantemente escapando-as. O trecho aseguir um exemplo de here-doc: <<<O_FIM O ornitorrinco (Ornithorhynchus anatinus) um mamfero monotremado, endmico da Austrl ia. um animal semiaqutico e nocturno que habita rios e cursos de gua. O_FIM A string inicia com <<<, seguida pela string que o programador sabe que no aparec e no texto. encerrada escrevendo 117

PHP essa string no incio da linha, seguida por um ponto-e-vrgula (;) opcional, a ento u ma nova linha obrigatria (\n). O escape de caracteres e substituio de variveis in here-docs idntica as strings em aspas dupl as exceto que no necessrio o escape de aspas duplas. 2.4.4 booleans Booleans foram introduzidos pela primeira vez no PHP4 e no existiam em verses ante riores. Um valor boolean pode ser tanto true ou false. Como mencionado anteriormente, o PHP automaticamente converte tipos quando neces srio. Boolean provavelmente o tipo que outros tipos so mais convertidos por detrs da cena. Isto acontece por q ue, em qualquer cdigo condicional como construo if, laos e assim por diante, tipos so convertidos para este tipo de valor e scalar para verificar se a condio satisfeita. O resultado de operadores de comparao tambm um valor boolean. Considerando o seguinte fragmento de cdigo: $numerador = 1; $denominador = 5; if ($denominador == 0) { print O denominador deve ser um valor diferente de 0 ; } O resultado do operador igual a um boolean; neste caso, seria false e, assim sendo , a construo if() no seria acessada. Agora, considando-se o seguinte fragmento de cdigo: $numerador = 1; $denominador = 5; if ($denominador) { /* Realiza o clculo */ } else { print O denominador deve ser uma valor diferente de 0\n ; } Pode-se ver que nenhuma comparao foi utilizada nesse exemplo; como sempre, o PHP a utomaticamente converteu internamente $denominador ou, para ser mais exato, o valor 5 para o seu equivale nte boolean, true, para executar a construo if() e, assim sendo, realizando o clculo. Mesmo que todos os tipos ainda no tenham sido vistos, a tabela abaixo mostra os va lores-verdade para os seus valores. Recomenda-se voltar a esta tabela para verificar os valores boolean equivalentes para cada tipo, conforme eles forem sendo explicados. Tipo de dado Valores false Valores true Integer 0 Todos os valores diferentes de 0 Floating-point 0.0 Todos os valores diferentes de 0 Strings Strings vazias Todas as outras strings Null Sempre Nunca Array Se estiver vazia Se contiver pelo menos um elemento. 2.4.5 Null Null um tipo de dados com apenas um valor possvel: o valor NULL. Ele marca varivei s como estando vazias, e especialmente til para diferenciar entre a string vazia e valores null vindos de bancos de dados. O operador do PHP isset($variavel) retorna false para NULL, e true para quaisque r outros tipos de dados, desde que a varivel que esteja sendo testada exista. Exemplo: $exemplo = NULL;

2.4.6 Resources Resources, um tipo especial de dado, representando um recurso de uma extenso PHP como uma consulta em um banco 118 Escola Alcides Maya - Terceira Mdulo de dados, um arquivo aberto, uma conexo ao banco de dados, e muitos outros tipos externos. As variveis deste tipo nunca so tocadas pelo programador, mas passadas para as funes relevantes que sabem como interagir com o recurso especificado. 2.4.7 ARRAYS Um array em PHP uma coleo de pares chave/valor. Isto significa que ele mapeia chav es (ou ndices) para valores. ndices de arrays podem ser integers ou strings enquanto valores podem ser de qual quer tipo (incluindo outros arrays). Dica: Arrays em PHP so implementados usando tabelas mistas, o que significa que a cessar um valor tem uma mdia de complexibilidade de 0. 2.4.7.1 CONSTRUTOR ARRAY() Arrays podem ser declarados utilizando o construtor de linguagem array(), que ge ralmente possui a seguinte forma (elementos dentro de colchetes, [], so opcionais): array([chave =>] valor, [chave =>] valor, ...) A chave opcional, e quando no especificada, a chave automaticamente recebe o maio r valor da chave anterior + 1 (comeando em 0). Pode-se intercalar o uso com declarao ou no de chaves mesmo sendo n a mesma declarao de array. O valor em s pode ser de qualquer tipo do PHP, inclundo um array. Arrays contendo arrays fornecem um resultado similar a arrays multidimensionais em outras linguagens de programao. Seguem alguns exemplos: l array(1, 2, 3) o mesmo que o mais explcito array(0 => 1, 1 => 2, 2 => 3). l array( nome => Petrnio , idade => 28) l array(1 => UM , DOIS , TRES ) equivalente a array(1 => UM , 2 => DOIS , 3 => TRES l array() um array vazio. E um exemplo de arrays aninhados l array(array( nome => Joo , idade => 28), array( nome => Brbara , idade => 67)) O exemplo anterior demonstra um array com dois elements: cada um com uma coleo (ar ray) de informaes de uma pessoa. 2.4.7.2 ACESSANDO ELEMENTOS DO ARRAY Elementos do array podem ser acessados utilizando a notao $arr[key], onde key tant o uma expresso integer ou string. Quando do uso de uma constante string como chave, deve-se lembrar as aspas simpl es ou duplas, como em $arr[ key ]. Esta notao pode ser usada tanto para ler elementos de um array e modific-los ou cri ar novos elementos. 2.5.7.3 MODIFICANDO/CRIANDO ELEMENTOS DE UM ARRAY $arr1 = array(1, 2, 3); $arr2[0] = 1; $arr2[1] = 2; $arr2[2] = 3; print_r($arr1); print_r($arr2); A funo print_r() ainda no foi vista, mas quando recebe um array, ela escreve o cont edo do array de uma maneira legivel. Pode-se usar essa funo quando da depurao dos scripts. O exemplo anterior escreve Array

( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 119 PHP [1] => 2 [2] => 3 ) Ento, v-se que podem ser utilizados tanto o construtor array() e a notao $arr[key] p ara criar arrays. Normalmente, array() utilizado para declarar arrays cujos elementos so conhecidos na compilao do cdigo, e a notao $arr[key] utilizada quando os elementos so computados em tempo de execuo. O PHP tambm suporta uma notao especial, $arr[], onde a chave no especificada. Quanto cria novos offsets de arrays utilizando essa notao (por exemplo, utilizando ela como o valor l), a chave automaticamente setada como o valor diretamente posterior a maior chave anterior. Assim sendo, o exemplo anterior pode ser reescrito como: $arr1 = array(1, 2, 3); $arr2[] = 1; $arr2[] = 2; $arr2[] = 3; O resultado o mesmo que no exemplo anterior. O mesmo verdade quando utilizamos arrays com chaves string: $arr1 = array( name => John , age => 28); $arr2[ name ] = John ; $arr2[ age ] = 28; if ($arr1 == $arr2) { print $arr1 e $arr2 so iguais . \n ; } A mensagem confirmando a igualdade dos dois arrays escrita. 2.4.7.4 Lendo valores de arrays Pode-se utilizar a notao $arr[key] para ler valores de array. Os prximos exemplos f oram construdos no exemplo anterior: print $arr2[ name ]; if ($arr2[ age ] < 35) { print jovem\n ; } Este exemplo escreve John jovem Nota: Como mencionado anteriormente, utilizar a sintaxe $arr[] no suportado quand o se l ndices de array, mas apenas ao escrev-los. 2.4.7.5 Acessando arrays aninhados (ou arrays multi-dimensionais) Quando se acessa arrays aninhados, pode-se adicionar quantos colchetes quanto ne cessrio para alcanar o valor relevante. Segue um exemplo de como declarar arrays aninhados: $arr = array(1 => array( name => John , age => 28), array( name => Barbara , age => Pode-se obter o mesmo resultado com as seguintes construes: $arr[1][ name ] = John ; $arr[1][ age ] = 28; $arr[2][ name ] = Barbara ; $arr[2][ age ] = 67;

A leitura de um array aninhado trivial quando se utiliza a mesma notao. Por exempl o, se voc quer imprimir na tela a idade de John, a seguinte construo faz o truque: print $arr[1][ age ]; 2.4.7.6 Atravessando arrays utilizando foreach() Existem algumas maneiras diferentes de realizar uma iterao por um array. A mais el egante o construtor do lao foreach(). A sintaxe padro deste lao 120 Escola Alcides Maya - Terceira Mdulo foreach($array as [$chave =>] [&] $valor) ... $chave opcional, e quando especificada, ela contm o valor da chave correntemente iterado do valor da chave, dependendo do tipo da chave. Ao especificar & para o valor tambm opcional, e deve ser especificado caso se pla neje modificar $valor e quer propagar isso para $array. Na maioria dos casos, no se quer modificar o $valor quando iter ando sobre um array e ento, assim sendo, no h necessidade de especific-lo. Temos aqui um exemplo simples de um lao foreach(): $players = array( John , Barbara , Bill , Nancy ); print The players are:\n ; foreach ($players as $key => $value) { print #$key = $value\n ; } A sada deste exemplo : The players are: #0 = John #1 = Barbara #2 = Bill #3 = Nancy Agora temos um exemplo mais complicado que realizada uma iterao sobre um array de pessoas e marca qual pessoa considerada idosa e qual considerada jovem: $people = array(1 => array( name => John , age => 28), array( name => Barbara , age foreach ($people as &$person) { if ($person[ age ] >= 35) { $person[ age group ] = 3 idade ; } else { $person[ age group ] = Jovem ; } } print_r($people); Novamente, este cdigo faz uso da funo print_r(). A sada do cdigo anterior a seguinte: Array ( [1] => Array ( [name] => John [age] => 28 [age group] => Jovem ) [2] => Array ( [name] => Barbara [age] => 67 [age group] => 3 idade

) ) 121 PHP 2.5.8 Constantes No PHP, pode-se definir nomes, chamados constantes, para valores simples. Como o nome implica, esses valores no podem ser mudados, uma vez que representam um determinado valor. Os nomes para c onstantes seguem as mesmas regras que variveis PHP exceto que constantes no possuem um sinal de cifro na frente ($). Uma prtica comum em muitas linguagens de programao inclundo o PHP utilizar letras maisculas para nomes de co antes, mas no obrigatrio. Se for o desejado, mas no recomendado, pode-se definir constantes para no diferenc iar masculas/minsculas, assim no requerendo um cdigo para corrigir o nome se fizer referncia a uma constante. Dica: Utilize apenas constantes com diferenciao de maisculas/minsculas tanto para se r consistente com padres de desenvolvimento e tambm por ser incerto se constantes sem diferenciao continuaro ten do suporte em verses futuras do PHP. Diferentemente de variveis, constantes, quando definidas, so acessiveis globalment e. No se deve (e no se pode) redeclar-las em cada nova funo e/ou arquivo PHP. Para definir uma constante, utiliza-se a seguinte funo: define( NOME_DA_CONSTANTE , valor [, diferenciar]) Onde: l NOME_DA_CONSTANTE uma string. l valor qualquer expresso PHP vlida, exceto arrays e objetos. l diferenciar um Boolean (true, false) e opcional. O padro true Um exemplo para uma constante pr-definida o valor Boolean true, que registrado se m diferenciar mascula/ minscula. Segue um exemplo simples de como definir e utilizar uma constante: define( MY_OK , 0); define( MY_ERROR , 1); ... if ($error_code == MY_ERROR) { print( There was an error\n ); } 2.6 OPERADORES O PHP contm 3 tipos de operadores: unrios, binrios e um operador ternrio. Operadores binrios so utilizados em dois operadores: 2+3 14 * 3.1415 $i 1 Estes so simples exemplos de expresses. PHP pode fazer operaes binrias em dois operadores que possuam o mesmo tipo. Entreta nto, se os dois operandos possurem tipos diferentes, o PHP automaticamente converte um deles para o tipo do outro, seguindo as seguintes regras (exceto se especificado diferentemente, como no operador de concatenao). Type of One of the Operands Type of the Other Operand Conversion Performed Integer Floating point O operando integer convertido para o tipo floating point. Integer String A string convertida para um nmero. Se o tipo da string convertida for um nmero real, o operando integer convertido para um nmero real tambm. Real String A string convertida para Real Booleans, nulls e resources agem como integers, e so convertidos do seguinte modo :

l Boolean: False = 0, True = 1 l Null = 0 l Resource = O n (id) do resource 122 Escola Alcides Maya - Terceira Mdulo 2.6.1 Operadores Binrios 2.6.1.1 Operadores Numricos Todos os operadores binrios (exceto pelo operador de concatenao) trabalham com oper andos numricos. Se um ou os dois dos operandos so strings, Booleans, nulls ou resources, eles so automaticamen te convertidos para o seu equivalente numrico antes do clculo ser realizado. Operador Nome Valor + Soma A soma entre dois operandos - Subtrao A diferena entre dois operandos * Multiplicao O produto de dois operandos / Diviso O quociente de dois operandos % Mdulo O resto da diviso inteira. 2.6.1.2 Operador de concatenao (.) O operador de concatenao concatena duas strings. Este operador trabalha apenas em strings; entretanto, qualquer operando que no seja string, primeiramente convertido para uma. O seguinte exemplo deve escrever O ano 2000 : $ano = 2000; print O ano .$ano; O valor integer $ano internamente convertido para a string 2000 antes de ser conca tenado com o prefixo da string, O ano . 2.6.2 OPERADOR DE ATRIBUIO Operadores de atribuio permitem ao programador escrever um valor para uma varivel, O primeiro operando (aquele na esquerda do operador de atribuio) deve ser uma varivel. O valor de uma atribuio o valor final atribudo para a varivel; por exemplo, a expresso $var = 5 tem o valor 5 (e atribui 5 para $var). Adicionalmente ao operador regular de atribuio =, diversos outros operadores de at ribuio so compostos de um operador, seguido por um sinal de igual. Esses operadores compostos aplicam o op erador pegando a varivel na esquerda como o primeiro operando e o valor na direita como o segundo operando, e atribui o resultado da operao para a varivel na esquerda. Por exemplo: $counter += 2; // Isto identido a $counter = $counter + 2; $offset *= $counter; // Isto idntico a $offset = $offset * $counter A lista seguinte mostra os operadores de atribuio compostos: +=, -=, *=, /=, %=, ^=, .=, &=, =, <<=, >>= 2.6.3 Operadores de comparao Operadores de comparao permitem ao programador determinar os relacionamentos entre dois operandos. Quando ambos os operandos so strings, a comparao realizada da forma lxica. A compara resulta em um Boolean. Para os seguintes operadores de comparao, converses automticas de tipo so realizadas, se necessrio. Operador Nome Valor == Igual a Verifica pela igualdade entre dois argumentos executando converso de t ipo quando necessrio:1 == 1 resulta em true1 == 1 resulta em true != Diferente de O oposto de ==

> Maior que Verifica se o primeiro operando maior que o segundo < Menor que Verifica se o primeiro operando menor que o segundo >= Maior ou igual que Verifica se o primeiro operando maior ou igual que o segun do <= Menor ou igual que Verifica se o primeiro operando menor ou igual que o segun do Para os dois operadores seguintes, converso automtica de tipos no so permitidas e, a ssim sendo, ambos os tipos e 123 PHP valores so comparados. Operador Nome Valor === Idntico a O mesmo que == mas os tipos dos operandos devem ser os mesmos. No oc orre converso automtica de tipos:1 === 1 resulta em false1 === 1 resulta em true !== No identico a O oposto de === 2.6.4 Logical operators Operadores lgicos primeiramente convertem seus operandos para valores boolean e e nto executam a respectiva comparao. Operador Nome Valor &&, and E lgico O resultado da operao lgica E entre os dois operandos , or OU lgico O resultado da operao lgica OU entre os dois operandos xor XOR lgico O resultado da operao lgica XOR entre os dois operandos 2.6.5 Operadores unrios Operadores unrios agem em um operando. 2.6.7 OPERADOR DE NEGAO O operador de negao aparece antes do seu operando por exemplo, !$var (! o operador , $var o operando). Operador Nome Valor ! Negao lgica true se o valor testado do operando false.false se o valor testado do operando true. 2.6.8 OPERADORES DE INCREMENTO/DECREMENTO Operadores de incremento/decremento so nicos no sentido que eles operam apenas nas variveis e no em qualquer valor. A razo disto que alm de calcular o valor resultante, o valor da varivel muda tambm. Operador Nome Efeito em $var Valor da expresso $var++ Ps-incremento $var incrementada em 1 O valor anterior de $var. ++$var Pr-incremento $var incrementada em 1 O novo valor de $var (incrementado em 1). $var-- Ps-decremento $var decrementada em 1 O valor anterior de $var. --$var Pr-decremento $var decrementada em 1 O novo valor de $var (decrementado em 1). Como pode ser visto na tabela anterior, existe uma diferena no valor de ps e pr inc remento. Entretanto, nos dois casos, $var incrementada em 1. A nica diferena o valor para qual avaliada e expresso incr mental. Exemplo 1: $num1 = 5; $num2 = $num1++; // ps-incremento, $num2 igual o valor original de $num1 print $num1; // escreveu o valor de $num1, que agora 6 print $num2; // escreveu o valor de $num2, que o valor original de $num1, 5 Exemplo 2: $num1 = 5; $num2 = ++$num1; // pr-incremento, $num2 recebe o valor incremental de $num1

print $num1; // escreveu o valor de $num1, que agora 6 print $num2; 124 Escola Alcides Maya - Terceira Mdulo // escreveu o valor de $num2, que o mesmo valor de $num1, 6 As mesmas regras se aplicam a pr- e ps-decremento. 2.6.9 O primeiro e nico. operador ternrio Um dos operadores mais elegante o operador ?: (ponto de interrogacao). Seu forma to expressao_verdade ? expr1 : expr2 O operador avalia a expressao_verdade e verifica se retorna true. Se assim for, o valor da expresso avalia para o valor de expr1 (expr2 no avaliada). Se o retorno for false, o valor da expresso avalia p ara o valor de expr2 (expr1 no avaliado). Por exemplo, o trecho de cdigo a seguir verifica se $a est setada (usando isset()) e mostra a mensagem de acordo: $a = 99; $mensagem = isset($a) ? $a est setada : $a no est setada ; print $message; Este exemplo, escreve o seguinte: $a est setada 2.7 Estruturas de controle O PHP d suporte a uma variedade das mais comuns estruturas de controle disponveis em outras linguagens de programao. Elas podem ser divididas basicamente em dois grupos: Estruturas de cont role condicionais e estruturas de controle de lao. As estruturas de controle condicionais afetam o fluxo do program a e pulam determinadas partes do cdigo de acordo com certos critrios, enquanto estruturas de controle de laos executam ce rto cdigo um nmero arbitrrio de vezes de acordo com o critrio especificado. 2.7.1 Estruturas de controle condicionais Estruturas de controle condicionais so cruciais ao permitir que o programa tome d iferentes caminhos na execuo baseado naas decises que so tomadas em tempo de execuo. O PHP suporta os controles c ondicionais if e switch. 2.7.1.1 Comandos if O mais trivial dos comandos condicionais o if. Ele testa a condio e executa o coma ndo indicado se o resultado for true (valor diferente de zero). Ele possui duas sintaxes: if (expresso) comando; if (expresso): comando; ... comando; endif; Para incluir mais de um comando no if da primeira sintaxe, preciso utilizar um b loco, demarcado por chaves. O else um complemento opcional para o if. Se utilizado, o comando ser executado s e a expresso retornar o valor false (zero). Suas duas sintaxes so: if (expresso) comando; else comando; if (expresso): comando;

... comando; else comando; ... comando; 125 PHP endif; A seguir, temos um exemplo do comando if utilizado com else: if ($a > $b) $maior = $a; else $maior = $b; O exemplo acima coloca em $maior o maior valor entre $a e $b Em determinadas situaes necessrio fazer mais de um teste, e executar condicionalmen te diversos comandos ou blocos de comandos. Para facilitar o entendimento de uma estrutura do tipo: if (expressao1) comando1; else if (expressao2) comando2; else if (expressao3) comando3; else comando4; Foi criado o comando, tambm opcional elseif. Ele tem a mesma funo de um else e um i f usados sequencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseif s, ficando ess a utilizao a critrio do programador, que deve zelar pela legibilidade de seu script. O comando elseif tambm pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe geral do comando if fica das seguintes maneiras: if (expressao1) comando; [ elseif (expressao2) comando; ] [ else comando; ] if (expressao1) : comando; ... comando; [ elseif (expressao2) comando; ... comando; ] [ else comando; ... comando; ] endif; 2.7.1.2 Comandos switch O comando switch atua de maneira semelhante a uma srie de comandos if na mesma ex presso. Frequentemente o programador pode querer comparar uma varivel com diversos valores, e executar um cdigo diferente a depender de qual

valor igual ao da varivel. Quando isso for necessrio, deve-se usar o comando switc h. O exemplo seguinte mostra dois trechos de cdigo que fazem a mesma coisa, sendo que o primeiro utiliza uma srie de if s e o segundo utiliza switch: if ($i == 0) print i igual a zero ; 126 Escola Alcides Maya - Terceira Mdulo elseif ($i == 1) print i igual a um ; elseif ($i == 2) print i igual a dois ; switch ($i) { case 0: print i igual a zero ; break; case 1: print i igual a um ; break; case 2: print i igual a dois ; break; } importante compreender o funcionamento do switch para no cometer enganos. O coman do switch testa linha a linha os cases encontrados, e a partir do momento que encontra um valor igual ao da va rivel testada, passa a executar todos os comandos seguintes, mesmo os que fazem parte de outro teste, at o fim do bloco . por isso usa-se o comando break, quebrando o fluxo e fazendo com que o cdigo seja executado da maneira desejada. V eremos mais sobre o break mais adiante. Veja o exemplo: switch ($i) { case 0: print i igual a zero ; case 1: print i igual a um ; case 2: print i igual a dois ; } No exemplo acima, se $i for igual a zero, os trs comandos print sero executados. Se $i for igual a 1, os dois ltimos print sero executados. O comando s funcionar da maneira desejada se $i for igual a 2. Em outras linguagens que implementam o comando switch, ou similar, os valores a serem testados s podem ser do tipo inteiro. Em PHP permitido usar valores do tipo string como elementos de teste do comando switch. O exemplo abaixo funciona perfeitamente: switch ($s) { case casa : print A casa amarela ; break; case arvore : print a rvore bonita ; break; case lampada : print joao apagou a lampada ; } 2.7.2 ESTRUTURA DE CONTROLE DE LAOS Estruturas de controle de laos so usadas para repetir determinadas tarefas no prog

rama, como iterar sobre um resultset de uma consulta ao banco de dados. 2.7.2.1 WHILE 127 PHP O while o comando de repetio (lao) mais simples. Ele testa uma condio e executa um c mando, ou um bloco de comandos, at que a condio testada seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas: while (<expressao>) <comando>; while (<expressao>): <comando>; ... <comando>; endwhile; A expresso s testada a cada vez que o bloco de instrues termina, alm do teste inicia . Se o valor da expresso passar a ser false no meio do bloco de instrues, a execuo segue at o final do bloco. Se no t este inicial a condio for avaliada como false, o bloco de comandos no ser executado. O exemplo a seguir mostra o uso do while para imprimir os nmeros de 1 a 10: $i = 1; while ($i <=10) print $i++; 2.7.2.2 Do... while O lao do..while funciona de maneira bastante semelhante ao while, com a simples d iferena que a expresso testada ao final do bloco de comandos. O lao do..while possui apenas uma sintaxe, que a s eguinte: do { <comando> ... <comando> } while (<expressao>); O exemplo utilizado para ilustrar o uso do while pode ser feito da seguinte mane ira utilizando o do.. while: $i = 0; do { print ++$i; } while ($i < 10); 2.7.2.3 For O tipo de lao mais complexo o for. Para os que programam em C, C++ ou Java, a ass imilao do funcionamento do for natural. Mas para aqueles que esto acostumados a linguagens como Pascal, h uma grande mudana para o uso do for. As duas sintaxes permitidas so: for (<inicializacao>;<condicao>;<incremento>) <comando>; for (<inicializacao>;<condicao>;<incremento>) : <comando>; ... <comando>; endfor; As trs expresses que ficam entre parnteses tm as seguintes finalidades: 1. Inicializao: comando ou sequencia de comandos a serem realizados antes do inici o do lao. Serve para inicializar variveis. 2. Condio: Expresso booleana que define se os comandos que esto dentro do lao sero ex cutados ou no. Enquanto

a expresso for verdadeira (valor diferente de zero) os comandos sero executados. 3. Incremento: Comando executado ao final de cada execuo do lao. Um comando for funciona de maneira semelhante a um while escrito da seguinte for ma: 128 Escola Alcides Maya - Terceira Mdulo <inicializacao> while (<condicao>) { comandos ... <incremento> } 2.7.3 Quebra de fluxo 2.7.3.1 BREAK O comando break pode ser utilizado em laos de do, for e while, alm do uso j visto n o comando switch. Ao encontrar um break dentro de um desses laos, o interpretador PHP para imediatamente a execuo do lao, seguindo normalmente o fluxo do script. while ($x > 0) { ... if ($x == 20) { echo erro! x = 20 ; break; ... } } No trecho de cdigo acima, o lao while tem uma condio para seu trmino normal ($x <= 0) , mas foi utilizado o break para o caso de um trmino no previsto no incio do lao. Assim o interpretador seguir pa ra o comando seguinte ao lao. 2.7.3.2 Continue O comando continue tambm deve ser utilizado no interior de laos, e funciona de man eira semelhante ao break, com a diferena que o fluxo ao invs de sair do lao volta para o incio dele. Vejamos o exemp lo: for ($i = 0; $i < 100; $i++) { if ($i % 2) continue; echo $i ; } O exemplo acima uma maneira ineficiente de imprimir os nmeros pares entre 0 e 99. O que o lao faz testar se o resto da diviso entre o nmero e 2 0. Se for diferente de zero (valor lgico true) o interp retador encontrar um continue, que faz com que os comandos seguintes do interior do lao sejam ignorados, seguindo para a prxima iterao. 2.8 FUNES 2.8.1 Definindo funes A sintaxe bsica para definir uma funo : function nome_da_funo([arg1, arg2, arg3]) { Comandos; ... ; [return <valor de retorno>]; } Qualquer cdigo PHP vlido pode estar contido no interior de uma funo. Como a checagem de tipos em PHP dinmica, o tipo de retorno no deve ser declarado, sendo necessrio que o programador esteja atento para que a funo retorne o tipo desejado. recomendvel que esteja tudo bem documentado para facilitar a leitura e compreenso do cdigo. Para efeito de

documentao, utiliza-se o seguinte formato de declarao de funo: tipo function nome_da_funcao(tipo arg1, tipo arg2, ...); 129 PHP Este formato s deve ser utilizado na documentao do script, pois o PHP no aceita a de clarao de tipos. Isso significa que em muitos casos o programador deve estar atento ao tipos dos valores passado s como parmetros, pois se no for passado o tipo esperado no emitido nenhum alerta pelo interpretador PHP, j que este no test a os tipos. 2.8.2 Valor de retorno Toda funo pode opcionalmente retornar um valor, ou simplesmente executar os comand os e no retornar valor algum. No possvel que uma funo retorne mais de um valor, mas permitido fazer com que uma f no retorne um valor composto, como listas ou arrays. 2.8.3 Argumentos possvel passar argumentos para uma funo. Eles devem serdeclarados logo aps o nome da funo, entre parnteses, e tornam-se variveis pertencentes ao escopo local da funo. A declarao do tipo de cada argumento tambm utilizada apenas para efeito de documentao. Exemplo: function imprime($texto){ echo $texto; } imprime( teste de funes ); 2.8.3.1 Passagem de parmetros por referncia Normalmente, a passagem de parmetros em PHP feita por valor, ou seja, se o contedo da varivel for alterado, essa alterao no afeta a varivel original. Exemplo: function mais5($numero) { $numero += 5; } $a = 3; mais5($a); //$a continua valendo 3 No exemplo acima, como a passagem de parmetros por valor, a funo mais5 intil, j qu ps a execuo sair da funo o valor anterior da varivel recuperado. Se a passagem de valor fosse feita por referncia, a varivel $a teria 8 como valor. O que ocorre normalmente que ao ser chamada uma funo, o interpretador salva todo o escopo atual, ou seja, os contedos das variveis. Se uma dessas variveis for passada como parmetro, seu contedo fica preservado, pois a funo ir trabalhar na verdade com uma cpia da varivel. Porm, se a passagem de parmetros for f eita por referncia, toda alterao que a funo realizar no valor passado como parmetro afetar a varivel que o contm. H duas maneiras de fazer com que uma funo tenha parmetros passados por referncia: ind icando isso na declarao da funo, o que faz com que a passagem de parmetros sempre seja assim; e tambm na prpr ia chamada da funo. Nos dois casos utiliza-se o modificador & . Vejamos um exemplo que ilustra os dois caso s: function mais5(&$num1, $num2) { $num1 += 5; $num2 += 5; } $a = $b = 1; mais5($a, $b); /* Neste caso, s $num1 ter seu valor alterado, pois a passagem por

referncia est definida na declarao da funo. */ mais5($a, &$b); /* Aqui as duas variveis tero seus valores alterados. */ 2.8.3.2 ARGUMENTOS COM VALORES PR-DEFINIDOS (DEFAULT) Em PHP possvel ter valores default para argumentos de funes, ou seja, valores que s ero assumidos em caso de nada ser passado no lugar do argumento. Quando algum parmetro declarado desta maneira, a passagem do mesmo na chamada da funo torna-se opcional. function teste($vivas = testando ) { echo $vivas; } teste(); // imprime testando 130 Escola Alcides Maya - Terceira Mdulo teste( outro teste ); // imprime outro teste bom lembrar que quando a funo tem mais de um parmetro, o que tem valor default deve ser declarado por ltimo: function teste($figura = circulo, $cor) { echo a figura um , $figura, de cor $cor; } teste(azul); /* A funo no vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declarao correta : */ function teste2($cor, $figura = circulo) { echo a figura um , $figura, de cor $cor; } teste2(azul); /* Aqui a funcao funciona da maneira esperada, ou seja, imprime o texto: a figura um crculo de cor azul */ 2.8.4 Contexto O contexto o conjunto de variveis e seus respectivos valores num determinado pont o do programa. Na chamada de uma funo, ao iniciar a execuo do bloco que contm a implementao da mesma criado um contexto, contendo as variveis declaradas dentro do bloco, ou seja, todas as variveis utilizadas dentro daquele bloco sero eliminadas ao trmino da execuo da funo. 2.8.5 Escopo O escopo de uma varivel em PHP define a poro do programa onde elapode ser utilizada . Na maioria dos casos todas as variveis tm escopo global. Entretanto, em funes definidas pelo usurio um escopo local criado. Uma varivel de escopo global no pode ser utilizada no interior de uma funo sem que haja uma declarao. Exemplo: $vivas = Testando ; function Teste() { echo $vivas; } Teste(); O trecho acima no produzir sada alguma, pois a varivel $vivas de escopo global, e no pode ser referida num escopo local, mesmo que no haja outra com nome igual que cubra a sua visibilidade. Para que o script funcione da forma desejada, a varivel global a ser utilizada deve ser declarada. Exemplo: $vivas = Testando ; function Teste() { global $vivas; echo $vivas;

} Teste(); Uma declarao global pode conter vrias variveis, separadas por vrgulas. Uma outra man a de acessar variveis de escopo global dentro de uma funo utilizando um array pr-definido pelo PHP cujo nome $GLOBALS. O ndice para a varivel referida o proprio nome da varivel, sem o caracter $. O exemplo acima e o abaixo produzem o mesmo resultado: Exemplo: $vivas = Testando ; function Teste() { echo $GLOBALS[ vivas ]; // imprime $vivas echo $vivas; // no imprime nada } Teste(); 131 PHP 2.8.6 Variveis estticas Tal qual o C, PHP suporta a declarao de variveis locais funo como estticas (static) sse tipo de varivel permanece intcta entre chamadas de funes, mas so acessiveis apenas dentro da funo em ue so declaradas. Variveis estticas podem ser inicializadas, e essa inicializao ocorre apenas na primeira vez que a declarao da varivel esttica alcanada. Segue um exemplo para o uso de uma varivel esttica que inicializada apenas na prim eira vez que a funo executada: function faz_algo() { static first_time = true; if (first_time) { /* Executa este cdigo apenas na primeira vez a funo chamada. */ ... } /* Executa a lgica principal toda a vez que a funo chamada */ ... } 132 Escola Alcides Maya - Terceira Mdulo 3. MANIPULANDO DADOS DE FORMULRIOS 3.1 - Introduo Um formulrio HTML apenas um rosto bonito para onde os usurios podero inserir informa que sero interpretadas de alguma maneira por algum script do lado do servidor. E no nosso caso, esse script um script PHP. Primeiro: antes para poder enviar as informaes, seu formulrio deve conter um boto sub mit , isso se consegue atravs do comando: <input type=submit value= Texto do Boto > Segundo: todos os campos que sero tratados no script PHP devem conter o parmetro NA ME , caso contrrio, os dados no sero passados para o script PHP. Ex: <input type=text name=nome_do_campo> Como as informaes do formulrio so passadas para esse script PHP e como as informaes d formulrio enviado so tratadas, dependem de voc. Existem 2 mtodos como as informaes podem ser passadas: GET e POST. O recomendvel sem

pre, para todos os formulrios usar o mtodo POST, onde os dados enviados no so visveis nas URLs, ocultan o possveis importantes informaes e permitindo o envio de longas informaes. O GET totalmente o contrrio diss . 3.2. Como as informaes chegam para o script php? Assuma o seguinte formulrio: <form action= script.php method= post > Campo 1: <input type=text name=campo1><br> Campo 2: <input type=text name=campo2><br> <input type=submit value= OK > </form> Esse formulrio usa o mtodo POST para envio das informaes, ento em script.php : <?php echo O valor de CAMPO 1 : . $_POST[ campo1 ]; echo <br>O valor de CAMPO 2 : . $_POST[ campo2 ]; ?> Se o formulrio tivesse sido enviado usando o mtodo GET, voc simplesmente usaria $_G ET no lugar de $_POST. Dica: Em vez de usar $_GET ou $_POST voc pode escrever a varivel com o mesmo nome do campo do formulrio (no exemplo, $campo1 e $campo2). Mas, esse uso no recomendado, pois se a diretiva regi ster_globals na configurao do seu PHP estiver desativada, as variveis com nome dos campos dos formulrios, tero um valor vazio. Uma soluo para isso usar a funo import_request_variables no comeo dos seus scripts que interpretam form ulrios. Essa funo aceita 3 letras como argumentos: P, G e C, referentes a $_POST, $_GET e $_COOKIE respectivamente . Exemplo de uso: <?phpimport_ request_variables( gP );?>O que acontece? Exemplo: Voc possui formulrio com os campos n ome , endereo e idade . Assuma que a diretiva register_globals do seu PHP esteja desligada, mas, voc j havia programado o script usando as variveis no escopo global, no lugar de $_POST. Adicionando aquela funo no comeo do s cript, as variveis do seu formulrio postado: $_POST[ nome ], $_POST[ endereco ] e $_POST[ idade ] sero extradas ca uma varivel diferente: $nome, $endereco e $idade. 3.3 Elementos do formulrio 3.3.1 Campos hidden Os campos hidden so usados para passar informaes que no podem ser alteradas pelo usur io que estar inserindo informaes no formulrio. Por exemplo: voc tem um site com sistema de login e o usurio quer alterar as informaes de login dele. O script que ir manipular esse formulrio, precisa saber o ID do usurio para poder alterar as informaes no banco de dados, ento esse ID um campo hidden. Exemplo: hidden.html <form action= hidden.php method= post > <input type=hidden name=escondido value= valor do escondido > 133 PHP <input type=hidden name=id value= 111 > <input type=submit> </form> hidden.php <?php echo Campo Hidden: . $_POST[ escondido ]; echo <br>Oi, seu ID : . $_POST[ id ];

?> 3.3.2 CAMPOS TEXT E TEXTAREA Os campos text e textarea so os tipos mais simples, onde h somente um possvel valor por campo. Dispensam maiores explicaes. Exemplo: texts.html <form action= texts.php method= post > Nome: <input type=text name=nome><br> Email: <input type=text name=email><br><br> Mensagem: <textarea name=mensagem cols=8 rows=3></textarea><br> <input type=submit> </form> texts.php <?php echo Ol . $_POST[ nome ] . (email: . $_POST[ email ] . )<br><br> ; echo Sua mensagem: . $_POST[ mensagem ]; ?> 3.3.3 CAMPOS RADIO Campos Radio permitem um relacionamento de um para muitos entre identificador e valor, ou seja, eles tm mltiplos possveis valores, mas somente um pode ser pr-exibido ou selecionado. Por exemplo: voc tem um sistema de quiz . Cada pergunta possui 5 possveis respostas. Cada resposta um radio, onde os 5 radi os dessa pergunta possuem o mesmo identificador, mas cada com valores diferentes. Exemplos: radio.html <form action= radio.php method= post > <B>Qual seu sistema operacional?</B><br> <input type=radio name=sistema value= Windows 98 > Win 98 <input type=radio name=sistema value= Windows XP > Win XP <input type=radio name=sistema value= Linux > Linux <input type=radio name=sistema value= Mac > Mac<br><br> <B>Qual a marca de seu monitor?</B><br> <input type=radio name=monitor value= Samsung > Samsung <input type=radio name=monitor value= LG > LG <input type=radio name=monitor value= Desconhecido > Desconhecido<br><br> <input type=submit> </form> radio.php <?php echo Seu sistema operacional : . $_POST[ sistema ]; echo <br>Seu monitor : . $_POST[ monitor ]; ?> 134 Escola Alcides Maya - Terceira Mdulo 3.3.4 Campos checkbox O tipo Checkbox tem somente um possvel valor por entrada: on value (marcado) ou n o value (desmarcado). No script voc deve fazer a verificao para saber se o campo foi marcado ou no. Se possvel tambm utilizar grupos de checkbox com o mesmo nome. Para voc deve adicio nar [] no final do nome, para o PHP interpretar como array, veja o cdigo exemplo. Exemplo: checkbox.html <form action= checkbox.php method= post > <B>Escolha os numeros de sua preferncia:</B><br> <input type=checkbox name= numeros[] value=10> 10<br> <input type=checkbox name= numeros[] value=100> 100<br>

<input type=checkbox name= numeros[] value=1000> 1000<br> <input type=checkbox name= numeros[] value=10000> 10000<br> <input type=checkbox name= numeros[] value=90> 90<br> <input type=checkbox name= numeros[] value=50> 50<br> <input type=checkbox name= numeros[] value=30> 30<br> <input type=checkbox name= numeros[] value=15> 15<br><BR> <input type=checkbox name= news value=1> <B>Receber Newsletter?</B><br><BR> <input type=submit> </form> checkbox.php <?php // Verifica se usurio escolheu algum nmero if(isset($_POST[ numeros ])) { echo Os nmeros de sua preferncia so:<BR> ; // Faz loop pelo array dos numeros foreach($_POST[ numeros ] as $numero) { echo . $numero . <BR> ; } } else { echo Voc no escolheu nmero preferido!<br> ; } // Verifica se usurio quer receber newsletter if(isset($_POST[ news ])) { echo Voc deseja receber as novidades por email! ; } else { echo Voc no quer receber novidades por email... ; } ?> 3.3.5 Campos select Os campos select permitem tratar uma variedade de opes, onde o usurio pode selecion ar apenas uma opo ou mltiplas opes. Quando voc permite mltiplas selees, deve adicionar [] no final do nome, para interpretar como array. Nos exemplos, mostro o funcionamento e tratamento de ambas. Exemplo: select.html <form action= select.php method= post > <B>Qual seu processador?</B><br> 135 PHP <select name=processador> <option value= Pentium >Pentium</option> <option value= AMD >AMD</option> <option value= Celeron >Celeron</option> </select><BR><BR> <B>Livros que deseja comprar?</B><br> Obs: segure CTRL para selecionar mais de um.<BR> <select name= livros[] multiple> <option value= Biblia do PHP 4 >Biblia do PHP 4</option> <option value= PHP Professional >PHP Professional</option> <option value= Iniciando em PHP >Iniciando em PHP</option> <option value= Novidades do PHP 5 >Novidades do PHP 5</option> <option value= Biblia do MySQL >Biblia do MySQL</option> </select><BR><BR> <input type=submit> </form> select.php <?php echo Seu processador : . $_POST[ processador ] . <BR> ;

// Verifica se usurio escolheu algum livro if(isset($_POST[ livros ])) { echo O(s) livro(s) que voc deseja comprar:<br> ; // Faz loop para os livros foreach($_POST[ livros ] as $livro) { echo . $livro . <br> ; } } else { echo Voc no escolheu nenhum livro! ; } ?> 3.4 Upload de arquivos 3.4.1 ASPECTOS DOS FORMULRIOS DE UPLOAD Todo formulrio de upload deve: 1. Ser declarado com o mtodo de envio POST. 2. Conter a diretiva enctype= multipart/form-data , para dizer ao navegador que est se enviando arquivos e no somente os textos dos campos dos formulrio 3. Conter pelo menos 1 campo file . Isso em prtica fica: <form action= script.php method= POST enctype= multipart/form-data > Seu arquivo: <input name= arquivo type= file ><BR> [... outros campos do formulrio ...] <input type= submit value= Enviar > </form> 3.4.2 Manipulando com o script php os arquivos enviados Assume-se que o formulrio acima foi postado enviando um arquivo. Automaticamente em script.php (o action do formulrio exemplo), ser criado as seguintes variveis: l $_FILES[ arquivo ][ name ] 136 Escola Alcides Maya - Terceira Mdulo O nome original do arquivo no computador do usurio. l $_FILES[ arquivo ][ type ] O tipo mime do arquivo, se o navegador deu esta informao. Exemplo: caso uma imagem GIF tenha sido enviada, o mime ser: image/gif . l $_FILES[ arquivo ][ size ] O tamanho em bytes do arquivo. l $_FILES[ arquivo ][ tmp_name ] O nome temporrio do arquivo, como est guardado no servidor. l $_FILES[ arquivo ][ error ] O cdigo de erro associado a este upload de arquivo. Essa opo foi adicionada 3.4.3 OBSERVAES l Em verses anteriores do PHP a 4.1.0 use a varivel $HTTP_POST_FILES e no a varivel superglobal $_FILES que foi introduzida na verso 4.1.0; l No lugar de arquivo use o nome do seu campo file do formulrio; l Se a opo de configurao do PHP register_globals estiver como on , voc pode usar uma ivel com o nome do campo de formulrio, exemplo: $arquivo_name, $arquivo_size, etc. Mas, usar dessa m aneira no o recomendvel, procure sempre usar a superglobal $_FILES. O prefervel no comeo de script.php passar a $_FILES para outra varivel, por exemplo: $arquivo = isset($_FILES[ arquivo ]) ? $_FILES[ arquivo ] : FALSE; $arquivo2 = isset($_FILES[ arquivo2 ]) ? $_FILES[ arquivo2 ] : FALSE; [... etc ...] Os arquivos enviados pelo formulrio sero guardados no diretrio temporrio do servidor , a menos que outro lugar seja especificado com a opo upload_tmp_dir no php.ini. E o caminho e nome de cada arquivo, so ditos na $_

FILES[ arquivo ][ tmp_name ]. Para mover o arquivo para um diretrio desejado deve-se usar a funo move_uploaded_fi le() (em verses anteriores a 4.0.3 use a funo copy). Vamos ento ao que interessa! O cdigo de script.php : <?php // Repassa a varivel do upload $arquivo = isset($_FILES[ arquivo ]) ? $_FILES[ arquivo ] : FALSE; // Caso a varivel $arquivo contenha o valor FALSE, esse script foi acessado // diretamente, ento mostra um alerta para o usurio if(!$arquivo) { echo No acesse esse arquivo diretamente! ; } // Imagem foi enviada, ento a move para o diretrio desejado else { // Diretrio para onde o arquivo ser movido $diretorio = ./arquivos/ ; // Move o arquivo /* Lembrando que se $arquivo no fosse declarado no comeo do script, voc estaria usa ndo $_ FILES[ arquivo ][ tmp_name ] e $_FILES[ arquivo ][ name ] */ if (move_uploaded_file($arquivo[ tmp_name ], $diretorio . $arquivo[ name ])) { echo Arquivo Enviado com sucesso! ; } else { echo Erro ao enviar seu arquivo! ; } } ?> Esse o cdigo mnimo que seu script de upload deve conter. Mas, o mesmo ainda no segu ro, pois no faz nenhuma verificao no arquivo, seja de tamanho, nome, tipo, etc. 137 PHP 3.4.4 Verificando e limitando os arquivos enviados 3.4.4.1 Tamanho dos arquivos Existem vrias formas de verificar o tamanho de arquivo enviado. A primeira limitao que voc pode impor nos uploads colocar o seguinte campo em seu f ormulrio: <input type= hidden name= MAX_FILE_SIZE value= 30000 > Essa diretiva diz ao navegador o tamanho mximo de arquivo que pode ser enviado, o nde o valor fornecido deve ser em bytes. Mas, fcil contornar este limite, ento no conte que o navegador ir obedecer a sua vontade. Mas voc deve adicionar MAX_FILE_SIZE em qualquer caso, j que salva os usuarios que escapam do problema de esperar por um grande arquivo ser transferido e somente depois de tudo descobrir que ele muito grande. Verificando com a varivel $_FILES[ arquivo ][ size ], onde no seu script haver por exempl um if: <?php // Tamanho mximo do arquivo em bytes $maximo = 50000; // Verificao if($_FILES[ arquivo ][ size ] > $maximo) { echo Erro! O arquivo enviado por voc ultrapassa o ; echo limite mximo de . $maximo . bytes! Envie outro arquivo ; } ?> Verificando com a varivel $_FILES[ arquivo ][ error ]: Ao enviar um formulrio de upload, a varivel $_FILES[ arquivo ][ error ] poder conter os uintes valores: l UPLOAD_ERR_OK

Valor: 0; no houve erro, o upload foi bem sucedido. l UPLOAD_ERR_INI_SIZE Valor 1; O arquivo no upload maior do que o limite definido em upload_max_filesi ze no php.ini. l UPLOAD_ERR_FORM_SIZE Valor: 2; O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi espe cificado no formulrio html. l UPLOAD_ERR_PARTIAL Valor: 3; o upload do arquivo foi feito parcialmente. l UPLOAD_ERR_NO_FILE Valor: 4; No foi feito o upload do arquivo. Ento, assuma que seu formulrio de upload seja: <form action= script2.php method= POST enctype= multipart/form-data > <input type= hidden name= MAX_FILE_SIZE value= 30000 > Arquivo: <input name= arquivo type= file ><BR> <input type= submit value= Enviar > </form> E o visitante faa um upload de um arquivo maior que o especificado em MAX_FILE_SI ZE e maior que o da configurao upload_max_filesize. Seu script PHP (no caso script2.php), conter as seguintes ve rificaes: <?php // Tamanho ultrapassa o MAX_FILE_SIZE do formulario if($_FILES[ arquivo ][ error ] == UPLOAD_ERR_FORM_SIZE) { echo O tamanho de seu arquivo ultrapassa o limite dado! Envie outro arquivo ; exit; } /* Tamanho ultrapassa o limite da configurao upload_max_filesize do php.ini */ if($_FILES[ arquivo ][ error ] == UPLOAD_ERR_INI_SIZE) { echo O tamanho de seu arquivo ultrapassa o limite de tamanho de arquivo do PHP! ; echo Envie outro arquivo ; 138 Escola Alcides Maya - Terceira Mdulo exit; } ?> 3.4.4.2 Tipo dos arquivos Assuma que voc possui um site com a rea de usurios, onde os mesmos possam enviar su as fotos. O tipo de imagem aceita seria apenas PNG. Mas, como sempre tem os engraadinhos que possam acabar env iando arquivos no-imagem, voc ento deve verificar se o arquivo uma imagem. Para isso, voc pode verificar a ex tenso do nome de arquivo ou o tipo de arquivo. Mas, conforme expliquei em meu artigo, Upload de Imagens com Segurana , verificar a extenso do nome de arquivo no seguro (leia o artigo citado para mais informaes), ento o melhor sempre verifica o mime tipo do arquivo. Para isso, usa-se ento a varivel $_FILES[ arquivo ][ type ] criada no upload de um arquivo. No nosso exemplo, onde aceitamos apenas imagens PNG o mime tipo : image/png. O script que verificaria isso: <?php // Verifica se o mime-type de imagem PNG if($_FILES[ arquivo ][ type ] !== image/png ) { echo O arquivo enviado por voc no uma imagem PNG! Envie outro! ; } ?> Obs: Caso aceite mais tipos de arquivos, use expresses regulares na verificao. H um exemplo disso no meu artigo Upload de Imagens com Segurana .

3.4.4.3 Nome dos arquivos Vamos continuar com o nosso exemplo onde os usurios enviam suas fotos. Usurios pod em acabar enviando arquivos com nomes com espaos, vrias letras maisculas e minsculas, etc... recomendvel voc de ir um padro para os nomes de arquivos e o melhor sempre colocar underscores ( _ ) no lugar de espaos e que todas as letras sejam minsculas. Assuma tambm que todas as fotos so salvas no mesmo diretrio. Isso tem a falha de fo tos de usurios acabarem ficando com o mesmo nome e se sobrescreverem, ento 2 usurios diferentes tendo a mesma foto ! Voc pode verificar se o arquivo com mesmo nome j existe no diretrio ou usar uma funo que gera nomes nicos para a imag em. <?php // Repassa a varivel do upload $arquivo = isset($_FILES[ arquivo ]) ? $_FILES[ arquivo ] : FALSE; // Cdigo acima... com as demais verificaoes... // Diretrio para onde o arquivo ser movido $diretorio = ./arquivos/ ; // Substitui espaos por underscores no nome do arquivo $nome = str_replace( , _ , $arquivo[ name ]); // Todas as letras em minsculo $nome = strtolower($nome); // Caminho completo do arquivo $nome = $diretorio . $nome; // Verifica se o arquivo existe no diretrio dado if(file_exists($nome)) { echo Um arquivo com esse nome j foi enviado! Envie outro arquivo! ; exit; } // Tudo ok! Ento, move o arquivo if(move_uploaded_file($arquivo[ tmp_name ], $nome)) { echo Arquivo Enviado com sucesso! ; } else { echo Erro ao enviar seu arquivo! ; 139 PHP } ?> Obs: Alguns textos e cdigos foram pegos do Manual Oficial do PHP:http://www.php.n et/manual/pt_BR/features.fileupload. php Obs2: H uma lista ampla de Mime-Types aqui:http://www.auriumsoft.com.br/mime_type s.html 140 Escola Alcides Maya - Terceira Mdulo 4 ENVIANDO E-MAILS Para enviar e-mail atravs de um script PHP bastante simples. Basta utilizar a funo mail: mail(string to, string subject, string message, string [headers]); onde: l to string contendo o e-mail do destinatrio; l subject assunto da mensagem; l message o corpo da mensagem. l headers outras informaes de cabealho, como por exemplo from , reply-to , bcc , et Para facilitar a compreenso dos scripts, os argumentos (como geralmente so strings grandes) devem ser atribudos a variveis antes da chamada da funo mail. 141 PHP

5 ACESSANDO O MYSQL Neste documento todos os exemplos referentes a acesso de bancos de dados utiliza ro o gerenciador de banco de dados MySQL, que pode ser copiado gratuitamente no site http://www.mysql.org.] Para interagir com uma base de dados SQL existem trs comandos bsicos que devem ser utilizados: um que faz a conexo com o servidor de banco de dados, um que seleciona a base de dados a ser u tilizada e um terceiro que executa uma query SQL. 5.1 Conexo com o servidor A conexo com o servidor de banco de dados mySQL em PHP feita atravs do comando mys ql_connect, que tem a seguinte sintaxe: int mysql_connect(string /*host [:porta]*/ , string /*login*/ , string /*senha*/ ); Os parmetros so bastante simples: o endereo do servidor(host), o nome do usurio (log in) e a senha para a conexo. A funo retorna um valor inteiro, que o identificador da conexo estabelecida e dever se r armazenado numa varivel para ser utilizado depois. No nosso exemplo, temos como servidor de banco de dados a mesma mquina que roda o servidor http, como login o usurio root e senha phppwd : $conexao = mysql_connect( localhost , root , phppwd ); Assim, se a conexo for bem sucedida (existir um servidor no endereo especificado q ue possua o usurio com a senha fornecida), o identificador da conexo fica armazenado na varivel $conexo. 5.2 Seleo do banco de dados Uma vez conectado, preciso selecionar o banco de dados existente no servidor com o qual desejamos trabalhar. Isso feito atravs da funo int mysql_select_db, que possui a seguinte sintaxe: int mysql_select_db(string /*nome_base*/, int /*conexao*/); O valor de retorno 0 se o comando falhar, e 1 em caso de sucesso. O nome da base de dados a selecionar o primeiro parmetro fornecido, seguido pelo identificador da conexo. Se este for omitido, o i nterpretador PHP tentar utilizar altima conexo estabelecida. Recomenda-se sempre explicitar esse valor, para facilitar a legibilidade do cdigo. No nosso exemplo, a base de dados a ser selecionada possui o nome ged : mysql_select_db( ged , $conexao); Aps a execuo desse comando qualquer consulta executada para aquela conexo utilizar a base de dados selecionada. 5.3 Execuo de queries sql Aps estabelecida a conexo e selecionada a base de dados a ser utilizada, quase tod a a interao com o servidor mySQL pode ser feita atravs de consultas escritas em SQL (Structured Query Language), c om o comando mysql_query, que utiliza a seguinte sintaxe: int mysql_query(string consulta, int [conexao] ); O valor de retorno 0 se falhar ou 1 em caso de sucesso. Sucesso aqui significa q ue a consulta est sintaticamente correta e foi executada no servidor. Nenhuma informao sobre o resultado retornada deste co mando, ou at mesmo se o resultado o esperado. No caso da consulta ser um comando SELECT, o valor de retorno um val or interno que identifica o resultado, que poder ser tratado com a funo mysql_result() e outras. A string query no deve con ter ponto-e-vrgula no final do comando, e o identificador da conexo opcional. Vamos criar uma tabela como exempl o: $cria = CREATE TABLE exemplo (

codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50) ) ; mysql_query($cria, $conexao); Agora vejamos como ficou o cdigo completo para executar uma query SQL numa base d e dados mySQL, com um exemplo que cria uma tabela chamada exemplo e adiciona alguns dados: $conexao = mysql_connect( localhost , root , phppwd ); mysql_select_db( ged , $conexao); 142 Escola Alcides Maya - Terceira Mdulo $cria = CREATE TABLE exemplo ( codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50) ) ; $insere1 = INSERT INTO exemplo ( nome, email) VALUES ( Mauricio Vivas , vivas@usa.net ) ; $insere2 = INSERT INTO exemplo (nome,email) VALUES ( Jos da Silva , jose@teste.com ) ; $insere3 = INSERT INTO exemplo (nome,email) VALUES ( Fernando Henrique Cardoso , fhc@planalto.gov.br ) ; $insere4 = INSERT INTO exemplo (nome,email) VALUES ( Bill Clinton , president@whitehouse.gov ) ; mysql_query($cria, $conexao); mysql_query($insere1, $conexao); mysql_query($insere2, $conexao); mysql_query($insere3, $conexao); mysql_query($insere4, $conexao); 5.4 TRATAMENTO DE RESULTADOS DE QUERY SELECT Ao executar uma query SQL SELECT atravs do comando mysql_query, o identificador d o resultado deve ser armazenado numa varivel que pode ser tratada de diversas formas. Duas maneiras in teressantes de faz-lo usam o comando mysql_result e o comando mysql_fetch_row, respectivamente. O comando mysql_result tem a seguinte sintaxe: int mysql_result(int resultado, int linha, mixed [campo]); Onde resultado o identificador do resultado, obtido com o retorno da funo mysql_qu ery, linha especifica a tupla a ser exibida, j que uma query SELECT pode retornar diversas tuplas, e campo o identifi cador do campo a ser exibido, sendo o tipo descrito como mixed pela possibilidade de ser de diversos tipos (neste ca so, inteiro ou string). Vejamos um exemplo utilizando a tabela criada anteriormente: $consulta = SELECT nome, email FROM exemplo WHERE email LIKE vivas ; $resultado = mysql_query($consulta, $conexao); printf( Nome: , mysql_result($resultado,0, nome ), <br>\n ); printf( e-mail: , mysql_result($resultado,0, email ), <br> ); Com o exemplo acima, o resultado ser: Nome: Mauricio Vivas<br> e-mail: vivas@usa.net<br> importante notar que a utilizao desta funo um pouco trabalhosa, j que no caso de u esultado com vrias linhas

preciso controlar o nmero de linhas para trat-las (pode-se utilizar a funo mysql_num _rows(int resultado), que retorna o nmero de linhas de um resultado), e no caso de uma alterao no nome do campo preci so alterar tambm a maneira de trat-lo. Por isso mais aconselhvel que se use uma outra funo, como por exemplo my sql_fetch_row, que possui a seguinte sintaxe: array mysql_fetch_row(int result); A varivel resultado o identificador da memria de resultados, obtido como retorno d a funo mysql_query. O resultado produzido por esta funo de retirar a primeira linha da memria de resultados, se hou ver, e coloc-la num array. Assim torna-se mais fcil tratar um resultado com vrias linhas, e sem utilizar os nomes d os campos na rotina de tratamento do 143 PHP resultado: $consulta = SELECT nome, email FROM exemplo ; $resultado = mysql_query($consulta, $conexao); echo <table border=1>\n ; echo <tr><td>Nome</td><td>e-mail</tr>\n ; while ($linha = mysql_fetch_row($resultado)) { printf( <tr><td>$linha[0]</td> ); printf( <td>$linha[1]</td></tr> ); } echo </table>\n ; O cdigo acima ir imprimir todos os registros da tabela exemplo numa tabela html. S e o programador desejar pular alguma(s) linha(s) do resultado, poder utilizar a funo mysql_data_seek, que tem por objetivo definir qual ser a prxima linha da memria de resultados a ser impressa. Sua sintaxe : int mysql_data_seek(int resultado, int linha); Sendo resultado o identificador do resultado e linha o numero da linha. Retorna 0 em caso de falha, e um valor diferente de zero em caso de sucesso. Existem diversas outras funes para o tratamento de resultados, que armazenam as li nhas em arrays e objetos, assim como outras funes para administrar o banco de dados, para maiores informaes, visite www.php.net/manual Caso a consulta retorne mais de uma linha, deve-se utilizar a funo mysql_fetch_arr ay(), que transforma cada tupla da consulta em um array associativo. Sua sintaxe : int mysql_fetch_array(int resultado); Sendo resultado um recurso de Query MySQL. Por exemplo: $consulta = SELECT nome, email FROM exemplo ; $resultado = mysql_query($consulta, $conexao); echo <table border=1>\n ; echo <tr><td>Nome</td><td>e-mail</tr>\n ; while ($linha = mysql_fetch_array($resultado)) { echo <tr><td> .$linha[ nome ]. </td> ; echo <td> .$linha[ email ]. </td></tr> ; } echo </table>\n ; Percebemos que para cada nome de campo, ele se torna um ndice do array $linha. A cada iterao automaticamente o mysql_fetch_array incrementa a tupla atual. Para maiores informaes, visite www.php .net/mysql_fetch_array. 144 Escola Alcides Maya - Terceira Mdulo