[barreto, maurÍcio vivas de s.] aplicações web com php

Upload: leletker

Post on 17-Jul-2015

177 views

Category:

Documents


1 download

TRANSCRIPT

Aplicaes Web com PHPpor Maurcio Vivas de Souza Barreto

Aracaju, junho/2000

ndice

NDICE...........................................................................................................................II

NOTAS DO AUTOR.....................................................................................................10

01. INTRODUO.......................................................................................................12 CLIENT-SIDE SCRIPTS.........................................................................................................12 SERVER-SIDE SCRIPTS.........................................................................................................12 O QUE PHP?..................................................................................................................13 O QUE PODE SER FEITO COM PHP?.....................................................................................14 COMO SURGIU A LINGUAGEM PHP?.....................................................................................14 02. ENVIANDO DADOS PARA O SERVIDOR HTTP............................................16 O MTODO GET................................................................................................................16 HEADERS...........................................................................................................................17 O MTODO POST..............................................................................................................18 UTILIZANDO GET E POST................................................................................................18 03. FORMULRIOS HTML.......................................................................................19 DEFININDO UM FORMULRIO................................................................................................19 A TAG ..................................................................................................................19 CAMPO DE TEXTO..............................................................................................................20 PARMETROS:.....................................................................................................................20 CAMPO DE TEXTO COM MSCARA.......................................................................................20 PARMETROS:.....................................................................................................................20 CHECKBOX.........................................................................................................................21 PARMETROS:.....................................................................................................................21

ii

RADIO BUTTON..................................................................................................................21 PARMETROS:.....................................................................................................................21 SUBMIT BUTTON.................................................................................................................21 PARMETROS:.....................................................................................................................22 RESET BUTTON...................................................................................................................22 PARMETROS:.....................................................................................................................22 BUTTON.............................................................................................................................22 PARMETROS:.....................................................................................................................22 TEXTAREA.........................................................................................................................22 PARMETROS:.....................................................................................................................22 SELECT..............................................................................................................................23 PARMETROS:.....................................................................................................................23 UPLOAD DE ARQUIVOS.........................................................................................................23 PARMETROS:.....................................................................................................................24 04. INSTALAO E CONFIGURAO EM AMBIENTE WINDOWS..............25 SERVIDOR APACHE.............................................................................................................25 PHP.................................................................................................................................25MYSQL.............................................................................................................................26

05. INSTALAO E CONFIGURAO EM AMBIENTE LINUX REDHAT....28 (DISPONVEL NA PRXIMA VERSO).......................................................................................28 06. SINTAXE BSICA.................................................................................................29 DELIMITANDO O CDIGO PHP.............................................................................................29 SEPARADOR DE INSTRUES.................................................................................................29 NOMES DE VARIVEIS..........................................................................................................30 COMENTRIOS....................................................................................................................30 COMENTRIOS DE UMA LINHA:...............................................................................................30 COMENTRIOS DE MAIS DE UMA LINHA:...................................................................................30 IMPRIMINDO CDIGO HTML..................................................................................................31

iii

07. TIPOS.......................................................................................................................32 TIPOS SUPORTADOS.............................................................................................................32 INTEIROS (INTEGER OU LONG).................................................................................................32 NMEROS EM PONTO FLUTUANTE (DOUBLE OU FLOAT)..............................................................33 STRINGS.............................................................................................................................33 ARRAYS..............................................................................................................................34 Listas................................................................................................................................35 OBJETOS.............................................................................................................................36 BOOLEANOS........................................................................................................................36 TRANSFORMAO DE TIPOS..................................................................................................36 COERES...........................................................................................................................36 TRANSFORMAO EXPLCITA DE TIPOS.....................................................................................37 COM A FUNO SETTYPE.......................................................................................................38 08. OPERADORES.......................................................................................................39 ARITMTICOS.....................................................................................................................39DE STRINGS.........................................................................................................................39 DE ATRIBUIO...................................................................................................................39 BIT A BIT............................................................................................................................40

LGICOS............................................................................................................................40 COMPARAO.....................................................................................................................40 EXPRESSO CONDICIONAL....................................................................................................41DE INCREMENTO E DECREMENTO...........................................................................................41

09. ESTRUTURAS DE CONTROLE..........................................................................42 BLOCOS.............................................................................................................................42 COMANDOS DE SELEO......................................................................................................42IF.......................................................................................................................................43 SWITCH...............................................................................................................................45 COMANDOS DE REPETIO....................................................................................................47 WHILE.................................................................................................................................47

iv

DO... WHILE.........................................................................................................................47 FOR....................................................................................................................................48

QUEBRA DE FLUXO..............................................................................................................49 BREAK...............................................................................................................................49 CONTINUE...........................................................................................................................49 10. FUNES................................................................................................................51 DEFININDO FUNES............................................................................................................51 VALOR DE RETORNO............................................................................................................51 ARGUMENTOS.....................................................................................................................52 PASSAGEM DE PARMETROS POR REFERNCIA............................................................................52 ARGUMENTOS COM VALORES PR-DEFINIDOS (DEFAULT).............................................................53 CONTEXTO.........................................................................................................................54 ESCOPO.............................................................................................................................54 11. VARIVEIS E CONSTANTES.............................................................................56 DECLARAO DE UMA VARIVEL..........................................................................................56 O MODIFICADOR STATIC.......................................................................................................56 VARIVEIS VARIVEIS.........................................................................................................57 VARIVEIS ENVIADAS PELO NAVEGADOR................................................................................57 URLENCODE.......................................................................................................................58 UTILIZANDO ARRAYS............................................................................................................58 VARIVEIS DE AMBIENTE.....................................................................................................59 VERIFICANDO O TIPO DE UMA VARIVEL................................................................................59 FUNO QUE RETORNA O TIPO DA VARIVEL.............................................................................60 FUNES QUE TESTAM O TIPO DA VARIVEL.............................................................................60 DESTRUINDO UMA VARIVEL................................................................................................60 VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR................................................................61 A FUNO ISSET..................................................................................................................61 A FUNO EMPTY.................................................................................................................61 CONSTANTES PR-DEFINIDAS................................................................................................61 DEFININDO CONSTANTES......................................................................................................62

v

12. CLASSES E OBJETOS..........................................................................................63 CLASSE..............................................................................................................................63 OBJETO.............................................................................................................................63 A VARIVEL $THIS..............................................................................................................63 SUBCLASSES.......................................................................................................................64 CONSTRUTORES..................................................................................................................64 13. NOES DE SQL...................................................................................................66 INTRODUO......................................................................................................................66 ESTRUTURA DAS TABELAS.....................................................................................................67 COMANDO CREATE.............................................................................................................67 COMANDO DROP..................................................................................................................67 COMANDO ALTER................................................................................................................68 MANIPULANDO DADOS DAS TABELAS......................................................................................68 COMANDO SELECT...........................................................................................................68 COMANDO INSERT............................................................................................................69 COMANDO UPDATE..........................................................................................................69 COMANDO DELETE...........................................................................................................70 14. ACESSANDO O MYSQL VIA PHP.....................................................................72 ESTABELECENDO CONEXES.................................................................................................72 SELECIONANDO A BASE DE DADOS.........................................................................................72 REALIZANDO CONSULTAS.....................................................................................................73 APAGANDO O RESULTADO......................................................................................................73 NMERO DE LINHAS..............................................................................................................73 UTILIZANDO OS RESULTADOS..................................................................................................74 ALTERANDO O PONTEIRO DE UM RESULTADO.............................................................................74 15. ACESSANDO O POSTGRESQL VIA PHP.........................................................76 ESTABELECENDO CONEXES.................................................................................................76 REALIZANDO CONSULTAS.....................................................................................................76 vi

VERIFICANDO O ERRO NA EXECUO DE UMA QUERY..................................................................77 APAGANDO O RESULTADO......................................................................................................77 NMERO DE LINHAS..............................................................................................................77 UTILIZANDO OS RESULTADOS..................................................................................................77 16. UTILIZANDO HEADERS.....................................................................................79

