aplicações web de php

122
Aplicações Web com PHP

Upload: beni-elcapo

Post on 04-Sep-2015

254 views

Category:

Documents


12 download

DESCRIPTION

Aplicações Web de PHP na conteudo web

TRANSCRIPT

  • Aplicaes Web com PHP

  • Curso de Aplicaoes WEB em PHP

    Autor:

    Mauricio Vivas

    Copyright (c) 2000, Mauricio Vivas de Souza Barreto. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

    Copyright (c) 2000, Mauricio Vivas de Souza Barreto E garantida a permisso para copiar, distribuir e/ou modificar este documento sob os termos da GNU Free Documentation License, verso 1.1 ou qualquer outra verso posterior publicada pela Free Software Foundation; sem obrigatoriedade de Sees Invariantes na abertura e ao final dos textos.

    Uma copia da licena deve ser includa na seo intitulada GNU Free Documentation License.

    ii

  • iii

  • ndice

    NDICE..........................................................................................................................IV

    NOTAS DO AUTOR......................................................................................................12

    01. INTRODUO.........................................................................................................14

    FUNCIONAMENTO BSICO DO PROTOCOLO HTTP...................................14CLIENT-SIDE SCRIPTS............................................................................15SERVER-SIDE SCRIPTS...........................................................................15O QUE PHP?.......................................................................................16O QUE PODE SER FEITO COM PHP?.......................................................17COMO SURGIU A LINGUAGEM PHP?......................................................17

    02. ENVIANDO DADOS PARA O SERVIDOR HTTP.............................................19

    O MTODO GET....................................................................................19HEADERS...............................................................................................20O MTODO POST..................................................................................21UTILIZANDO GET E POST....................................................................21

    03. FORMULRIOS HTML.........................................................................................22

    DEFININDO UM FORMULRIO................................................................22A TAG .....................................................................................22CAMPO DE TEXTO.................................................................................23

    Parmetros:.....................................................................................23CAMPO DE TEXTO COM MSCARA........................................................23

    Parmetros:.....................................................................................23CHECKBOX............................................................................................24

    Parmetros:.....................................................................................24RADIO BUTTON.....................................................................................24

    Parmetros:.....................................................................................24SUBMIT BUTTON....................................................................................24

    Parmetros:.....................................................................................25RESET BUTTON......................................................................................25

    Parmetros:.....................................................................................25BUTTON.................................................................................................25

    Parmetros:.....................................................................................25TEXTAREA.............................................................................................25

    Parmetros:.....................................................................................25SELECT..................................................................................................26

    Parmetros:.....................................................................................26UPLOAD DE ARQUIVOS..........................................................................26

    Parmetros:.....................................................................................2704. INSTALAO E CONFIGURAO EM AMBIENTE WINDOWS................28

    SERVIDOR APACHE................................................................................28PHP.......................................................................................................29MYSQL..................................................................................................30

    05. INSTALAO E CONFIGURAO EM AMBIENTE LINUX REDHAT.....32

    iv

  • (DISPONVEL NA PRXIMA VERSO).....................................................3206. SINTAXE BSICA..................................................................................................33

    DELIMITANDO O CDIGO PHP...............................................................33SEPARADOR DE INSTRUES.................................................................33NOMES DE VARIVEIS...........................................................................34COMENTRIOS.......................................................................................34

    Comentrios de uma linha:..............................................................34Comentrios de mais de uma linha:.................................................34

    IMPRIMINDO CDIGO HTML...................................................................35CRIANDO UM SCRIPT DE EXEMPLO........................................................35

    07. TIPOS........................................................................................................................37

    TIPOS SUPORTADOS...............................................................................37Inteiros (integer ou long)..................................................................37Nmeros em Ponto Flutuante (double ou float)...............................38Strings...............................................................................................38

    Significado................................................................................................................39

    Arrays...............................................................................................39Listas..............................................................................................................................40

    Objetos..............................................................................................41Booleanos.........................................................................................41

    TRANSFORMAO DE TIPOS..................................................................41Coeres...........................................................................................41Transformao explcita de tipos.....................................................42Com a funo settype........................................................................43

    08. OPERADORES.........................................................................................................44

    ARITMTICOS.........................................................................................44DE STRINGS............................................................................................44BIT A BIT................................................................................................44DE ATRIBUIO......................................................................................44LGICOS................................................................................................45COMPARAO.......................................................................................45EXPRESSO CONDICIONAL.....................................................................46DE INCREMENTO E DECREMENTO...........................................................46DE ERRO.................................................................................................47ORDEM DE PRECEDNCIA.......................................................................47

    09. ESTRUTURAS DE CONTROLE...........................................................................49

    BLOCOS.................................................................................................49COMANDOS DE SELEO.......................................................................49

    if........................................................................................................49switch................................................................................................52

    COMANDOS DE REPETIO....................................................................53while.................................................................................................53do... while.........................................................................................54for.....................................................................................................54foreach..............................................................................................55

    QUEBRA DE FLUXO................................................................................56Break.................................................................................................56

    v

  • Continue...........................................................................................5610. FUNES.................................................................................................................58

    DEFININDO FUNES.............................................................................58VALOR DE RETORNO..............................................................................58ARGUMENTOS........................................................................................59

    Passagem de parmetros por referncia..........................................59Argumentos com valores pr-definidos (default).............................60

    CONTEXTO.............................................................................................61ESCOPO..................................................................................................61FUNES VARIVEIS.............................................................................62

    11. VARIVEIS E CONSTANTES..............................................................................64

    DECLARAO DE UMA VARIVEL.........................................................64O MODIFICADOR STATIC........................................................................64VARIVEIS VARIVEIS..........................................................................65VARIVEIS ENVIADAS PELO NAVEGADOR.............................................65

    URLencode.......................................................................................66Utilizando arrays..............................................................................66

    VARIVEIS DE AMBIENTE......................................................................67VERIFICANDO O TIPO DE UMA VARIVEL..............................................67

    Funo que retorna o tipo da varivel.............................................68Funes que testam o tipo da varivel.............................................68

    DESTRUINDO UMA VARIVEL................................................................68VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR............................69

    A funo isset....................................................................................69A funo empty.................................................................................69

    CONSTANTES PR-DEFINIDAS................................................................69DEFININDO CONSTANTES.......................................................................70

    12. CLASSES E OBJETOS...........................................................................................71

    CLASSE..................................................................................................71OBJETO..................................................................................................71A VARIVEL $THIS................................................................................71SUBCLASSES..........................................................................................72CONSTRUTORES.....................................................................................72

    13. NOES DE SQL....................................................................................................74

    INTRODUO.........................................................................................74ESTRUTURA DAS TABELAS....................................................................75COMANDO CREATE................................................................................75

    Comando Drop.................................................................................75Comando Alter..................................................................................76

    MANIPULANDO DADOS DAS TABELAS...................................................76Comando SELECT............................................................................76Comando INSERT............................................................................77Comando UPDATE..........................................................................77Comando DELETE...........................................................................78

    14. ACESSANDO O MYSQL VIA PHP.......................................................................80

    ESTABELECENDO CONEXES.................................................................80SELECIONANDO A BASE DE DADOS........................................................80

    vi

  • REALIZANDO CONSULTAS......................................................................81Apagando o resultado.......................................................................81Nmero de linhas..............................................................................81Utilizando os resultados...................................................................82Alterando o ponteiro de um resultado..............................................82

    15. ACESSANDO O POSTGRESQL VIA PHP..........................................................84

    ESTABELECENDO CONEXES.................................................................84REALIZANDO CONSULTAS......................................................................84

    Verificando o erro na execuo de uma query.................................85Apagando o resultado.......................................................................85Nmero de linhas..............................................................................85Utilizando os resultados...................................................................85

    16. UTILIZANDO HEADERS......................................................................................87

    FUNO HEADERS_SENT........................................................................87BOOLEAN HEADERS_SENT (VOID);......................................................................87

    17. UTILIZANDO COOKIES.......................................................................................88

    O QUE SO.............................................................................................88GRAVANDO COOKIES.............................................................................88LENDO COOKIES GRAVADOS..................................................................89

    18. MANIPULANDO ARQUIVOS...............................................................................90

    COPIANDO ARQUIVOS...........................................................................90VERIFICANDO O TAMANHO DE UM ARQUIVO........................................90VERIFICANDO SE UM ARQUIVO EXISTE..................................................90LIMPANDO O CACHE..............................................................................91ABRINDO ARQUIVOS PARA LEITURA E/OU ESCRITA...............................91LENDO DE UM ARQUIVO........................................................................93ESCREVENDO EM UM ARQUIVO.............................................................93EXEMPLO...............................................................................................93UPLOADS COM FORMULRIOS HTML...................................................94

    19. ENVIANDO E-MAIL...............................................................................................96

    20. ALGUMAS FUNES TEIS...............................................................................97

    CLASS_EXISTS E FUNCTION_EXISTS......................................................97DATE.....................................................................................................97NUMBER_FORMAT..................................................................................98SET_TIME_LIMIT....................................................................................98

    21. BIBLIOGRAFIA E REFERNCIAS.....................................................................99

    APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS.....................100

    FUNES RELACIONADAS A HTML....................................................100htmlspecialchars.............................................................................100htmlentities.....................................................................................100nl2br...............................................................................................100get_meta_tags.................................................................................101strip_tags........................................................................................101urlencode........................................................................................101

    vii

  • urldecode........................................................................................102FUNES RELACIONADAS A ARRAYS..................................................102

    Implode e join.................................................................................102split.................................................................................................102explode............................................................................................103

    COMPARAES ENTRE STRINGS..........................................................103similar_text.....................................................................................103strcasecmp......................................................................................103strcmp.............................................................................................104strstr................................................................................................104stristr...............................................................................................104strpos..............................................................................................104strrpos.............................................................................................104

    FUNES PARA EDIO DE STRINGS...................................................105chop................................................................................................105ltrim................................................................................................105trim.................................................................................................105strrev...............................................................................................105strtolower........................................................................................106strtoupper.......................................................................................106ucfirst..............................................................................................106ucwords...........................................................................................106str_replace......................................................................................107

    FUNES DIVERSAS.............................................................................107chr...................................................................................................107ord ..................................................................................................107echo ................................................................................................107print ...............................................................................................107strlen ..............................................................................................108

    APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS......................109

    FUNES GENRICAS..........................................................................109Array...............................................................................................109range...............................................................................................109shuffle.............................................................................................110sizeof...............................................................................................110

    FUNES DE NAVEGAO...............................................................110reset................................................................................................110end..................................................................................................110next.................................................................................................111prev.................................................................................................111pos...................................................................................................111key...................................................................................................111each.................................................................................................111

    FUNES DE ORDENAO...................................................................112sort..................................................................................................112rsort................................................................................................112asort................................................................................................113arsort..............................................................................................113ksort................................................................................................113usort................................................................................................113

    viii

  • uasort..............................................................................................113uksort..............................................................................................114

    APNDICE 03 TIPOS SUPORTADOS PELO MYSQL.......................................115

    NUMRICOS.........................................................................................115DATA E HORA......................................................................................115STRINGS...............................................................................................115

    GNU FREE DOCUMENTATION LICENSE...........................................................117

    0. PREAMBLE ..................................................................................1171. APPLICABILITY AND DEFINITIONS ......................................1172. VERBATIM COPYING ................................................................1183. COPYING IN QUANTITY ...........................................................1184. MODIFICATIONS ........................................................................1195. COMBINING DOCUMENTS .......................................................1206. COLLECTIONS OF DOCUMENTS ............................................1217. AGGREGATION WITH INDEPENDENT WORKS ...................1218. TRANSLATION ............................................................................121

    ix

  • x

  • Notas do autor

    Este 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.

    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. Me avise, informando a URL do site (s por curiosidade minha);

    2. Lembre-se que o autor do documento sou eu. 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.

    12

  • Se houver alguma informao incorreta, peo que me informem por e-

    mail. Se tiverem dvidas sobre temas tratados aqui, ou at sobre os ainda no presentes

    neste documento, entrem em contato comigo por e-mail. s vezes fico meio atarefado

    no trabalho, e acabo ficando sem responder alguns e-mails. Pode insistir que no h

    problema . 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].

    13

  • 01. Introduo

    Funcionamento bsico do protocolo http

    O objetivo deste trecho explicar sem entrar muito em detalhes o que

    acontece enquanto estamos navegando na World Wide Web, e mostrar algumas

    peculiaridades do protocolo http.

    Quando digitamos um endereo (URL) no navegador ou clicamos num

    link, o navegador far uma requisio ao servidor http do tipo GET (ver captulo 02).

    Essa requisio ter algumas linhas de cabealho (headers), e receber como resposta

    um arquivo, tambm com linhas de cabealho, que geralmente uma pgina no formato

    html. Se essa pgina contiver uma ou mais imagens (tag ), ser feita mais uma

    requisio para cada imagem.

    A maneira que o navegador tem de identificar se a resposta requisio

    uma pgina html, um arquivo txt, uma imagem, um documento pdf, ou qualquer outro

    formato atravs de um header de resposta chamado Content-type. Atravs do

    contedo desta linha possvel identificar o tipo de arquivo (ver mais no captulo 16).

    Assim que o arquivo de resposta enviado a conexo encerrada. Isso

    faz com que cada nova pgina gere uma nova requisio completamente independente

    da anterior, o que impede de haver uma identificao por parte do servidor da origem da

    requisio. Sem artifcios seria impossvel fazer uma loja virtual, por exemplo, pois no

    momento de pagar a compra o servidor no saberia quais os itens j selecionados, por

    no haver ligao entre a requisio feita para selecionar o item e a requisio feita para

    pagar a compra. O principal artifcio usado para isso o cookie (captulo 17), que tem a

    funo de enviar uma identificao junto com cada requisio, tornando possvel a

    associao entre as requisies.

    Um outro problema do protocolo http que o servidor s pode enviar

    informaes quando h uma solicitao. Ele nunca envia automaticamente informaes

    para o navegador, e por isso no pode validar dados digitados sem que os mesmos sejam

    enviados com uma requisio. A soluo para isso utilizar client-side scripts.

    14

  • 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.

    O cliente (navegador) no capaz de diferenciar pginas estticas de

    pginas dinmicas, a no ser que o script gerador da pgina dinmica envie alguma

    informao desse tipo.

    15

  • 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

    16

  • quando o programa est lidando com senhas ou qualquer tipo de informao

    confidencial.

    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, MS-SQL

    Server, 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

    17

  • formulrios HTML (Form Interpreter). Ele combinou os scripts do pacote Personal

    Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que

    cresceu bastante, e as pessoas passaram a contribuir com o projeto.

    Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000

    sites pelo mundo, e em meados de 1997 esse 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, chamada de PHP:

    Hypertext Preprocessor.

    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.

    18

  • 02. Enviando Dados para o Servidor HTTP

    Programar 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 servidor 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 80Trying 200.241.59.16...Connected to www.guia-aju.com.br.Escape character is '^]'.GET /index.php3(... pgina solicitada ...)Connection closed by foreign host.

    19

  • 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 80Trying 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.

    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.

    20

  • 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 80Trying 200.241.59.16...Connected to www.guia-aju.com.br.Escape character is '^]'.POST /index.php3Accept */*Content-type: application/x-www-form-urlencodedContent-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.

    21

  • 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 menos dois

    22

  • 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;

    23

  • 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

    24

  • 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.

    TextArea

    texto

    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;

    25

  • 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

    26

  • 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.

    27

  • 04. Instalao e configurao em ambiente windows

    Servidor 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. Para usurios do

    Windows 95 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 opo

    DocumentRoot. 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

    Para executar o servidor Apache, basta ir ao diretrio onde foi instalado e

    digitar Apache. Na primeira execuo recomendvel fazer isso pelo prompt do

    DOS, para verificar qualquer mensagem de erro. Um erro comum ocorre na linha

    ServerName, que deve ser configurada com o endereo ip da mquina.

    ServerName 192.168.1.1

    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.

    28

  • PHP

    O PHP pode ser conseguido em www.php.net, e sua instalao tambm

    simples. Atualmente existem duas opes de download: a primeira no formato

    padro de instaladores do Windows, e neste caso no necessrio explicar, j que o

    padro citado bastante simples. Para quem gosta de sujar as mos, existe a opo

    de download dos arquivos em formato zip, que necessitam de configurao manual.

    Veremos a seguir os passos necessrios para isso:

    Descompactar os arquivos para algum diretrio (no nosso exemplo,

    c:\php)

    Renomear o arquivo de configurao. O arquivo php.ini-dist deve

    ser renomeado (ou copiado) para php.ini. Depois disso, o arquivo pode ser editado,

    bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os

    mdulos (c:\php). Veja o exemplo:

    extension_dir = c:\php

    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=php_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 /php/ "c:/php/" AddType application/x-httpd-php .php4 .phpAction application/x-httpd-php "/php/php.exe"

    A primeira linha cria um atalho (chamado de /php/) para o diretrio onde

    est o PHP. A Instruo ScriptAlias cria no Apache um atalho vlido apenas para

    execuo de programas.

    A segunda linha cria um tipo para o PHP, associando todos os arquivos

    com as extenses .php4 e .php ao interpretador PHP, aqui chamado de

    application/x-httpd-php.

    A terceira linha define que o executvel do interpretador PHP, chamado

    pelo Apache de application/x-httpd-php, o /php/php.exe. Observe que o

    29

  • diretrio o mesmo definido na linha acima, e na verdade um atalho para o arquivo

    c:/php/php.exe.

    Depois de salvar o arquivo, podemos testar se a instalao do PHP foi

    bem sucedida. A melhor maneira criar um arquivo chamado teste.php e salvar no

    diretrio raiz (DocumentRoot) do servidor Apache. O arquivo deve conter a seguinte

    informao:

    Acessando a pgina atravs do servidor

    (http://localhost/teste.php), devemos ter como resultado uma listagem de

    todas as configuraes do PHP, incluindo o mdulo mysql, que foi definido como ativo

    no arquivo php.ini.

    mySQL

    O banco de dados mySQL pode ser conseguido em

    http://www.mysql.com/. Sua instalao tambm bastante simples, tambm no

    modelo de instalao de qualquer aplicativo para Windows.

    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 PRIVILEGESFILERELOADALTER

    INDEX SELECT CREATE INSERT

    SHUTDOWN DELETE PROCESS UPDATE

    DROP REFERENCES USAGE

    30

  • Cada palavra representa um tipo de acesso (s) coluna(s), tabela(s) ou

    base(s) de dados listadas logo depois da clusula ON.

    usuario 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. Utilizando este mtodo preciso reiniciar o servidor, ou executar o

    comando FLUSH PRIVILEGES, para que as alteraes tenham efeito.

    31

  • 05. Instalao e configurao em ambiente linux RedHat

    (Disponvel na prxima verso)

    32

  • 06. Sintaxe Bsica

    Delimitando 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 tag 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 recomenda-

    se o uso sempre.

    33

  • 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.

    34

  • 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;

    Criando um script de exemplo

    O exemplo abaixo demonstra como funciona um script executado no

    servidor (no nosso caso, PHP). Vamos criar o arquivo hello.php e coloca-lo no

    diretrio de documentos do Apache, com o seguinte contedo:

    35

  • Ao acessar o arquivo atravs do servidor Apache

    (http://localhost/hello.php), e utilizando a opo visualizar cdigo fonte do

    browser, veremos o seguinte:

    Hello World

    Hello World

    Isso demonstra que o script executado no servidor e s o resultado

    enviado para o browser, impedindo que o usurio veja o contedo do script.

    36

  • 07. Tipos

    Tipos Suportados

    PHP suporta os seguintes tipos de dados:

    Inteiro

    Ponto flutuante

    String

    Array

    Objeto

    Booleano

    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; # inteiro positivo na base decimal$vivas = -234; # inteiro negativo na base decimal$vivas = 0234; # inteiro na base octal-simbolizado pelo 0

    # equivale a 156 decimal$vivas = 0x34; # inteiro na base hexadecimal(simbolizado

    # pelo 0x) equivale a 52 decimal.

    37

  • 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.

    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).

    38

  • A tabela seguinte lista os caracteres de escape:

    Sintaxe Significado\n Nova linha\r Retorno de carro (semelhante a \n)\t 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:

    39

  • 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 == null$b == um$c == dois$d == 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.

    40

  • 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 no captulo 12.

    Booleanos

    O tipo booleano foi implementado na verso 4 do PHP, mas nessa verso

    o funcionamento completamente compatvel com a verso anterior, ou seja: a maneira

    de avaliar as expresses e retornar true ou false atravs do tipo integer: usado o

    valor 0 (zero) ou vazio (String vazia) 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

    41

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

    integer.

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

    Como podemos notar, o PHP converte string para integer ou

    double mantendo o valor. O sistema utilizado pelo PHP para converter de strings para

    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 + 10.5; // $vivas == 11.5$vivas = 1 + -1.3e3; // $vivas == -1299$vivas = 1 + teste10.5; // $vivas == 1$vivas = 1 + 10testes; // $vivas == 11$vivas = 1 + " 10testes"; // $vivas == 11$vivas = 1 + "+ 10testes"; // $vivas == 1

    Transformao explcita de tipos

    A sintaxe do typecast de PHP semelhante ao C: basta escrever o tipo

    entre parenteses antes do valor

    Exemplo:$vivas = 15; // $vivas integer (15)

    42

  • $vivas = (double) $vivas // $vivas double (15.0)$vivas = 3.9 // $vivas double (3.9)$vivas = (int) $vivas // $vivas integer (3)

    // o valor decimal truncado

    Os tipos de cast permitidos so:

    (int), (integer) muda para integer;

    (real), (double), (float) muda para float;

    (string) muda para string;

    (array) muda para array;

    (object) muda para objeto.

    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; // $vivas integersettype($vivas,double) // $vivas double

    43

  • 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

    bit a bit

    Comparam dois nmeros bit a bit.

    & e lgico| ou lgico^ ou exclusivo~ no (inverso)> shift right

    de atribuio

    44

  • 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.

    = atribuio simples+= atribuio com adio-= atribuio com subtrao*= atribuio com multiplicao/= atribuio com diviso%= atribuio com mdulo.= atribuio com concatenao&= atribuio com e lgico|= atribuio com ou lgico^= atribuio com ou exclusivo= atribuio com shift right

    Exemplo:

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

    Lgicos

    Utilizados para inteiros representando valores booleanos

    and e lgicoor ou lgicoxor ou exclusivo! no (inverso)&& e lgico|| ou lgico

    Existem dois operadores para e e para ou porque eles tm diferentes

    posies na ordem de precedncia.

    Comparao

    45

  • As comparaes so feitas entre os valores contidos nas variveis, e no

    as referncias. Sempre retornam um valor booleano.

    == igual a=== exatamente igual a!= diferente de< menor que> maior que= maior ou igual a

    A diferena entre os operadores == e === pode ser percebida no seguinte

    exemplo:$letra = 10;$numero = 10;if ($letra == $numero) // Avaliado como true...if ($letra === $numero) // Avaliado como false...

    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.

    46

  • 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

    de erro

    PHP suporta um operador para controlar erros:

    @ Operador de controle de erros

    Quando esse operador utilizado antes de uma expresso, qualquer

    mensagem de erro que possa ser gerada pela expresso ser omitida. Se a opo

    track_errors estiver habilitada no arquivo php.ini, a mensagem de erro ser

    armazenada na varivel $php_errormsg. Vale lembrar que a cada erro ocorrido a

    varivel ter seu valor substitudo e, portanto, dever ser checada logo aps a linha

    geradora do erro.

  • Ordem Operadores07 ? :08 ||09 &&10 |11 ^12 &13 == != === !==14 < >=15 >16 + - .17 * / %18 ! ~ ++ -- (int) (double) (string) (array) (object) @19 [20 new

    48

  • 09. Estruturas de Controle

    As 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.

    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:

    49

  • 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:

    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:

    50

  • 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; ]

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

    51

  • 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 utiliza

    switch:

    if ($i == 0) print i igual a zero;elseif ($i == 1) print i igual a um;elseif ($i == 2) print i igual a dois;

    switch ($i) {case 0: print i igual a zero; break;case 1: print i igual a um; break;case 2: print i igual a dois; break;}

    importante compreender o funcionamento do switch para no cometer

    enganos. O comando switch testa linha a linha os cases encontrados, e a partir do

    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;

    52

  • 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;

    }

    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;

    53

  • 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

  • for (;;) ;

    for (;;) : ; . . . ;endfor;

    As trs expresses que ficam entre parnteses tm as seguintes

    finalidades:

    Inicializao: comando ou sequencia de comandos a serem realizados

    antes do inicio do lao. Serve para inicializar variveis.

    Condio: Expresso booleana que define se os comandos que esto

    dentro do lao sero executados ou no. Enquanto a expresso for verdadeira (valor

    diferente de zero) os comandos sero executados.

    Incremento: Comando executado ao final de cada execuo do lao.

    Um comando for funciona de maneira semelhante a um while escrito

    da seguinte forma:

    while () {comandos...}

    foreach

    Na verso 4 do PHP foi includo mais um comando de repetio, utilizado

    para percorrer os elementos de um array. Sua sintaxe :foreach(array as $valor) expressaoforeach(array as $chave => $valor) expressao

    Sendo que expressao pode conter um bloco de expresses. O

    funcionamento do comando foreach bastante simples: no incio da execuo o array

    reiniciado, ou seja, o ponteiro do array passa a apontar para o primeiro elemento,

    dispensando o uso da funo reset. A cada execuo do lao um elemento do array

    55

  • selecionado, atribuindo valor s variveis $valor e $chave com o valor e a chave do

    elemento selecionado, sendo que essas variveis podem ser utilizadas dentro do lao.

    Exemplo: foreach ($arr as $key => $value) { echo "Chave: $key; Valor: $value
    \n";}

    Quebra de fluxo

    Break

    O comando break pode ser utilizado em laos de do, for e while,

    alm do uso j visto no 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

  • 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 interpretador encontrar um continue,

    que faz com que os comandos seguintes do interior do lao sejam ignorados, seguindo

    para a prxima iterao.

    57

  • 10. Funes

    Definindo funes

    A sintaxe bsica para definir uma funo :

    function nome_da_funo([arg1, arg2, arg3]) {Comandos;... ;[return ];

    }

    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, ...);

    Este formato s deve ser utilizado na documentao do script, pois o PHP

    no aceita a declarao de tipos. Isso significa que em muitos casos o programador deve

    estar atento ao tipos dos valores passados como parmetros, pois se no for passado o

    tipo esperado no emitido nenhum alerta pelo interpretador PHP, j que este no testa

    os tipos.

    Valor de retorno

    Toda funo pode opcionalmente retornar um valor, ou simplesmente

    executar os comandos e no retornar valor algum.

    No possvel que uma funo retorne mais de um valor, mas permitido

    fazer com que uma funo retorne um valor composto, como listas ou arrays.

    58

  • Argumentos

    possvel passar argumentos para uma funo. Eles devem ser

    declarados 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);

    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 que aps 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 feita

    por referncia, toda alterao que a funo realizar no valor passado como parmetro

    afetar a varivel que o contm.

    59

  • H duas maneiras de fazer com que uma funo tenha parmetros

    passados por referncia: indicando isso na declarao da funo, o que faz com que a

    pasagem de parmetros sempre seja assim; e tambm na prpria chamada da funo.

    Nos dois casos utiliza-se o modificador &. Vejamos um exemplo que ilustra os dois

    casos:

    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. */

    Argumentos com valores pr-definidos (default)

    Em PHP possvel ter valores default para argumentos de funes, ou

    seja, valores que sero 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 testandoteste(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);

    60

  • /* 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 */

    Contexto

    O contexto o conjunto de variveis e seus respectivos valores num

    determinado ponto do programa. Na chamada de uma funo, ao iniciar a execuo do

    bloco que contm a implementao da mesma criado um novo 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.

    Escopo

    O escopo de uma varivel em PHP define a poro do programa onde ela

    pode 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.

    61

  • Exemplo:$vivas = Testando;

    function Teste() { global $vivas; echo $vivas;}

    Teste();

    Uma declarao global pode conter vrias variveis, separadas por

    vrgulas. Uma outra maneira 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();

    Funes variveis

    PHP suporta o conceito de funes variveis. Isso significa que se uma

    varivel tiver parnteses ao final, a funo cujo nome for o valor da varivel ser

    executada, se existir. Vejamos o exemplo:function soma($a, $b) { return $a + $b;}function multiplica($a, $b) { return $a * $b;}function dobro($a) { return 2 * $a;}$func = 'soma';echo $func(4,5) . "
    \n";$func = 'multiplica';echo $func(4,5) . "
    \n";$func = 'dobro';echo $func(4) . "
    \n";

    62

  • No exemplo anterior, as trs funes sero executadas: A primeira

    execuo retorna 9, a segunda retorna 20 e a terceira retorna 8.

    63

  • 11. Variveis e Constantes

    Declarao de uma varivel

    Como a tipagem em PHP dinmica, as variveis no precisam ser

    declaradas. Uma varivel inicializada no momento em que feita a primeira

    atribuio. O tipo da varivel ser definido de acordo com o valor atribudo.

    O modificador static

    Uma varivel esttica visvel num escopo local, mas ela inicializada

    apenas uma vez e seu valor no perdido quando a execuo do script deixa esse

    escopo. Veja o seguinte exemplo:

    function Teste() { $a = 0; echo $a; $a++;}

    O ltimo comando da funo intil, pois assim que for encerrada a

    execuo da funo a varivel $a perde seu valor. J no exemplo seguinte, a cada

    chamada da funo a varivel $a ter seu valor impresso e ser incrementada:

    function Teste() { static $a = 0; echo $a; $a++;}

    O modificador static muito utilizado em funes recursivas, j que o

    valor de algumas variveis precisa ser mantido. Ele funciona da seguinte forma: O valor

    das variveis declaradas como estticas mantido ao terminar a execuo da funo. Na

    prxima execuo da funo, ao encontrar novamente a declarao com static, o valor

    da varivel recuperado.

    Em outras palavras, uma varivel declarada como static tem o mesmo

    tempo de vida que uma varivel global, porm sua visibilidade restrita ao escopo

    local em que foi declarada e s recuperada aps a declarao.

    64

  • Exemplo: function Teste() { echo "$a"; static $a = 0; $a++;}

    O exemplo acima no produzir sada alguma. Na primeira execuo da

    funo, a impresso ocorre antes da atribuio de um valor funo, e portanto o

    contedo de $a nulo (string vazia). Nas execues seguintes da funo Teste() a

    impresso ocorre antes da recuperao do valor de $a, e portanto nesse momento seu

    valor ainda nulo. Para que a funo retorne algum valor o modificador static deve

    ser utilizado.

    Variveis Variveis

    O PHP tem um recurso conhecido como variveis variveis, que consiste

    em variveis cujos nomes tambm so variveis. Sua utilizao feita atravs do duplo

    cifro ($$).$a = teste;$$a = Mauricio Vivas;

    O exemplo acima e equivalente ao seguinte:

    $a = teste;$teste = Mauricio Vivas;

    Variveis enviadas pelo navegador

    Para interagir com a navegao feita pelo usurio, necessrio que o PHP

    possa enviar e receber informaes para o software de navegao. A maneira de enviar

    informaes, como j foi visto anteriormente, geralmente atravs de um comando de

    impresso, como o echo. Para receber informaes vindas do navegador atravs de um

    link ou um formulrio html o PHP utiliza as informaes enviadas atravs da URL. Por

    exemplo: se seu script php est localizado em http://localhost/teste.php3 e

    voc o chama com a url http://localhost/teste.php3?vivas=teste,

    automaticamente o PHP criar uma varivel com o nome $vivas contendo a string

    65

  • teste. Note que o contedo da varivel est no formato urlencode. Os formulrios

    html j enviam informaes automaticamente nesse formato, e o PHP decodifica sem

    necessitar de tratamento pelo programador.

    URLencode

    O formato urlencode obtido substituindo os espaos pelo caracter +

    e todos os outros caracteres no alfa-numricos (com exceo de _) pelo caracter %

    seguido do cdigo ASCII em hexadecimal.

    Por exemplo: o texto Testando 1 2 3 !! em urlencode fica

    Testando+1+2+3+%21%21

    O PHP possui duas funes para tratar com texto em urlencode. Seguem

    suas sintaxes:

    string urlencode(string texto);string urldecode(string texto);

    Essas funes servem respectivamente para codificar ou decodificar um

    texto passado como argumento. Para entender melhor o que um argumento e como

    funciona uma funo, leia o tpico funes.

    Utilizando arrays

    Cada elemento de um formulrio HTML submetido a um script PHP cria

    no ambiente do mesmo uma varivel cujo nome o mesmo nome do elemento. Por

    exemplo: um campo definido como:

    ao ser submetido a um script PHP far com que seja criada uma varivel

    com o nome $endereco. Isto acontece de forma semelhante para cookies, como

    veremos mais adiante.

    66

  • Uma boa tcnica de programao utilizar a notao de arrays para

    nomes de cookies ou itens de um formulrio html. Para um conjunto de checkboxes, por

    exemplo, podemos utilizar a seguinte notao:

    opcao1opcao2opcao3opcao4opcao5

    Ao submeter o formulrio, o script que recebe os valores submetidos ter

    uma varivel chamada $teste contendo os valores marcados num array, com ndices a

    partir de zero. Assim, se forem marcadas as opoes 2, 3 e 5, poderemos fazer as

    seguintes afirmaes:$teste == array(valor2, valor3, valor5);$teste[0] == valor2;$teste[1] == valor3;$teste[2] == valor5;