17. UTILIZANDO COOKIES......................................................................................80 O QUE SO.........................................................................................................................80 GRAVANDO COOKIES...........................................................................................................80 LENDO COOKIES GRAVADOS..................................................................................................81 18. MANIPULANDO ARQUIVOS..............................................................................82 COPIANDO ARQUIVOS..........................................................................................................82 VERIFICANDO O TAMANHO DE UM ARQUIVO...........................................................................82 VERIFICANDO SE UM ARQUIVO EXISTE...................................................................................82 LIMPANDO O CACHE............................................................................................................83 ABRINDO ARQUIVOS PARA LEITURA E/OU ESCRITA...................................................................83 LENDO DE UM ARQUIVO.......................................................................................................85 ESCREVENDO EM UM ARQUIVO..............................................................................................85 EXEMPLO...........................................................................................................................85 UPLOADS COM FORMULRIOS HTML..................................................................................86 19. ENVIANDO E-MAIL.............................................................................................88

20. BIBLIOGRAFIA E REFERNCIAS....................................................................89

APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS.....................90 FUNES RELACIONADAS A HTML.....................................................................................90

vii

HTMLSPECIALCHARS..............................................................................................................90 HTMLENTITIES......................................................................................................................90 NL2BR................................................................................................................................90 GET_META_TAGS..................................................................................................................91 STRIP_TAGS.........................................................................................................................91 URLENCODE.........................................................................................................................91 URLDECODE.........................................................................................................................92

FUNES RELACIONADAS A ARRAYS.......................................................................................92 IMPLODE E JOIN....................................................................................................................92SPLIT..................................................................................................................................92 EXPLODE.............................................................................................................................93

COMPARAES ENTRE STRINGS.............................................................................................93SIMILAR_TEXT......................................................................................................................93 STRCASECMP........................................................................................................................93 STRCMP...............................................................................................................................93 STRSTR................................................................................................................................94 STRISTR...............................................................................................................................94 STRPOS................................................................................................................................94 STRRPOS..............................................................................................................................94

FUNES PARA EDIO DE STRINGS.......................................................................................95CHOP..................................................................................................................................95 LTRIM.................................................................................................................................95 TRIM...................................................................................................................................95 STRREV...............................................................................................................................95 STRTOLOWER........................................................................................................................96 STRTOUPPER.........................................................................................................................96 UCFIRST..............................................................................................................................96 UCWORDS............................................................................................................................96 STR_REPLACE.......................................................................................................................97

FUNES DIVERSAS.............................................................................................................97CHR....................................................................................................................................97 ORD

...................................................................................................................................97 .................................................................................................................................97 .................................................................................................................................97 viii

ECHO PRINT

STRLEN

..............................................................................................................................97

APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS......................98 FUNES GENRICAS..........................................................................................................98 ARRAY...............................................................................................................................98RANGE................................................................................................................................98 SHUFFLE..............................................................................................................................99 SIZEOF................................................................................................................................99

FUNES DE NAVEGAO.................................................................................................99RESET.................................................................................................................................99 END....................................................................................................................................99 NEXT................................................................................................................................100 PREV................................................................................................................................100 POS..................................................................................................................................100 KEY..................................................................................................................................100 EACH................................................................................................................................100

FUNES DE ORDENAO...................................................................................................101SORT................................................................................................................................101 RSORT...............................................................................................................................101 ASORT...............................................................................................................................102 ARSORT.............................................................................................................................102 KSORT...............................................................................................................................102 USORT...............................................................................................................................102 UASORT.............................................................................................................................102 UKSORT.............................................................................................................................103

APNDICE 03 TIPOS SUPORTADOS PELO MYSQL.....................................104 NUMRICOS......................................................................................................................104 DATA E HORA..................................................................................................................104 STRINGS...........................................................................................................................104

ix

Notas do autorEste documento foi criado inicialmente como parte do projeto de concluso de curso da Universidade Federal de Sergipe, e distribudo gratuitamente atravs da Internet. Depois de terminado o projeto, recebi diversas sugestes sobre contedo a incluir, e tambm passei a dar cursos de PHP em diversas instituies de Sergipe. Diante disso, continuei a escrever o documento, sendo algumas incluses para atender s sugestes e outras para utilizar nos cursos. Como poder ser observado principalmente no captulo 05, o documento no est concludo, e nem sei se algum dia estar, tendo em vista que o uso de PHP cresce cada vez mais, e ainda falta muito a ser dito sobre ele aqui. Apesar de citar em alguns pontos o PHP4, o documento ainda baseado em PHP3, lanado h menos de um ms. Porm todo o contedo que segue compatvel com PHP4, e por isso no h problema em lanar esta nova verso baseada em PHP3. Se voc tem uma pgina com tutoriais, ou gostou deste documento e quer public-lo em seu site, fique vontade para faz-lo. S peo duas coisas: 1. 2. Me avise, informando a URL do site (s por Lembre-se que o autor do documento sou eu.

curiosidade minha); Apesar de ainda no ter visto, j fui informado que h cpias piratas deste documento. Mas quero lembrar que no preciso piratear algo completamente GRATUITO. Este documento pode ser encontrado nos seguintes sites: http://www.tutoriais.com.br http://www.lemon.com.br/canais/tutoriais/ http://www.cipsga.org.br/

O terceiro endereo o site do CIPSGA - Comit de Incentivo a Produo do Software Gratuito e Alternativo, uma organizao no governamental que vem realizando um grande trabalho no Brasil, buscando o desenvolvimento tecnolgico atravs do software livre. Se houver alguma informao incorreta, peo que me informem por email. Se tiverem dvidas sobre temas tratados aqui, ou at sobre os ainda no presentes neste documento, entrem em contato comigo por e-mail. Para obter a verso original do documento, voc pode pedir por e-mail, ou visitar o site www.vivas.com.br. Meu e-mail? [email protected] ou [email protected].

11

01. Introduo

Client-Side Scripts So responsveis pelas aes executadas no browser, sem contato com o servidor. Os exemplos mais comuns de aplicaes client-side so imagens e textos que mudam com o passar do mouse. Os scripts client-side so muito teis para fazer validaes de formulrios sem utilizar processamento do servidor e sem provocar trfego na rede. Outra utilizao comum na construo de interfaces dinmicas e leves.

Figura 1. Funcionamento de scripts client-side

Server-Side Scripts Os scripts server-side so responsveis pela criao de pginas em tempo real. Num mecanismo de busca, por exemplo, seria invivel manter um arquivo para cada consulta a ser realizada. O que existe um modelo da pgina de resposta, que mesclado com os dados no momento em que a pgina requisitada.

12

Figura 2. Requisio Normal

Figura 3. Requisio de pgina dinmica

O que PHP?

PHP uma linguagem que permite criar sites WEB dinmicos, possibilitando uma interao com o usurio atravs de formulrios, parmetros da URL e links. A diferena de PHP com relao a linguagens semelhantes a Javascript que o cdigo PHP executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira possvel interagir com bancos de dados e aplicaes existentes no servidor, com a vantagem de no expor o cdigo fonte para o cliente. Isso pode ser til quando o programa est lidando com senhas ou qualquer tipo de informao confidencial.

13

O que diferencia PHP de um script CGI escrito em C ou Perl que o cdigo PHP fica embutido no prprio HTML, enquanto no outro caso necessrio que o script CGI gere todo o cdigo HTML, ou leia de um outro arquivo.

O que pode ser feito com PHP?

Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita 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 nmero de bancos de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir 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, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir sockets e interagir com outros protocolos.

Como surgiu a linguagem PHP?

A linguagem PHP foi concebida durante o outono de 1994 por Rasmus Lerdorf. As primeiras verses no foram disponibilizadas, tendo sido utilizadas em sua home-page apenas para que ele pudesse ter informaes sobre as visitas que estavam sendo feitas. A primeira verso utilizada por outras pessoas foi disponibilizada em 1995, e ficou conhecida como Personal Home Page Tools (ferramentas para pgina pessoal). Era composta por um sistema bastante simples que interpretava algumas macros e alguns utilitrios que rodavam por trs das home-pages: um livro de visitas, um contador e algumas outras coisas. Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI, o FI veio de um outro pacote escrito por Rasmus que interpretava dados de formulrios HTML (Form Interpreter). Ele combinou os scripts do pacote Personal

14

Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir com o projeto. Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997 esse nmero subiu para mais de 50.000. Nessa poca houve uma mudana no desenvolvimento do PHP. Ele deixou de ser um projeto de Rasmus com contribuies de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a verso 3. O lanamento do PHP4, ocorrido em 22/05/2000, trouxe muitas novidades aos programadores de PHP. Uma das principais foi o suporte a sesses, bastante til pra identificar o cliente que solicitou determinada informao. Alm das mudanas referentes a sintaxe e novos recursos de programao, o PHP4 trouxe como novidade um otimizador chamado Zend, que permite a execuo muito mais rpida de scripts PHP. A empresa que produz o Zend promete para este ano o lanamento de um compilador de PHP. Cdigos compilados sero executados mais rapidamente, alm de proteger o fonte da aplicao.

15

02. Enviando Dados para o Servidor HTTPProgramar para a web pode ser considerado como um jogo que consiste em receber os dados do usurio, process-los e enviar a resposta dinmica. Uma vez enviada a resposta, encerrado o contato entre o servidor e o cliente. Portanto a primeira coisa a aprender como fazer para receber os dados enviados pelo browser para o servidor. O protocolo HTTP prov dois principais mtodos para enviar informaes para o servidor web, alm da URL referente ao arquivo solicitado. Esses mtodos so o POST e o GET. O protocolo HTTP/1.0 tambm especifica o mtodo HEAD, utilizado apenas para transmitir informaes do header, alm dos mtodos PUT e DELETE, que no sero abordados neste curso. O mtodo GET A especificao do protocolo HTTP/0.9 (a primeira implementao do HTTP) possua a definio do mtodo GET, utilizado pelo browser para solicitar um documento especfico. Por exemplo: a seguinte requisio HTTP retornaria o documento "index.html", localizado no diretrio do servidro chamado teste:GET /teste/index.html CRLF

Devemos notar que a requisio GET inicia com a palavra GET, inclui o documento solicitado e encerra com a combinao dos caracteres carriage return e line feed. Para um melhor entendimento, voc pode fazer uma requisio GET conectando diretamente em algum servidor WEB, conectando atravs de um programa de telnet (geralmente o servidor http utiliza a porta 80). A resposta ser o cdigo da pgina solicitada.telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. GET /index.php3 (... pgina solicitada ...) Connection closed by foreign host.

16

Obviamente a diferena do browser que ele trata as informaes recebidas e exibe a pgina j formatada. Atravs do mtodo GET tambm possvel passar parmetros da requisio ao servidor, que pode tratar esses valores e at alterar a resposta a depender deles, como no exemplo abaixo:telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. GET /index.php3?id=0024horas&tipo=Taxi (... pgina solicitada ...) Connection closed by foreign host.

No exemplo so passados dois parmetros: id e tipo. Esses parmetros esto no formato conhecido por URLencode, que detalhado no captulo 09. Apesar de ser possvel passar parmetros utilizando o mtodo GET, e com isso gerar pginas dinamicamente, este mtodo tem pelo menos dois problemas que em determinadas circunstncias podem ser considerados srios: O primeiro que o GET permite uma quantidade de dados passados limitada a 1024 caracteres, o que pode gerar perda de informaes em certos casos. O segundo que pelo fato de que as informaes fazem parte da URL, todos os dados podem ser vistos pelo usurio. Isso pode ser extremamente perigoso quando informaes sigilosas esto envolvidas (senha, por exemplo).

Headers A verso 1.0 do protocolo HTTP trouxe boas inovaes ao mesmo. Uma delas foi a criao de headers nas mensagens de requisio e de resposta. Os headers so informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio, e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras informaes. Assim foi possvel definir um outro mtodo de requisio de arquivos, que resolveu os principais problemas do mtodo GET.

17

O mtodo POST Atravs da utilizao de headers possvel enviar os parmetros da URL solicitada sem expor esses dados ao usurio, e tambm sem haver um limite de tamanho. Uma conexo ao servidor HTTP utilizando o mtodo POST seria algo semelhante ao que segue:telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. POST /index.php3 Accept */* Content-type: application/x-www-form-urlencoded Content-length:22 id=0024horas&tipo=Taxi (... pgina solicitada ...) Connection closed by foreign host.

Devemos observar os headers enviados ao servidor: a linha Accept informa os tipos de dados que podem ser enviados como resposta (no caso, todos). A linha Content-type informa o tipo de dado que est sendo enviado (urlencoded). O terceiro header o mais importante pois informa o tamanho do corpo da mensagem, que contm os parmetros. Aps todos os headers h um salto de linha e ento iniciado o corpo da mensagem, no formato urlencoded. Obviamente o usurio no deve se preocupar com os headers, em codificar os dados ou em calcular o tamanho do corpo da mensagem. O browser faz isso de maneira transparente.

Utilizando GET e POST O mtodo GET pode ser utilizado atravs da digitao de um endereo no local apropriado do navegador ou atravs de um hiperlink, ou seja, uma referncia de uma pgina a outra. Nesses casos preciso converter os dados para o formato urlencode. A terceira maneira de utilizar o GET atravs de formulrios HTML, e neste caso o usurio no precisa se preocupar com a codificao dos dados. A utilizao de formulrios HTML a nica maneira possvel de submeter dados pelo mtodo POST.

18

03. Formulrios HTML

Definindo um formulrio Por ser uma linguagem de marcao, a sintaxe do HTML na maioria dos casos exige uma tag de incio e uma de final daquele bloco. Exatamente isso que ocorre com a definio de um formulrio: uma tag no incio e outra no final, sendo que todos os elementos do formulrio devem estar entre as duas tags. Isto torna possvel a incluso de mais de um formulrio num mesmo html. As tags citadas so:

Onde temos:name: o identificador do formulrio. Utilizado principalmente em Scripts

client-side (JavaScript);action: nome do script que receber os dados do formulrio ao ser

submetido. Mais frente esto abordadas as maneiras de tratar esses dados recebidos;method: mtodo de envio dos dados: get ou post; enctype: formato em que os dados sero enviados. O default

urlencoded. Se for utilizado um elemento do tipo upload de arquivo (file) preciso utilizar o tipo multipart/form-data.Exemplo: (textos e elementos do form)

Cada elemento do formulrio deve possuir um nome que ir identific-lo no momento em que o script indicado no ACTION for tratar os dados.

A tag Muitos elementos de um formulrio html so definidos pela tag. Cada tipo de elemento possui parmetros prprios, mas todos possuem pelo

19

menos dois parmetros em comum: type, que define o tipo de elemento, e name, que como j foi dito define o nome daquele elemento.

Campo de Texto

O campo mais comum em formulrios. Exibe na tela um campo para entrada de texto com apenas uma linha. Parmetros: Value o valor pr-definido do elemento, que aparecer quando a pgina for carregada; Size O tamanho do elemento na tela, em caracteres; Maxlength O tamanho mximo do texto contido no elemento, em caracteres;

Campo de Texto com Mscara

Tipo de campo semelhante ao anterior, com a diferena que neste caso os dados digitados so substitudos por asteriscos, e por isso so os mais recomendados para campos que devam conter senhas. importante salientar que nenhuma criptografia utilizada. Apenas no aparece na tela o que est sendo digitado. Parmetros: Value o valor pr-definido do elemento, que aparecer quando a pgina for carregada; Size O tamanho do elemento na tela, em caracteres; Maxlength O tamanho mximo do texto contido no elemento, em caracteres;

20

Checkbox

Utilizado para campos de mltipla escolha, onde o usurio pode marcar mais de uma opo. Parmetros: Value o valor que ser enviado ao servidor quando o formulrio for submetido, no caso do campo estar marcado Checked O estado inicial do elemento. Quando presente, o elemento j aparece marcado;

Radio Button

Utilizado para campos de mltipla escolha, onde o usurio pode marcar apenas uma opo. Para agrupar vrios elementos deste tipo, fazendo com que eles sejam exclusivos, basta atribuir o mesmo nome a todos do grupo. Parmetros: Value o valor que ser enviado ao servidor quando o formulrio for submetido, no caso do campo estar marcado Checked O estado inicial do elemento. Quando presente, o elemento j aparece marcado;

Submit Button

Utilizado para enviar os dados do formulrio para o script descrito na seo action da definio do formulrio

21

Parmetros: Value o texto que aparecer no corpo do boto.

Reset Button

Utilizado para fazer todos os campos do formulrio retornem ao valor original, quando a pgina foi carregada. Bastante utilizado como boto limpar, mas na realidade s limpa os campos se todos eles tm como valor uma string vazia. Parmetros: Value o texto que aparecer no corpo do boto.

Button

Utilizado normalmente para ativar funes de scripts client-side (JavaScript, por exemplo). Sem essa utilizao, no produz efeito algum Parmetros: Value o texto que aparecer no corpo do boto.

TextAreatexto

Exibe na tela uma caixa de texto, com o tamanho definido pelos parmetros cols e rows. Parmetros: Cols nmero de colunas do campo, em caracteres; Rows nmero de linhas do campo, em caracteres; 22

Wrap Maneira como so tratadas as quebras de linha automticas. O valor soft faz com que o texto quebre somente na tela, sendo enviado para o servidor o texto da maneira como foi digitado; O valor hard faz com que seja enviado para o servidor da maneira como o texto aparece na tela, com todas as quebras de linhas inseridas automaticamente; o valor off faz com que o texto no quebre na tela e nem quando enviado ao servidor. Value O elemento do tipo textarea no possui o parmetro value. O valor pr-definido do campo o texto que fica entre as tags e .

Select texto

Se o parmetro size tiver o valor 1 e no houver o parmetro multiple, exibe na tela uma combo box. Caso contrrio, exibe na tela uma select list. Parmetros: Size nmero de linhas exibidas. Default: 1; Multiple parmetro que, se presente, permite que sejam selecionadas duas ou mais linhas, atravs das teclas Control ou Shift; option Cada item do tipo option acrescenta uma linha ao select; value Valor a ser enviado ao servidor se aquele elemento for selecionado. Default: o texto do item; text valor a ser exibido para aquele item. No definido por um parmetro, mas pelo texto que fica entre as tags e

Upload de arquivos

23

Exibe na tela do browser um campo de texto e um boto, que ao clicado abre uma janela para localizar um arquivo no disco. Para utilizar este tipo de componente, o formulrio dever utilizar o mtodo POST e ter o parmetro enctype com o valor "multipart/form-data". Parmetros: Size O tamanho do campo de texto exibido.

24

04. Instalao e configurao em ambiente windowsServidor Apache O servidor http que ser utilizado neste curso o Apache, que est disponvel para download em http://www.apache.org/httpd.html. A instalao do Apache bastante simples, similar a qualquer aplicao windows. A nica restrio que o winsock2 deve estar instalado no sistema. Se no estiver, o download pode ser feito em:http://www.microsoft.com/windows95/downloads/contents/wuadmintools/s_wunetworkingtools/w95sockets2/

Depois de instalado, necessrio fazer a configurao do servidor, atravs do arquivo httpd.conf. Todas as configuraes esto comentadas. O mnimo que deve ser configurado o diretrio onde os documentos estaro, atravs da opoDocumentRoot. Basta procurar a opo e escrever o nome do diretrio em seguida,

como no exemplo:DocumentRoot "C:\vivas\"

Uma outra configurao bsica a DirectoryIndex, que informa ao servidor quais os arquivos sero exibidos automaticamente como ndice do diretrio. isso que faz com que ao digitar, por exemplo, www.guia-aju.com.br, o servidor saiba qual dos arquivos do diretrio deve ser exibido. Abaixo temos um exemplo da utilizao do DirectoryIndex:DirectoryIndex index.html index.htm index.php3

Feito isso, crie um arquivo com um dos nomes definidos como ndice e coloque no diretrio definido como root. Execute o servidor Apache e tente acessar o endereo http://localhost pelo browser. Se a pgina for exibida, porque o servidor foi instalado corretamente.

PHP O PHP pode ser conseguido em www.php.net, e sua instalao tambm simples. Basta descompactar os arquivos para o diretrio c:\php3 e editar o arquivo de configurao. O arquivo php3.ini-dist deve ser copiado para o diretrio do windows (geralmente c:\windows ou c:\winnt) com o nome php3.ini. Depois de

25

copiado, o arquivo pode ser editado, bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os mdulos (c:\php3). Veja o exemplo:extension_dir = c:\php3

Alm disso necessrio descomentar a linha referente o mdulo mysql, j que iremos utiliz-lo basta tirar o ; (ponto-e-vrgula) do incio da linha:;extension=php3_mysql.dll

Feito isso, podemos partir para a configurao do servidor Apache, necessria para que este reconhea o PHP. Editando novamente o arquivo httpd.conf, as linhas a seguir devem ser adicionadas no final do arquivo:ScriptAlias /php3/ "c:/php3/" AddType application/x-httpd-php3 .php3 .php Action application/x-httpd-php3 "/php3/php.exe"

A primeira linha define o diretrio onde est o PHP. A segunda cria um tipo para o PHP, definido que todos os arquivos com as extenses .php3 e .php devem passar pelo interpretador PHP. A terceira linha define o executvel do interpretador PHP. Depois de salvar o arquivo, podemos testar se a instalao do PHP foi bem sucedida. A melhor maneira criar um arquivo chamado teste.php3 e salvar no diretrio raiz do servidor Apache. O arquivo deve conter a seguinte informao:

Acessando a pgina atravs do servidor (http://localhost/teste.php3), devemos ter como resultado uma listagem de todas as configuraes do PHP, incluindo o mdulo mysql, que foi definido como ativo no arquivo php3.ini.

mySQL O banco de dados mySQL pode ser conseguido em

http://www.mysql.com/download.html. Sua instalao tambm bastante simples, tambm no modelos de instalao de qualquer aplicativo para Windows.

26

As configuraes necessrias so relativas a segurana, e exigem um conhecimento mais avanado de administrao de servidores. Como essa instalao destina-se apenas a praticar o PHP, no necessrio fazer muitas alteraes na segurana, bastando apenas saber como adicionar usurios. Para isto, basta utilizar o comando GRANT, que tem a seguinte sintaxe:GRANT privilegio [(lista_colunas)] [, privilegio [(colunas)] ...] ON {tabela | * | *.* | db.*} TO usuario [IDENTIFIED BY senha'] [, usuario [IDENTIFIED BY senha'] ...] [WITH GRANT OPTION]

Onde privilgio uma das palavras reservadas listadas a seguir:ALL PRIVILEGES FILE RELOAD ALTER INDEX SELECT CREATE INSERT SHUTDOWN DELETE PROCESS UPDATE DROP REFERENCES USAGE

Cada palavra representa um tipo de acesso (s) coluna(s), tabela(s) ou base(s) de dados listadas logo depois da clusula ON. Usurio deve conter o nome do usurio (login) e o host permitido (ex.:teste@localhost).

Abaixo temos um exemplo da utilizao do comando grant:GRANT SELECT, INSERT, UPDATE ON * TO vivas@localhost IDENTIFIED BY senhateste;

O exemplo cria o usurio vivas, com a senha senhateste, que s pode acessar da mesma mquina onde est o servidor (localhost), e s pode utilizar os comandos select, insert e update. Tambm possvel adicionar usurios utilizando o comando INSERT, pra alterar diretamente na tabela de privilgios, que a tabela user da base de dados mysql, que possui os campos para definir nome de usurio, host, senha, e permisses especficas.

27

05. Instalao e configurao em ambiente linux RedHat

(Disponvel na prxima verso)

28

06. Sintaxe BsicaDelimitando o cdigo PHP

O cdigo PHP fica embutido no prprio HTML. O interpretador identifica quando um cdigo PHP pelas seguintes tags: comandos

O tipo de tags mais utilizado o terceiro, que consiste em uma abreviao do primeiro. Para utiliz-lo, necessrio habilitar a opo short-tags na configurao do PHP. O ltimo tipo serve para facilitar o uso por programadores acostumados sintaxe de ASP. Para utiliz-lo tambm necessrio habilit-lo no PHP, atravs do arquivo de configurao php.ini.

Separador de instrues

Entre cada instruo em PHP preciso utilizar o ponto-e-vrgula, assim como em C, Perl e outras linguagens mais conhecidas. Na ltima instruo do bloco de script no necessrio o uso do ponto-e-vrgula, mas por questes estticas recomendase o uso sempre.

29

Nomes de variveis

Toda varivel em PHP tem seu nome composto pelo caracter $ e uma string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou seja, as variveis $vivas e $VIVAS so diferentes. Por isso preciso ter muito cuidado ao definir os nomes das variveis. bom evitar os nomes em maisculas, pois como veremos mais adiante, o PHP j possui alguma variveis pr-definidas cujos nomes so formados por letras maisculas.

Comentrios

H dois tipos de comentrios em cdigo PHP:

Comentrios de uma linha:

Marca como comentrio at o final da linha ou at o final do bloco de cdigo PHP o que vier antes. Pode ser delimitado pelo caracter # ou por duas barras ( // ).Exemplo:

Comentrios de mais de uma linha: Tem como delimitadores os caracteres /* para o incio do bloco e*/ para o final do comentrio. Se o delimitador de final de cdigo PHP ( ?> )

estiver dentro de um comentrio, no ser reconhecido pelo interpretador.

30

Exemplos: */

Imprimindo cdigo html Um script php geralmente tem como resultado uma pgina html, ou algum outro texto. Para gerar esse resultado, deve ser utilizada uma das funes de impresso, echo e print. Para utiliz-las deve-se utilizar um dos seguintes formatos:print(argumento); echo (argumento1, argumento2, ... ); echo argumento;

31

07. Tipos

Tipos Suportados

PHP suporta os seguintes tipos de dados: Inteiro Ponto flutuante String Array Objeto PHP utiliza checagem de tipos dinmica, ou seja, uma varivel pode conter valores de diferentes tipos em diferentes momentos da execuo do script. Por este motivo no necessrio declarar o tipo de uma varivel para us-la. O interpretador PHP decidir qual o tipo daquela varivel, verificando o contedo em tempo de execuo. Ainda assim, permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a funo settype (ver adiante).

Inteiros (integer ou long) Uma varivel pode conter um valor inteiro com atribuies que sigam as seguintes sintaxes:$vivas = 1234; # $vivas = -234; # $vivas = 0234; # # $vivas = 0x34; # # inteiro positivo na base decimal inteiro negativo na base decimal inteiro na base octal-simbolizado pelo 0 equivale a 156 decimal inteiro na base hexadecimal(simbolizado pelo 0x) equivale a 52 decimal.

A diferena entre inteiros simples e long est no nmero de bytes utilizados para armazenar a varivel. Como a escolha feita pelo interpretador PHP de maneira transparente para o usurio, podemos afirmar que os tipos so iguais.

32

Nmeros em Ponto Flutuante (double ou float) Uma varivel pode ter um valor em ponto flutuante com atribuies que sigam as seguintes sintaxes:$vivas = 1.234; $vivas = 23e4; # equivale a 230.000

Strings

Strings podem ser atribudas de duas maneiras: a) utilizando aspas simples ( ' ) Desta maneira, o valor da varivel ser exatamente o texto contido entre as aspas (com exceo de \\ e \' ver tabela abaixo) b) utilizando aspas duplas ( " ) Desta maneira, qualquer varivel ou caracter de escape ser expandido antes de ser atribudo. Exemplo:

A sada desse script ser "---$teste--\n".

A sada desse script ser "---Mauricio--" (com uma quebra de linha no final).

33

A tabela seguinte lista os caracteres de escape: Sintaxe\n \r \t \\ \$ \ \

SignificadoNova linha Retorno de carro (semelhante a \n) Tabulao horizontal A prpria barra ( \ ) O smbolo $ Aspa simples Aspa dupla

No apndice 01 est disponvel uma lista das funes utilizadas no tratamento de strings.

Arrays

Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde os ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores de qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos inteiros, estes no precisam formar um intervalo contnuo Como a checagem de tipos em PHP dinmica, valores de tipos diferentes podem ser usados como ndices de array, assim como os valores mapeados tambm podem ser de diversos tipos.Exemplo: Equivalentemente, pode-se escrever:

34

Listas As listas so utilizadas em PHP para realizar atribuies mltiplas. Atravs de listas possvel atribuir valores que esto num array para variveis. Vejamos o exemplo:

Exemplo: list($a, $b, $c) = array(a, b, c);

O comando acima atribui valores s trs variveis simultaneamente. bom notar que s so atribudos s variveis da lista os elementos do array que possuem ndices inteiros e no negativos. No exemplo acima as trs atribuies foram bem sucedidas porque ao inicializar um array sem especificar os ndices eles passam a ser inteiros, a partir do zero. Um fator importante que cada varivel da lista possui um ndice inteiro e ordinal, iniciando com zero, que serve para determinar qual valor ser atribudo. No exemplo anterior temos $a com ndice 0, $b com ndice 1 e $c com ndice 2. Vejamos um outro exemplo:$arr = array(1=>um,3=>tres,a=>letraA,2=>dois); list($a,$b,$c,$d) = $arr;

Aps a execuo do cdigo acima temos os seguintes valores:$a $b $c $d == == == == null um dois tres

Devemos observar que varivel $a no foi atribudo valor, pois no array no existe elemento com ndice 0 (zero). Outro detalhe importante que o valor tres foi atribudo varivel $d, e no a $b, pois seu ndice 3, o mesmo que $d na lista. Por fim, vemos que o valor letraA no foi atribudo a elemento algum da lista pois seu ndice no inteiro. Os ndices da lista servem apenas como referncia ao interpretador PHP para realizar as atribuies, no podendo ser acessados de maneira alguma pelo programador. De maneira diferente do array, uma lista no pode ser atribuda a uma varivel, servindo apenas para fazer mltiplas atribuies atravs de um array. No apndice 02 est disponvel uma lista das funes mais comuns para o tratamento de arrays. 35

Objetos Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma varivel.Exemplo: class teste { function nada() { echo nada; } } $vivas = new teste; $vivas -> nada();

A utilizao de objetos ser mais detalhada mais frente.

Booleanos

PHP no possui um tipo booleano, mas capaz de avaliar expresses e retornar true ou false, atravs do tipo integer: usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (geralmente 1) para representar o estado true.

Transformao de tipos

A transformao de tipos em PHP pode ser feita das seguintes maneiras: Coeres

Quando ocorrem determinadas operaes (+, por exemplo) entre dois valores de tipos diferentes, o PHP converte o valor de um deles automaticamente (coero). interessante notar que se o operando for uma varivel, seu valor no ser alterado. O tipo para o qual os valores dos operandos sero convertidos determinado da seguinte forma: Se um dos operandos for float, o outro ser

36

convertido para float, seno, se um deles for integer, o outro ser convertido parainteger.

Exemplo: $vivas = $vivas = $vivas = $vivas =

1; // $vivas a string 1 $vivas + 1; // $vivas o integer 2 $vivas + 3.7;// $vivas o double 5.7 1 + 1.5 // $vivas o double 2.5

Como podemos notar, o PHP converte string para integer oudouble mantendo o valor. O sistema utilizado pelo PHP para converter de strings para

nmeros o seguinte: analisado o incio da string. Se contiver um nmero, ele ser avaliado. Seno, o valor ser 0 (zero); O nmero pode conter um sinal no incio (+ ou -); Se a string contiver um ponto em sua parte numrica a ser analisada, ele ser considerado, e o valor obtido ser double; Se a string contiver um e ou E em sua parte numrica a ser analisada, o valor seguinte ser considerado como expoente da base 10, e o valor obtido ser double;Exemplos: $vivas = 1 $vivas = 1 $vivas = 1 $vivas = 1 $vivas = 1 $vivas = 1

+ + + + + +

10.5; // -1.3e3; // teste10.5; // 10testes; // " 10testes"; "+ 10testes";

$vivas == 11.5 $vivas == -1299 $vivas == 1 $vivas == 11 // $vivas == 11 // $vivas == 1

Transformao explcita de tipos

A sintaxe do typecast de PHP semelhante ao C: basta escrever o tipo entre parenteses antes do valorExemplo: $vivas = 15;

// $vivas integer (15)

37

$vivas = (double) $vivas $vivas = 3.9 $vivas = (int) $vivas

// // // //

$vivas double (15.0) $vivas double (3.9) $vivas integer (3) o valor decimal truncado

Os tipos de cast permitidos so: (int), (integer) muda para integer; muda para string; muda para array; muda para objeto.

(real), (double), (float) muda para float; (string) (array) (object)

Com a funo settype

A funo settype converte uma varivel para o tipo especificado, que pode ser integer, double, string, array ou object.Exemplo: $vivas = 15; settype($vivas,double)

// $vivas integer // $vivas double

38

08. Operadores

Aritmticos

S podem ser utilizados quando os operandos so nmeros (integer ou float). Se forem de outro tipo, tero seus valores convertidos antes da realizao da operao. + * / % adio subtrao multiplicao diviso mdulo

de strings

S h um operador exclusivo para strings: . concatenao

de atribuio

Existe um operador bsico de atribuio e diversos derivados. Sempre retornam o valor atribudo. No caso dos operadores derivados de atribuio, a operao feita entre os dois operandos, sendo atribudo o resultado para o primeiro. A atribuio sempre por valor, e no por referncia.

39

= += -= *= /= %= .=Exemplo:

atribuio simples atribuio com adio atribuio com subtrao atribuio com multiplicao atribuio com diviso atribuio com mdulo atribuio com concatenao

$a = 7; $a += 2; // $a passa a conter o valor 9

bit a bit

Comparam dois nmeros bit a bit. & | ^ ~ > Lgicos Utilizados para inteiros representando valores booleanos and or xor ! && || e lgico ou lgico ou exclusivo no (inverso) e lgico ou lgico e lgico ou lgico ou exclusivo no (inverso) shift left shift right

Existem dois operadores para e e para ou porque eles tm diferentes posies na ordem de precedncia.

Comparao

40

As comparaes so feitas entre os valores contidos nas variveis, e no as referncias. Sempre retornam um valor booleano. == != < > = igual a diferente de menor que maior que menor ou igual a maior ou igual a

Expresso condicional

Existe um operador de seleo que ternrio. Funciona assim:(expressao1)?(expressao2):( expressao3)

o interpretador PHP avalia a primeira expresso. Se ela for verdadeira, a expresso retorna o valor de expresso2. Seno, retorna o valor de expresso3.

de incremento e decremento

++ --

incremento decremento

Podem ser utilizados de duas formas: antes ou depois da varivel. Quando utilizado antes, retorna o valor da varivel antes de increment-la ou decrement-la. Quando utilizado depois, retorna o valor da varivel j incrementado ou decrementado.Exemplos: $a = $b = 10; // $a e $b recebem o valor 10 $c = $a++; // $c recebe 10 e $a passa a ter 11 $d = ++$b; // $d recebe 11, valor de $b j incrementado

41

09. Estruturas de ControleAs estruturas que veremos a seguir so comuns para as linguagens de programao imperativas, bastando, portanto, descrever a sintaxe de cada uma delas, resumindo o funcionamento.

Blocos Um bloco consiste de vrios comandos agrupados com o objetivo de relacion-los com determinado comando ou funo. Em comandos como if, for,while, switch e em declaraes de funes blocos podem ser utilizados para permitir

que um comando faa parte do contexto desejado. Blocos em PHP so delimitados pelos caracteres { e }. A utilizao dos delimitadores de bloco em uma parte qualquer do cdigo no relacionada com os comandos citados ou funes no produzir efeito algum, e ser tratada normalmente pelo interpretador.Exemplo: if ($x == $y) comando1; comando2;

Para que comando2 esteja relacionado ao if preciso utilizar um bloco:if ($x == $y){ comando1; comando2; }

Comandos de seleo

Tambm chamados de condicionais, os comandos de seleo permitem executar comandos ou blocos de comandos com base em testes feitos durante a execuo.

42

if

O mais trivial dos comandos condicionais o if. Ele testa a condio e executa o comando 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 bloco, demarcado por chaves. O else um complemento opcional para o if. Se utilizado, o comando ser executado se a expresso retornar o valor false (zero). Suas duas sintaxes so:if (expresso) comando; else comando; if (expresso): comando; . . . comando; else comando; . . . comando; endif;

A seguir, temos um exemplo do comando if utilizado com else:

43

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 condicionalmente 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 if usados sequencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseifs, ficando essa 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; ]

44

if (expressao1) : comando; . . . comando; [ elseif (expressao2) comando; . . . comando; ] [ else comando; . . . comando; ] endif;

switch

O comando switch atua de maneira semelhante a uma srie de comandos if na mesma expresso. 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 switch. O exemplo seguinte mostra dois trechos de cdigo que fazem a mesma coisa, sendo que o primeiro utiliza uma srie de ifs e o segundo utilizaswitch:

if ($i == 0) print i elseif ($i == print i elseif ($i == print i

igual a zero; 1) igual a um; 2) 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 comando switch testa linha a linha os cases encontrados, e a partir do 45

momento que encontra um valor igual ao da varivel 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. Veremos 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; case arvore: print a rvore bonita; case lampada: print joao apagou a lampada;

}

46

comandos de repetio while O while o comando de repetio (lao) mais simples. Ele testa uma condio e executa um comando, ou um bloco de comandos, at que a condio testada seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas:while () ; while (): ; . . . ; endwhile;

A expresso s testada a cada vez que o bloco de instrues termina, alm do teste inicial. 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 teste 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 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 , como no exemplo:$variavel->funcao1(

A varivel $this Na definio de uma classe, pode-se utilizar a varivel $this, que o prprio objeto. Assim, quando uma classe instanciada em um objeto, e uma funo desse objeto na definio da classe utiliza a varivel $this, essa varivel significa o objeto que estamos utilizando.

63

Como exemplo da utilizao de classes e objetos, podemos utilizar a classe conta, que define uma conta bancria bastante simples, com funes para ver saldo e fazer um crdito.class conta { var $saldo; function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; } } $minhaconta = new conta; $minhaconta->saldo(); // a variavel interna no foi // inicializada, e no contm // valor algum

$minhaconta->credito(50); $minhaconta->saldo(); // retorna 50

SubClasses Uma classe pode ser uma extenso de outra. Isso significa que ela herdar todas as variveis e funes da outra classe, e ainda ter as que forem adicionadas pelo programador. Em PHP no permitido utilizar herana mltipla, ou seja, uma classe pode ser extenso de apenas uma outra.Para criar uma classe extendida, ou derivada de outra, deve ser utilizada a palavra reservada extends, como pode ser visto no exemplo seguinte:class novaconta extends conta { var $num; function numero() { return $this->num; } }

A classe acima derivada da classe conta, tendo as mesmas funes e variveis, com a adio da varivel $numero e a funo numero(). Construtores Um construtor uma funo definida na classe que automaticamente chamada no momento em que a classe instanciada (atravs do operador new). O construtor deve ter o mesmo nome que a classe a que pertence. Veja o exemplo:

64

class conta { var $saldo; function conta () { $this.saldo = 0; } function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; } }

Podemos perceber que a classe conta agora possui um construtor, que inicializa a varivel $saldo com o valor 0. Um construtor pode conter argumentos, que so opcionais, o que torna esta ferramenta mais poderosa. No exemplo acima, o construtor da classe conta pode receber como argumento um valor, que seria o valor inicial da conta. Vale observar que para classes derivadas, o construtor da classe pai no automaticamente herdado quando o construtor da classe derivada chamado.

65

13. Noes de SQLIntroduo Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas sua manipulao. O Departamento de Pesquisas da IBM, desenvolveu a SQL como forma de interface para o sistema de BD relacional denominado SYSTEM R, incio dos anos 70. Em 1986 o American National Standard Institute ( ANSI ), publicou um padro SQL. A SQL estabeleceu-se como linguagem padro Relacional. SQL apresenta uma srie de comandos que permitem a definio dos dados, chamada de DDL (Data Definition Language), composta entre outros pelos comandos Create, que destinado a criao do Banco de Dados, das Tabelas que o compe, alm das relaes existentes entre as tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop. Os comandos da srie DML (Data Manipulation Language), destinados a consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete. Uma subclasse de comandos DML, a DCL (Data Control Language), dispe de comandos de controle como Grant e Revoke. A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar ndices, sem a necessidade de controle individualizado de ndice corrente, algo muito comum nas linguagens de manipulao de dados do tipo registro a registro. Outra caracterstica muito importante disponvel em SQL sua capacidade de construo de vises, que so formas de visualizarmos os dados na forma de listagens independente das tabelas e organizao lgica dos dados. Outra caracterstica interessante na linguagem SQL a capacidade que dispomos de cancelar uma srie de atualizaes ou de as gravarmos, depois de iniciarmos uma seqncia de atualizaes. Os comandos Commit e Rollback so responsveis por estas facilidades. de Banco de Dados

66

Devemos notar que a linguagem SQL consegue implementar estas solues, somente pelo fato de estar baseada em Banco de Dados, que garantem por si mesmo a integridade das relaes existentes entre as tabelas e seus ndices.

Estrutura das tabelas

Comando Create Este comando permite a criao de tabelas no banco de dados ou mesmo de sua criao. Sintaxe:CREATE DATABASE < nome_db >;

onde: nome_db - indica o nome do Banco de Dados a ser criado. Sintaxe:CREATE TABLE < nome_tabela > ( nome_atributo1 < tipo > [ NOT NULL ], nome_atributo2 < tipo > [ NOT NULL ], ...... nome_atributoN < tipo > [ NOT NULL ] ) ;

onde: nome_table - indica o nome da tabela a ser criada. nome_atributo - indica o nome do campo a ser criado na tabela. tipo - indica a definio do tipo de atributo ( integer(n), char(n), ... ).

Comando Drop Este comando elimina a definio da tabela, seus dados e referncias. Sintaxe:DROP TABLE < nome_tabela > ;

67

Comando Alter Este comando permite inserir/eliminar atributos nas tabelas j existentes. Comando:ALTER TABLE < nome_tabela > nome_atributo1 < tipo > nome_atributoN < tipo > ) ; ADD / DROP ( [ NOT NULL ], [ NOT NULL ]

Manipulando dados das tabelas Comando SELECT Permite recuperar informaes existentes nas tabelas. Sintaxe bsica:SELECT [DISTINCT] expressao [AS nom-atributo] [FROM from-list] [WHERE condicao] [ORDER BY attr_name1 [ASC | DESC ]]

onde: DISTINCT : Para eliminar linhas duplicadas na sada. Expressao: Define os dados que queremos na sada, normalmente uma ou mais colunas de uma tabela da lista FROM. AS nom-atributo : um alias para o nome da coluna, exemplo: FROM : lista das tabelas na entrada WHERE : critrios da seleo ORDER BY : Critrio de ordenao das tabelas de sada. ASC ordem ascendente, DESC ordem descendente

Exemplo:SELECT cidade, estado from brasil where populacao > 100000;

68

Comando INSERT Adiciona um ou vrios registros a uma tabela. Isto referido como consulta anexao. Sintaxe bsicaINSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...])

A instruo INSERT INTO tem as partes abaixo: Destino- O nome da tabela ou consulta em que os registros devem ser anexados. campo1, campo2 - Os nomes dos campos aos quais os dados devem ser anexados valor1, valor2 - Os valores para inserir em campos especficos do novo registro. Cada valor inserido no campo que corresponde posio do valor na lista: Valor1 inserido no campo1 do novo registro, valor2 no campo2 e assim por diante. Voc deve separar os valores com uma vrgula e colocar os campos de textos entre aspas (" ").

Comando UPDATE

Cria uma consulta atualizao que altera os valores dos campos em uma tabela especificada com base em critrios especficos. Sintaxe:UPDATE tabela SET campo1 = valornovo, ... WHERE critrio;

Onde: Tabela - O nome da tabela cujos os dados voc quer modificar. Valornovo - Uma expresso que determina o valor a ser inserido em um campo especfico nos registros atualizados. critrio - Uma expresso que determina quais registros devem ser atualizados. S os registros que satisfazem a expresso so atualizados.

69

UPDATE especialmente til quando voc quer alterar muitos registros ou quando os registros que voc quer alterar esto em vrias tabelas. Voc pode alterar vrios campos ao mesmo tempo. UPDATE no gera um conjunto de resultados. Se voc quiser saber quais resultados sero alterados, examine primeiro os resultados da consulta seleo que use os mesmos critrios e ento execute a consulta atualizao.

Comando DELETE Remove registros de uma ou mais tabelas listadas na clusula FROM que satisfaz a clusula WHERE. SintaxeDELETE [tabela.*] FROM tabela WHERE critrio

onde: tabela.* - O nome opcional da tabela da qual os registros so excludos. tabela - O nome da tabela da qual os registros so excludos. critrio - Uma expresso que determina qual registro deve ser excludo. DELETE especialmente til quando voc quer excluir muitos registros. Para eliminar uma tabela inteira do banco de dados, voc pode usar o mtodo Execute com uma instruo DROP. Entretanto, se voc eliminar a tabela, a estrutura perdida. Por outro lado, quando voc usa DELETE, apenas os dados so excludos. A estrutura da tabela e todas as propriedades da tabela, como atributos de campo e ndices, permanecem intactos. Voc pode usar DELETE para remover registros de tabelas que esto em uma relao um por vrios com outras tabelas. Operaes de excluso em cascata fazem com que os registros das tabelas que esto no lado "vrios" da relao sejam excludos quando os registros correspondentes do lado "um" da relao so excludos na consulta. Por exemplo, nas relaes entre as tabelas Clientes e Pedidos, a tabela Clientes est do lado "um" e a tabela Pedidos est no lado "vrios" da relao. Excluir um registro em Clientes faz com que os registros correspondentes em Pedidos sejam excludos se a opo de excluso em cascata for especificada.

70

O DELETE exclui registros inteiros e no apenas dados em campos especficos. Se voc quiser excluir valores de um campo especfico, crie uma consulta atualizao que mude os valores para Null. Aps remover os registros usando uma consulta excluso, voc no poder desfazer a operao. Se quiser saber quais arquivos foram excludos, primeiro examine os resultados de uma consulta seleo que use o mesmo critrio e ento, execute a consulta excluso. Mantenha os backups de seus dados. Se voc excluir os registros errados, poder recuper-los a partir dos seus backups.

71

14. Acessando o mySQL via PHPEstabelecendo conexes Para acessar bases de dados num servidor mySQL, necessrio antes estabelecer uma conexo. Para isso, deve ser utilizado o comando mysql_connect, ou o mysql_pconnect. A diferena entre os dois comandos que o mysql_pconnect estabelece uma conexo permanente, ou seja, que no encerrada ao final da execuo do script. As assinaturas dos dois comandos so semelhantes, como pode ser verificado a seguir:int mysql_connect(string [host[:porta]] , string [login] , string [senha] ); int mysql_pconnect(string [host[:porta]] , string [login] , string [senha] );

O valor de retorno um inteiro que identifica a conexo, ou falso se a conexo falhar. Antes de tentar estabelecer uma conexo, o interpretador PHP verifica se j existe uma conexo estabelecida com o mesmo host, o mesmo login e a mesma senha. Se existir, o identificador desta conexo retornado. Seno, uma nova conexo criada. Uma conexo estabelecida com o comando mysql_connect encerrada ao final da execuo do script. Para encerr-la antes disso deve ser utilizado o comandomysql_close, que tem a seguinte assinatura:

int mysql_close(int [identificador da conexo] );

Se o identificador no for fornecido, a ltima conexo estabelecida ser encerrada. IMPORTANTE: o comando mysql_close no encerra conexes estabelecidas com o comando mysql_pconnect.

Selecionando a base de dados Depois de estabelecida a conexo, preciso selecionar a base de dados a ser utilizada, atravs do comando mysql_select_db, que segue o seguinte modelo:int mysql_select_db(string base, int [conexao] );

72

Novamente, se o identificador da conexo no for fornecido, a ltima conexo estabelecida ser utilizada.

Realizando consultas Para executar consultas SQL no mySQL, utiliza-se o comandomysql_query, que tem a seguinte assinatura:

int mysql_query(string query, int [conexao] );

Onde query a expresso SQL a ser executada, sem o ponto-e-vrgula no final, e conexao o identificador da conexo a ser utilizada. A consulta ser executada na base de dados selecionada pelo comando mysql_select_db. bom lembrar que uma consulta no significa apenas um comando SELECT. A consulta pode conter qualquer comando SQL aceito pelo banco. O valor de retorno falso se a expresso SQL for incorreta, e diferente de zero se for correta. No caso de uma expresso SELECT, as linhas retornadas so armazenadas numa memria de resultados, e o valor de retorno o identificador do resultado. Alguns comandos podem ser realizados com esse resultado: Apagando o resultadoint mysql_free_result(int result);

O comando mysql_free-result deve ser utilizado para apagar da memria o resultado indicado.

Nmero de linhasint mysql_num_rows(int result);

O comando mysql_num_rows retorna o nmero de linhas contidas num resultado.

73

Utilizando os resultados Existem diversas maneiras de ler os resultados de uma query SELECT. As mais comuns sero vistas a seguir:int mysql_result(int result, int linha, mixed [campo] );

Retorna o contedo de uma clula da tabela de resultados.result o identificador do resultado; linha o nmero da linha, iniciado por 0; campo uma string com o nome do campo, ou um nmero

correspondente ao nmero da coluna. Se foi utilizado um alias na consulta, este deve ser utilizado no comando mysql_result. Este comando deve ser utilizado apenas para resultados pequenos. Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:array mysql_fetch_array(int result);

L uma linha do resultado e devolve um array, cujos ndices so os nomes dos campos. A execuo seguinte do mesmo comando ler a prxima linha, at chegar ao final do resultado.array mysql_fetch_row(int result);

Semelhante ao comando anterior, com a diferena que os ndices do array so numricos, iniciando pelo 0 (zero).

Alterando o ponteiro de um resultado

int mysql_data_seek(int result, int numero);

Cada resultado possui um ponteiro, que indica qual ser a prxima linha lida com o comando mysql_fetch_row (ou mysql_fetch_array). Para

74

alterar a posio indicada por esse ponteiro deve ser utilizada a funomysql_data_seek, sendo que o nmero da primeira linha de um resultado zero.

75

15. Acessando o PostgreSQL via PHPEstabelecendo conexes Para acessar bases de dados num servidor Postgres, necessrio antes estabelecer uma conexo. Para isso, deve ser utilizado o comando pg_connect, ou opg_pconnect. A diferena entre os dois comandos que o pg_pconnect estabelece

uma conexo permanente, ou seja, que no encerrada ao final da execuo do script. As assinaturas dos dois comandos so semelhantes, como pode ser verificado a seguir:int pg_connect(string host, string porta, string opcoes, string tty, string db); int pg_pconnect(string host, string porta, string opcoes, string tty, string db);

O valor de retorno um inteiro que identifica a conexo, ou falso se a conexo falhar. Uma conexo estabelecida com o comando pg_connect encerrada ao final da execuo do script. Para encerr-la antes disso deve ser utilizado o comandopg_close, que tem a seguinte assinatura:

int pg_close(int identificador da conexo );

IMPORTANTE:

o

comando

pg_close

no

encerra

conexes

estabelecidas com o comando pg_pconnect. Os comandos pg_connect e pg_pconnect tambm podem ser utilizados da seguinte forma:pg_connect("dbname=db port=n host=localhost options=opcoes user=usuario password=senha"); tty=tty

Realizando consultas Para executar consultas SQL no Postgres, utiliza-se o comando pg_exec, que tem a seguinte assinatura:int pg_exec(int conexao, string query );

Onde query a expresso SQL a ser executada, sem o ponto-e-vrgula no final, e conexao o identificador da conexo a ser utilizada. A consulta ser executada na base de dados selecionada quando for efetuada a conexo com o banco. Para saber 76

qual a base de dados selecionada, basta utilizar a funo string pg_dbname, que tem a seguinte assinatura:string pg_dbname(int conexo);

bom lembrar que uma consulta no significa apenas um comando SELECT. A consulta pode conter qualquer comando SQL aceito pelo banco. O valor de retorno falso se a expresso SQL for incorreta, e diferente de zero se for correta. No caso de uma expresso SELECT, as linhas retornadas so armazenadas numa memria de resultados, e o valor de retorno o identificador do resultado. Alguns comandos podem ser realizados com esse resultado:

Verificando o erro na execuo de uma query Para ter acesso mensagem de erro no caso de falha na execuo de uma query SQl, basta utilizar o comando pg_errormessage():string pg_errormessage(int connection);

Apagando o resultadoint pg_freeresult(int result);

O comando pg_freeresult deve ser utilizado para apagar da memria o resultado indicado. No PHP 4, este comando tornou-se obsoleto, j que o interpretador trata de apagar o resultado automaticamente em caso de no ser mais utilizado.

Nmero de linhasint pg_numrows(int result);

O comando pg_numrows retorna o nmero de linhas contidas num resultado.

Utilizando os resultados Existem diversas maneiras de ler os resultados de uma query SELECT. As mais comuns sero vistas a seguir:

77

int pg_result(int result, int linha, mixed [campo] );

Retorna o contedo de uma clula da tabela de resultados.result o identificador do resultado; linha o nmero da linha, iniciado por 0; campo uma string com o nome do campo, ou um nmero

correspondente ao nmero da coluna. Se foi utilizado um alias na consulta, este deve ser utilizado no comando pg_result. Este comando deve ser utilizado apenas para resultados pequenos. Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:array pg_fetch_array(int result, int linha);

L uma linha do resultado e devolve um array, cujos ndices so os nomes dos campos. O ndice das linhas iniciado por zero.array pg_fetch_row(int result, int linha);

Semelhante ao comando anterior, com a diferena que os ndices do array so numricos, iniciando pelo 0 (zero).

78

16. Utilizando headersO comando header permite enviar cabealhos html para o cliente. Deve ser utilizado por usurios que conheam a funo de cada header que pode ser enviado. No pode ser enviado depois de algum texto. veja o seguinte exemplo: ...

O cdigo acima causar um erro, j que tentou-se enviar um header depois de ter sido enviado um texto(\n). A sintaxe do comando header bastante simples:int header(string header);

Algumas utilizaes do header so://redirecionar para outra pgina: header("Location: http://www.php.net"); // Definir o script como uma mensagem de erro: header("http/1.0 404 Not Found"); // Definir a expirao da pgina: header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Pragma: no-cache"); // HTTP/1.0

Para obter uma lista completa dos headers HTTP, visite o seguinte endereo:http://www.w3.org/Protocols/rfc2068/rfc2068

79

17. Utilizando cookiesO que so Cookies so variveis gravadas no cliente(browser) por um determinado site. Somente o site que gravou o cookie pode ler a informao contida nele. Este recurso muito til para que determinadas informaes sejam fornecidas pelo usurio apenas uma vez. Exemplos de utilizao de cookies so sites que informam a quantidade de vezes que voc j visitou, ou alguma informao fornecida numa visita anterior. Existem cookies persistentes e cookies de sesso. Os persistentes so aqueles gravados em arquivo, e que permanecem aps o browser ser fechado, e possuem data e hora de expirao. Os cookies de sesso no so armazenados em disco e permanecem ativos apenas enquanto a sesso do browser no for encerrada. Por definio, existem algumas limitaes para o uso de cookies, listadas a seguir: 300 cookies no total 4 kilobytes por cookie. 20 cookies por servidor ou domnio.

Gravando cookies Para gravar cookies no cliente, deve ser utilizada a funo setcookie, que possui a seguinte assinatura:int setcookie(string nome, string valor, int exp, string path, string dominio, int secure);

onde: nome: nome do cookie; valor: valor armazenado no cookie; exp: data de expirao do cookie (opcional), no formato Unix. Se no for definida, o cookie ser de sesso; path: path do script que gravou o cookie; dominio: domnio responsvel pelo cookie;

80

secure: se tiver valor 1, indica que o cookie s pode ser transmitido por uma conexo segura (https). Observaes: Um cookie no pode ser recuperado na mesma pgina que o gravou, a menos que esta seja recarregada pelo browser. Mltiplas chamadas funo setcookie sero executadas em ordem inversa; Cookies s podem ser gravados antes do envio de qualquer informao para o cliente. Portanto todas as chamadas funo setcookie devem ser feitas antes do envio de qualquer header ou texto.

Lendo cookies gravados Os cookies lidos por um script PHP ficam armazenados em duas variveis. no array $HTTP_COOKIE_VARS[], tendo como ndice a string do nome do cookie, e numa varivel cujo nome o mesmo do cookie, precedido pelo smbolo $. Exemplo:Um cookie que foi gravado numa seguinte comando: setcookie(teste, meu cookie); Pode ser lida pela varivel $HTTP_COOKIE_VARS[teste] ou pela varivel $teste pgina anterior pelo

81

18. Manipulando arquivosAtravs do PHP possvel ter acesso aos arquivos do sistema, e at arquivos remotos. A seguir veremos alguns dos comandos utilizados para manipular arquivos no PHP. Copiando Arquivos Para fazer uma cpia de arquivo utilizando PHP basta utilizar a funo copy, desde que o usurio tenha as permisses necessrias para isso. A assinatura da funo copy a seguinte:int copy(string origem string destino);

Lembrando que as strings contendo origem e destino devem conter os caminhos completos. Retorna false caso a cpia no seja realizada.

Verificando o tamanho de um arquivo

A funo filesize pode ser bastante til na criao de um script que liste o contedo de um diretrio, mas tambm utilizada em casos como a funo fread, que ser vista mais adiante.int filesize(string arquivo);

Esta funo retorna um inteiro com o tamanho do arquivo, em bytes, ou false em caso de erro.

Verificando se um arquivo existe

Para evitar erros em trata