You are on page 1of 69

Manuais e recursos para desenvolvimento web www.criarweb.

com

Programao em PHP

Autores do manual Este manual foi criado pelos seguintes colaboradores de Criarweb.com: Miguel Angel Alvarez Miguel Angel Alvarez Traduo de JML Traduo de Celeste Veiga
(41 captulos) (1 captulo)

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

Manuais e recursos para desenvolvimento web www.criarweb.com

Introduo programao em PHP


PHP uma das linguagens do lado do servidor mais utilizadas da web. Nascida em 1994 tratase de uma linguagem de criao relativamente crescente que teve uma grande aceitao pela comunidade de webmasters, sobretudo pela potncia e simplicidade que a caracterizam. PHP permite-nos embeber os seus pequenos fragmentos de cdigo dentro da pgina HTML e realizar determinadas tarefas de uma forma fcil e eficaz sem ter de implementar programas programados na ntegra numa linguagem diferente de HTML. Por outro lado, aqui que reside o seu maior interesse relativamente s outras linguagens pensadas para os CGI, o PHP oferece inmeras funes para a explorao de bases de dados de um modo fcil, sem complicaes. Poderamos efetuar a comparao de dizer que PHP e ASP so linguagens parecidas em quanto potncia e dificuldade se bem que a sntese pode diferir sensivelmente. Algumas diferenas principais podem, mesmo assim, mencionar-se: PHP, ainda que multiplataforma, foi desenhado inicialmente para sistemas UNIX e neste sistema operativo que se pode aproveitar melhor as suas prestaes. ASP, sendo uma tecnologia Microsoft, est orientado para sistemas Windows, especialmente NT. As tarefas bsicas que podem realizar directamente a linguagem so definidas em PHP como funes sendo em ASP mais frequente o uso de objectos. Logicamente, isto no mais do que uma simples questo formal j que ambas linguagens suportam por igual ambos os procedimentos. ASP realiza numerosas tarefas servindo-se de componentes (objectos) que devem ser comprados (ou programados) pelo servidor a determinadas empresas especializadas. PHP tm uma filosofia totalmente diferente e, com um esprito mais generoso, construdo progressivamente por colaboradores desinteressados que implementam novas funes em novas verses da linguagem.

Este manual est destinado a todos os que quiserem comear do zero na aprendizagem desta linguagem e que estejam procura da sua utilizao directa no seu projecto de site ou no seu site HTML. Os captulos so extremamente simples, sem ser simplistas, procurando ser acessveis maioria. Eles podem ser complementados posteriormente com outros artigos de maior nvel, destinados gente mais experiente. A forma como relatamos este manual faz com que este seja acessvel a qualquer pessoa no familiarizada com a programao. Mesmo assim, possvel que em determinadas alturas algum que nunca tenha programado se veja um pouco desorientado. O nosso conselho de no querer perceber tudo antes de passar ao captulo seguinte, mas sim de tentar assimilar alguns conceitos e voltar a trs quando surgir uma dvida ou nos tenhamos esquecido de algum detalhe. Nunca faz mal ler vrias vezes o mesmo at que fique bem gravado e assimilado. Esperamos que este manual seja do vosso agrado e que se corresponda s nossas expectativas: O poder aproximar o PHP a todos os amantes do desenvolvimento de webs que querem dar o passo s webs profissionais. Artigo por Miguel Angel Alvarez - Traduo de JML

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

Manuais e recursos para desenvolvimento web www.criarweb.com

Breve histria do PHP


PHP uma linguagem criada por uma grande comunidade de pessoas. O sistema foi desenvolvido originalmente no ano 1994 por Rasmus Lerdorf como um CGI escrito em C que permitia a interpretao de um nmero limitado de comandos. O sistema foi denominado Personal Home Page Tools e adquiriu um relativo xito pelo que outras pessoas pediram a Rasmus que lhes permitisse utilizar os seus programas nas suas prprias paginas. Devido aceitao do primeiro PHP e de maneira adicional, o seu criador desenhou um sistema para processar formulrios ao qual deu o nome de FI (Form Interpreter) e o conjunto destas duas ferramentas, seria a primeira verso compacta da linguagem: PHP/FI. A seguinte grande contribuio linguagem foi realizada a meados de 97 quando se voltou a programar o analisador sintctico. Acrescentaram-se novas funcionalidades como o suporte de novos protocolos de Internet e o suporte da grande maioria de bases de dados comerciais. Todos estes melhoramentos constituram a base do PHP verso 3. A verso actual de PHP a verso 4, que utiliza o motor Zend, desenvolvido com maior meditao para cobrir as necessidades actuais e solucionar alguns inconvenientes da verso anterior. Alguns melhoramentos desta nova verso so a sua rapidez, pois agora primeiro compila-se e depois executa-se, quando antes se executava ao mesmo tempo que se interpretava o cdigo. Outra qualidade a sua independncia do servidor web, criando verses de PHP nativas para mais plataformas, e tambm um API mais elaborado e com mais funes.

Grfica do nmero de domnios e endereos IP que utilizam PHP. Estatstica do Netcraft.

Neste ltimo ano, o nmero de servidores que utilizam PHP aumentou, conseguindo situar-se perto dos 5 milhes de sites e 800.000 endereos IP, o que converteu PHP numa tecnologia popular. Isto deve-se, entre outras razes, ao facto de PHP ser o complemento ideal para que o Linux-Apache seja compatvel com a programao do lado do servidor de stios web. Devido aceitao que conseguiu, e o grande esforo realizado por uma crescente comunidade de colaboradores para tentar conseguir uma implementao ptima, podemos assegurar que a linguagem ir converte-se num standard que compartilhar os xitos augurados ao conjunto dos sistemas desenvolvidos em cdigo aberto. Artigo por Miguel Angel Alvarez - Traduo de JML

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

Manuais e recursos para desenvolvimento web www.criarweb.com

Tarefas Principais do PHP


Pouco a pouco o PHP vai-se convertendo numa linguagem que nos permite fazer de tudo. Num princpio desenhado para realizar pouco mais do que um contador e um livro de visitas, PHP experimentou em pouco tempo uma verdadeira revoluo e, a partir das suas funes, neste momento pode realizar-se um grande nmero de tarefas teis para o desenvolvimento web: Funes de correio eletrnico Podemos com uma facilidade assombrosa enviar um e-mail a uma pessoa ou lista parametrizando toda uma srie de aspectos tais como o e-mail de procedncia, assunto, pessoa a responder... Outras funes menos frequentes, mas de indiscutvel utilidade para a gesto de correios eletrnicos so includas na sua livraria. Gesto de bases de dados Torna-se complicado criar um site atual, potente e rico em contedo que no gerido por uma base de dados. A linguagem PHP oferece interfaces para o acesso maioria das bases de dados comerciais e por ODBC a todas as bases de dados possveis em sistemas Microsoft, a partir das quais poderemos editar o contedo do nosso site com uma simplicidade absoluta. Gesto de ficheiros Criar, apagar, mover, modificar... qualquer tipo de operao mais ou menos razovel de que nos possamos lembrar pode ser realizada a partir de uma ampla livraria de funes para a gesto de ficheiros PHP. Tambm podemos transferir ficheiros por FTP a partir de comandos no nosso cdigo, protocolo para o qual PHP previu tambm grande quantidade de funes. Tratamento de Imagens Evidentemente muito mais simples utilizar Photoshop para o tratamento de uma imagem mas... e se temos de tratar montes de imagens enviadas pelos nossos cibernautas? A verdade que pode ser chato uniformizar em tamanho e em formato vrias imagens recebidas todos os dias. Tudo isto pode ser automatizado eficazmente a travs de PHP. Tambm pode parece til criar botes dinmicos, isto , botes em que utilizamos o mesmo design e s mudamos o texto. Poderemos por exemplo criar um boto fazendo uma nica chamada a uma funo em que introduzimos um estilo do boto e o texto a introduzir obtendo automaticamente o boto desejado. A partir da livraria de funes grficas podemos fazer isto e muito mais. Muitas outras funes pensadas para a Internet (tratamento de cookies, acessos restringidos, comercio eletrnico...) ou para propsito geral (funes matemticas, explorao de cadeias, de datas, correco ortogrfica, compresso de ficheiros...) so realizadas por esta linguagem. A esta imensa livraria s resta agregar todas as funes pessoais que vamos criando por necessidades prprias e que logo so reutilizadas noutros sites e todas aquelas trocadas e obtidas em foros e sites especializados. Como vemos, as possibilidades que nos oferece so surpreendentes. S necessrio um pouco de vontade de aprender e um pouco de pacincia nos nossos primeiros passos. O resultado
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 4

Manuais e recursos para desenvolvimento web www.criarweb.com

pode ser muito satisfatrio. Artigo por Miguel Angel Alvarez - Traduo de JML

Instalao de PHP no nosso servidor


Como todas as linguagem do lado do servidor, PHP requer uma instalao de um servidor no nosso PC para poder trabalhar em local. Este modo de trabalho torna-se mais prctico do que colocar os ficheiros por FTP no servidor e execut-los a partir da Internet. Desta maneira, antes de comear a criar os nossos programas em PHP necessrio: Transformar o nosso computador num servidor. Isto faz-se instalando um dos vrios servidores disponveis para o sistema operativo da nossa mquina. Introduzir no nosso servidor os ficheiros que lhe permitem a compreeso do PHP. Estes ficheiros podem ser obtidos, na sua verso mais actual, na pgina oficial de PHP.

Para ficar a conhecer a forma de instalar PHP sobre cada servidor de cada sistema operativo podemos ir ao apartado de documentao da pgina oficial de PHP onde podemos consultar um manual em HTML de rpida consulta e um enorme manual em PDF de quase 1000 pginas que explica de minuciosamente entre outras coisas, os passos a seguir para cada caso particular. De qualquer forma, ns vamos oferecer algumas ajudas para configurar PHP nos sistemas mais comuns. A eleio do nosso programa servidor ter muito que ver com o sistema operativo que tenhas a funcionar no teu computador. Estas seriam algumas possibilidades de sistemas operativos e solues que funcionam bem. Windows 95/98 Se ests a trabalhar em Windows 95 ou Windows 98 e para principiantes, recomendvel utilizar o servidor Personal Web Ser. Neste caso necessitaramos: Personal Web Server de Microsoft como servidor, que tambm serve para a aprendizagem em ASP. Uma instalao da verso mais recente de PHP que, para alm de demorar menos a fazer o download, nos guiar passo a passo em todo o processo de instalao. Esta verso no inclui todas as funcionalidades de PHP, mas servir para aprender at um bom nvel.

H que destacar que, para o caso de PHP em PWS, margem de tudo o que foi dito no capitulo de instalao, importante ao criar o directrio virtual permitir a execuo de scripts validando a caixa correspondente. Em Windows 95/98 tambm podemos utilizar o servidor Apache e pode que seja uma opo ainda mais completa que a de utilizar PWS. Passamos a explicar mais sobre o assunto. Windows ME e XP Home edition No experimentamos PHP nestas plataformas, mas em principio no tm compatibilidade com Personal Web Server, pelo qual deveramos escolher o outro servidor.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

Manuais e recursos para desenvolvimento web www.criarweb.com

Outra possibilidade para os usurios de Windows em geral instalar Apache como servidor web que pode ser vantajoso em relao ao uso do PWS, pois PHP est principalmente desenhado para funcionar neste servidor. Isto quer dizer que, ainda que em principio tudo devesse funcionar correctamente nos dois servidores, possvel que algum bug no corrigido faa falhar algum dos nossos scripts se trabalhamos com algum servidor cujas actualizaes so menos frequentes e detalhadas. Apache foi especialmente pensado para plataformas Unix-Linux, ainda que recentemente, com Apache 2.0 tenha sido feita uma verso especfica para Windows. Windows NT, Windows 2000 e XP nas suas verses Professional e Server Para estes sistemas temos duas possibilidades muito interessantes pois podemos instalar PHP sobre Internet Information Server ou sobre Apache com todas as garantias. Se tivssemos que recomendar alguma das duas opes, escolheramos Apache pois como tnhamos dito, PHP est pensado para trabalhar sobre Apache. Podia ser interessante IIS no caso que desejemos usar ASP e PHP sobre o mesmo servidor pois em principio Apache no compatvel com ASP. Unix - Linux Temos de dizer que neste sistema, e acompanhado de Apache, onde se obtm as melhores prestaes desta linguagem sendo a combinao mais comum na maioria dos servidores web que trabalham com PHP. Concluso De qualquer modo, para fins de desenvolvimento local, em princpio podemos trabalhar em qualquer sistema. Somente em casos de programao realmente avanada poderemos enfrentar-nos com problemas relacionados com o sistema operativo utilizado ou o servidor no qual correm as nossas pginas. Temos de ver que em alguns casos pontuais, nos quais o nosso PC possa no ser muito potente, podemos fazer directamente os nossos testes com o servidor donde temos o nosso site o qual ser, muito provavelmente, um Unix ou Linux funcionando com Apache. Artigo por Miguel Angel Alvarez - Traduo de JML

Configurao de PHP com Apache em Windows, como CGI


Este artigo trata de como configurar PHP e Apache para que trabalhem conjuntamente num sistema Windows. Este artigo tambm assume que h um servidor Apache configurado num sistema Windows, e que funciona correctamente. Existem duas formas de configurar PHP para trabalhar com Apache, instalar como um mdulo ou instalar como um CGI. Neste artigo vamos ver como instal-lo como um CGI. Para instalar PHP como um CGI temos de seguir os seguintes passos: Em primeiro lugar, temos de fazer download do PHP desde a pgina php.net. Existem duas
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 6

Manuais e recursos para desenvolvimento web www.criarweb.com

verses, uma que tem um instalador, e outra que um ficheiro ZIP. Optamos pela segunda hiptese. Uma vez descarregado o ficheiro temos que descomprimi-lo dentro de uma pasta que no tem que estar dentro do path do Apache. Este artigo assumir que se descomprime dentro duma pasta C:\PHP. Verificar que o contedo do ficheiro ZIP no fica num subdiretrio da pasta C:\PHP, mas sim directamente no directrio raiz da dita pasta. Na pasta C:\PHP encontra-se um ficheiro chamado PHP4ts.dll, h que mov-lo para dentro da pasta C:\Windows\system ou C:\winnt\system. A seguir, dentro da pasta c:\php encontra-se um ficheiro chamado php.ini-recomended. Temos de copiar este ficheiro para dentro da pasta C:\Windows, e renome-lo a php.ini Neste ficheiro encontra-se toda a configurao de PHP, e todas as modificaes na configurao de PHP (mostrar erros, variveis globais, etc...) encontram-se dentro deste ficheiro. muito recomendvel mudar a directiva display_errors que como valor pr-definido est em OFF, e pr em ON, para poder ver os erros que se produzem nas pginas durante o desenvolvimento. Para um servidor em produo conveniente deix-la em OFF. Uma vez feito isto, resta indicar-lhe ao Apache, onde se encontra instalado o PHP, para isso temos de editar o ficheiro httpd.conf que se encontra dentro da pasta conf, na pasta de instalao do apache (C:\Program Files\Apache Group\Apache2\conf). Abrimos o ficheiro, situamo-nos no final do mesmo e escrevemos as seguintes linhas: ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe" Aqui indicamos onde se encontra o executvel de php, e como associ-lo aos ficheiros php que se encontrem dentro do Apache. A continuao reiniciar o servidor Apache, e j esta! Por ltimo, para comprovar a nova instalao, recomenda-se criar um ficheiro php com o seguinte contedo:
<? phpinfo(); ?>

A seguir guardamo-lo dentro da pasta raiz de documentos do Apache (C:\Program Files\Apache Group\Apache2\htdocs), com um nome terminado em .php, por exemplo info.php Para execut-lo, atravs de um navegador, escrever o endereo http://localhost/info.php. Devia aparecer um ecr como o que se mostra a seguir.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

Manuais e recursos para desenvolvimento web www.criarweb.com

Se virmos isto correctamente porque tudo correu bem e temos PHP perfeitamente instalado no nosso servidor Apache.
Nota: Este tipo de instalao de PHP sobre Apache pouco recomendvel por motivos de segurana. Podemos segui-la para configurar PHP em local, com a inteno de fazer as nossas pginas web, mas nunca se vamos utilizar o servidor num entorno de produo, isto , num servidor que se encontre permanentemente conectado a Internet servindo pginas a todo tipo de usurios. Seria necessrio instalar PHP como um mdulo de Apache, em lugar de CGI, para dotar ao sistema de uma maior segurana, e tambm mais potncia.

Se tivermos problemas para instalar PHP e os programas relacionados no nosso sistema, sempre podemos optar pela opo mais rpidas, que instalar um pacote que inclui tudo o necessrio para comear. Poderemos encontrar tudo explicado numa guia gratuita com vdeos muito instrutivos e recomendveis que nos ensinam a instalar PHP, Apache, MySQL e outras aplicaes. Artigo por Miguel Angel Alvarez - Traduo de JML

Configurao de PHP como mdulo de Apache em Windows


Neste artigo vamos explicar como instalar PHP como mdulo de Apache 2.0 num sistema Windows. Para as provas utilizamos Windows XP, mas seguramente com outros sistemas o processo ser muito similar, ainda que, em todo caso, indicaremos as diferenas documentadas no sitio de PHP. Anteriormente explicmos a instalao de PHP como um CGI, ainda que na pgina de PHP desaconselha-se esta opo, pois sofre graves problemas de segurana. Ademais, PHP instalado como mdulo de Apache torna-se muito mais rpido do que como CGI.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

Manuais e recursos para desenvolvimento web www.criarweb.com

Referncia: Vamos supor que o servidor de pginas web Apache 2.0 est instalado no nosso sistema. No obstante, para os que no o tenham, aconselhamo-los o nosso manual de instalao e configurao de Apache. Tambm pomos vossa disposio um link a uma guia em vdeo muito interessante e super simples para poder instalar PHP no nosso computador. A guia gratuita e serve para instalar PHP, Apache e MySQL.

Descer e descomprimir PHP O primeiro passo consiste em descer a ltima verso de PHP. Poderemos faz-lo desde a pgina oficial de PHP, na seco de downloads http://www.php.net/downloads.php Devemos escolher a verso "Zip Package" que contem todas as funcionalidades de PHP e do mdulo necessrio para instala-lo no Apache. Uma vez obtido o pacote comprimido em .zip de PHP necessitamos descomprimi-lo no nosso disco rgido. Podemos utilizar o directrio raz do disco para descomprimir os ficheiros. Neste caso, cria-se uma pasta com um nome semelhante a "php-4-3-1-Win32" que estar no directrio raiz. Recomenda-se mudar o nome da pasta criada para algo simples como "C:\php". Em todo caso, avisam-nos na pgina de PHP para no colocar nenhum nome de pasta que tenha espaos, pois poderia dar problemas com alguns servidores. Por exemplo, cuidado com instalar PHP em algum directrio como este "C:\Program Files\php", pois o path contm espaos. Copia das DLL Em seguida informam-nos sobre a necessidade de copiar no nosso diretrio de sistema uma srie de livrarias (.dll) que encontraremos no directrio sapi da nossa instalao de PHP, supostamente algo como "C:\PHP\Sapi". O mencionado directrio do sistema pode variar de umas verses a outras de Windows. Em Windows XP, o directrio de sistema onde temos de copiar as dll :"C:\WINDOWS\system32". Em Windows 9x/ME, o directrio seria "C:\Windows\System" sendo em Windows NT/2000 o directrio "C:\WINNT\System32" ou "C:\WINNT40\System32".
Nota: No se devem misturar as DLL de diversas verses de PHP, porque do contrario, poderia causar-nos problemas.

Deferir um ficheiro php.ini Outro ficheiro que devemos copiar, desta vez no nosso diretrio Windows, o php.ini, que guarda as opes de configurao definidas para PHP. Nas distribuies de PHP inclui-se dois ficheiros php.ini que podemos utilizar directamente no nosso sistema. Estes ficheiros chamamse "php.ini-dist" e "php.ini-recommended" e contem umas opes tpicas de configurao em PHP. Recomenda-se utilizar "php.ini-recommended", porque vem optimizado para obter os melhores nveis de segurana. Em qualquer caso, podemos editar em qualquer momento o contedo do ficheiro para modificar a configurao de PHP ao nosso gosto ou necessidades. Para definir o php.ini devemos fazer uma copia do ficheiro ed configurao escolhido ("php.inidist" ou "php.ini-recommended") e renome-lo como o "php.ini". Posteriormente devemos copi-lo na nossa pasta de Windows que em sistemas 9x/ME/Xp "C:\windows" e em sistemas NT/2000 "C:\WINNT" ou "C:\WINNT40". Editar httpd.conf Posteriormente devemos editar o nosso ficheiro de configurao de Apache, chamado "httpd.conf" que est no directrio "conf" da nossa instalao de Apache. Tambm podemos encontrar um acesso directo para editar esse ficheiro acedendo a Inicio - Programas - Apache
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 9

Manuais e recursos para desenvolvimento web www.criarweb.com

HTTP Server - Configure Apache HTTP Server - Edit httpd.conf configuration file. Devemos acrescentar um par de linhas de configurao do modulo Apache. LoadModule php4_module C:\php\sapi\php4apache2.dll AddType application/x-httpd-php .php O lugar adequado para acrescentar essa linhas no bloco de carga de mdulos, que podemos encontrar se procuramos pelo texto "LoadModule". Podemos acrescentar as linhas de carga do modulo PHP depois da carga dos outros mdulos que vem j configurados no ficheiro http.conf de Apache. Se instalarmos o PHP no directrio C:\PHP, devemos editar as linhas e colocar no http.conf o path correto ao diretrio onde esta a livraria php4apache2.dll. Um ltimo passo Antes de terminar e comprovar se o PHP se instalou correctamente, necessitamos copiar uma dll no diretrio sapi. Concretamente, a dll "php4ts.dll", que podemos encontrar no nosso diretrio de instalao de PHP, a qual devemos copiar ao directrio sapi, algo assim como "C:\PHP\sapi"
Nota: Esta aco no vem documentada no manual de PHP, ainda que se no a fizermos no funcionar. O erro que obtemos ao arrancar o Apache ser algo como: Syntax error on line 173 of C:/Program Files /Apache Group/Apache2/conf/httpd.conf: Cannot load C:/php/sapi/php4apache2.dll into server: No se pode encontrar o mdulo especificado.

Outra configurao que podemos aplicar no ficheiro httpd.conf definir tambm como documento padro o ficheiro index.php no nosso servidor Apache. O documento padro geralmente index.html, mas o habitual se formos programar com PHP que tambm necessitemos de definir o index.php como documento a mostrar se no se indica outro documento do directrio a que se est a aceder. O documento pr-definido define-se com a varivel DirectoryIndex. Obteremos uma definio como esta: DirectoryIndex index.html index.html.var index.php Comprovar se PHP est a funcionar correctamente Para terminar, podemos criar uma pgina de prova de PHP, que colocaremos no nosso directrio de publicao do Apache, geralmente chamado htdocs, que est dentro do directrio onde se instalou Apache, algo assim como "C:\Program Files\Apache Group\Apache2\htdocs". Podemos criar um ficheiro chamado, por exemplo, "prova.php", no qual colocaremos dentro o seguinte cdigo: <? phpinfo() ?> Esta funo simplesmente criar uma pgina que mostra as configuraes definidas para PHP nesse servidor. Para aceder ao ficheiro criado desde o nosso explorador, escreveremos na barra de endereos
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 10

Manuais e recursos para desenvolvimento web www.criarweb.com

esta URL: http://localhost/prova.php Deveria aparecer um resultado como o da seguinte imagem.

Se por qualquer motivo encontramos problemas ao instalar PHP e os programas relacionados com o nosso sistema, sempre podemos usar uma via mais rpida que consiste em instalar um pacote que inclui tudo o necessrio para comear. Poderemos encontrar todos os detalhes numa guia gratuita com vdeos muito instrutivos e recomendveis que nos ensinam a instalar php, Apache, MySQL e outras aplicaes. Artigo por Miguel Angel Alvarez - Traduo de JML

Instalao de MySQL em Windows


Um dos pontos mais fortes das pginas em PHP a possibilidade de usar bases de dados mediante funes de destacada simplicidade e potncia. Estas bases de dados podem servir ao nosso site para armazenar contedos de uma forma sistemtica que nos permita classific-los, procur-los e edit-los rpida e facilmente. Uma base de dados um conjunto de tabelas nas quais armazenamos diferentes registos (artigos de uma loja virtual, provedores ou clientes de uma empresa, filmes em exibio de um cinema...). Estes registos so catalogados numa funo de diferentes parmetros que os caracterizam e que tem uma utilidade a hora de classifica-los. Assim, por exemplo, os artigos de uma loja virtual poderiam catalogar-se a partir de diferentes campos como pode ser o nmero de referncia, nome do artigo, descrio, preo, provedor... A base de dados mais difundida com o sistema UNIX-Apache sem duvida MySQL. Tal e como acontece com o Apache, est disponvel uma verso para Windows e pode ser obtida gratuitamente.
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 11

Manuais e recursos para desenvolvimento web www.criarweb.com

P-lo a funcionar no tem muita dificuldade. Uma vez instalado o programa podemos executar as nossas ordens em modo MS-DOS. Para isso, abrimos uma janela MS-DOS e colocamo-nos no directrio bin de mysql. Neste directrio encontram-se os ficheiros executveis. Aqui teremos de encontrar um ficheiro chamado mysqld. No caso da verso mais actual durante a redaco deste artigo, este ficheiro chama-se mysqld-shareware. Uma vez executado este ficheiro podemos executar o seguinte: mysql Uma vez chegados a este ponto veremos como uma mensagem de bem-vinda aparece no nosso ecr. Neste momento encontramo-nos dentro da base de dados. A partir de ai podemos realizar todo tipo de operaes por comandos SQL. No vamos entrar numa explicao pormenorizada do funcionamento dessa base de dados pois isso dava-nos para um manual inteiro. Como resumo, aqui propomos as operaes mais bsicas: Instruccin Show databases; Use nome_da_base Create Database nome_da_base; Drop Database nome_da_base; Show tables; Describe nome_da_tabela; Load Data Local Infile "ficheiro.txt" Into Table nome_da_tabela; Quit Descripcin Mostra o conjunto da base de dados presente no servidor Determina a base de dados sobre a qual vamos trabalhar Cria uma nova bd com o nome especificado Elimina a base de dados com o nome especificado Mostra as tabelas presentes na base de dados actual Descreve os campos que compem a tabela Cria os registos da tabela a partir de um ficheiro de texto no qual separamos por tabulaes todos os campos de um mesmo registro Sair de MySQL

Drop Table nome_da_tabela; Apaga a tabela da base de dados

Para evitarmos ter de editar as nossas tabelas directamente sobre os ficheiros de texto, pode ser muito prtico usar qualquer outra base de dados com um editor e exportar a seguir a tabela num ficheiro de texto configurado para deixar tabulaes entre cada campo. Isto possvel em Access, por exemplo, clicando com o boto direito sobre a tabela que queremos converter e escolhendo a opo exportar. Uma janela de dialogo aparecer na qual escolheremos guardar o ficheiro em tipo texto. O passo seguinte ser escolher um formato delimitado por tabulaes sem qualificador de texto. Outra possibilidade que pode ser muito prtica e que nos evita trabalhar continuamente com comandos do estilo aos do tempo da carochinha servir-se de programas em PHP ou Perl j existentes e que se podem obter na rede. O mais popular sem duvida o phpMyAdmin. Estes tipos de scripts so executados desde um navegador e podem, por tanto, albergados no nosso servidor ou empregues em local para, a partir deles, administrar MySQL de uma forma menos difcil.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

12

Manuais e recursos para desenvolvimento web www.criarweb.com

Do mesmo modo, dentro do directrio bin de MySQL, podemos encontrar uma pequena aplicao chamada MySqlManager. Trata-se de uma interfaz windows, mais agradvel a vista e ao uso do que a que obtemos executando o ficheiro mysql. Neste caso, as sentenas SQL devem realizar-se sem o ponto e vrgula final. Artigo por Miguel Angel Alvarez - Traduo de JML

Introduo sintaxe PHP


PHP escreve-se dentro da prpria pgina web, junto ao cdigo HTML e como para qualquer outro tipo de linguagem includo num cdigo HTML, em PHP necessitamos de especificar quais so as partes constituintes do cdigo escritas nesta linguagem. Isto faz-se, como em outros casos, delimitando o nosso cdigo por etiquetas. Podemos utilizar diversos modelos de etiquetas em funo das nossas preferncias e costumes. H que ter em conta que no necessariamente todas esto configuradas inicialmente e que outras s esto disponveis a partir de uma determinada verso (3.0.4). A maneira de abrir e fechar as etiquetas so: <? e ?> <% e %> <?php e ?> <script languaje="php"> Este ltimo modo est principalmente aconselhado a todos aqueles que tenham a coragem de trabalhar com o Front Page, pois usando qualquer outra etiqueta corremos o risco que a aplicao no-la apague sem mais nem menos pois trata-se de um cdigo incompreensvel para ela. O modo de funcionamento de uma pgina PHP, a grandes rasgos, no difere do clssico de uma pgina dinmica do lado do servidor: O servidor vai reconhecer a extenso correspondente a pgina PHP (phtml, php, php4,...) e antes de envi-la ao navegador vai encarregar-se de interpretar e executar tudo aquilo que se encontre entre as etiquetas correspondentes a linguagem PHP. O resto, vai envi-lo tal qual, posto que assumir que se trata de cdigo HTML absolutamente compreensvel para o navegador. Outra caracterstica geral dos scipts em PHP a forma na qual se separam umas sentenas das outras. Para faze-lo, temos de acabar cada sentena com um ponto e virgula ";". Para a ultima sentena, a que vai mesmo antes do etiqueta de fecho, no seria necessrio. Inclumos tambm neste capitulo a sntaxe de comentrios. Um comentrio, para aqueles que no o saibam, uma frase ou palavra que ns inclumos no cdigo para compreende-lo mais facilmente ao voltar a l-lo um tempo mais tarde e por suposto, o computador tem de ignorar pois no vai dirigido a ele, se no a ns mesmos. Os comentrios tem uma grande utilidade pois muito fcil esquecer-se do funcionamento se um script programado faz algum tempo sendo muito til se queremos fazer rapidamente compreensvel o nosso cdigo a outra pessoa. Pois bem, a forma de incluir estes comentrios varia conforme o tamanho do comentrio, isto
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 13

Manuais e recursos para desenvolvimento web www.criarweb.com

se queres escrever uma linha ou mais. Vejamos um primeiro exemplo de script: <? $mensagem="Tenho fome!!"; //Comentrio de uma linha echo $mensagem; #Este comentario tambm de uma linha /*Neste caso o meu comentrio ocupa varias linhas, ests a ver? */ ?> Executar script Se usarmos dupla barra (//) ou o smbolo # podemos introduzir comentrios de uma linha. Mediante /* e */ criamos comentrios multilinha. Claro que, nada nos impede de usar os ltimos com uma s linha. No te preocupes se no compreendes o texto contido nas etiquetas, tudo chegar. Adiantamos que as variveis em PHP definem-se antepondo um smbolo de dlar ($) e que a instruo echo serve para sacar pelo ecr o que est escrito a continuao. Lembramos que todo o texto introduzido em forma de comentrio completamente ignorado pelo servidor. importante acostumar-se a deixar comentrios, com o tempo agradece-se. Artigo por Miguel Angel Alvarez - Traduo de JML

Variveis em PHP
No manual de pginas dinmicas introduzimos o conceito de varivel. No captulo anterior comentvamos que, para PHP, as variveis eram definidas antepondo o smbolo dlar ($) ao nome da varivel que estamos a definir. Dependendo do tipo de informao que contm, uma varivel pode ser considerada de um tipo ou de outro: Variveis numricas Armazenam cifras Inteiros $inteiro=2002; Real $real=3.14159 ; Nmeros sem decimais Nmeros com ou sem decimal

Variveis alfanumricas Armazenam textos compostos de nmeros e/ou cifras Cadeias Armazenam variveis alfanumricas $cadeia="Ol amigo";

Tabelas

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

14

Manuais e recursos para desenvolvimento web www.criarweb.com

Armazenam sries de informaes numricas e/ou alfanumricas A r r so as variveis que a guardam as tabelas y s $sentido[1]="ver";$sentido[2]="tocar"; $sentido[3]="ouvir";$sentido[4]="gosto"; $sentido[5]="cheirar";

Objectos Trata-se de conjuntos de variveis e funes associadas. Tem uma complexidade maior que as variveis vistas at agora, mas a sua utilidade mais do que interessante. A diferena com outras linguagens, PHP tem uma grande flexibilidade a hora de operar com variveis. De facto, quando definimos uma varivel dando-lhe um valor, o computador atribuilhe um tipo. Por exemplo, se definirmos uma varivel entre aspas, a varivel ser considerada de tipo cadeia (de caracteres):
$variavel="5"; //isto uma cadeia

Mesmo assim, se pedirmos ao nosso script para realizar uma operao matemtica com essa varivel, no obteremos uma mensagem de erro mas sim que a varivel cadeia ser assimilada como numrica:
<? $cadeia="5"; //isto uma cadeia $inteiro=3; //isto um inteiro echo $cadeia+$inteiro ?>

Executar script Este script dar como resultado "8". A varivel cadeia ser assimilada como inteiro (ainda que o seu tipo continua a ser de tipo cadeia) para poder realizar essa operao matemtica. Do mesmo modo, podemos operar com variveis de tipo inteiro e tipo real. No devemos preocupar-nos com nada, PHP encarrega-se durante a execuo de interpretar o tipo de varivel necessrio para o bom funcionamento do programa. Mesmo assim, em contraste, temos de ter cuidado para no mudar maisculas por minsculas, pois neste sentido, PHP sensvel. Convm pois trabalhar sempre em maisculas ou sempre em minsculas para evitar este tipo de mal-entendidos s vezes muito difceis de localizar. Variveis atribudas por referncia Em PHP tambm podemos atribuir variveis por referncia. Neste caso no se lhes atribui um valor, seno outra varivel, de modo que as duas variveis compartem o espao de memria para o mesmo dado. A notao para atribuir por referncia colocar um "&" antes do nome da varivel.
<?php $foo = 'Bob'; // Atribui o valor 'Bob' a $foo $bar = &$foo; // Referncia $foo via $bar.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

15

Manuais e recursos para desenvolvimento web www.criarweb.com

$bar = "O meu nome $bar"; // Modifica $bar... echo $foo; // $foo tambm se modifica. echo $bar; ?>

Isto dar como resultado a visualizao duas vezes do string "O meu nome Bob". Algo assim como: O meu nome Bob O meu nome Bob Artigo por Miguel Angel Alvarez - Traduo de JML

Mudana de tipo das variveis em PHP


PHP no requer que indiquemos o tipo que vai conter a varivel pois deduzida pelo valor que atribumos varivel. Do mesmo modo, encarrega-se de atualizar automaticamente o tipo da varivel cada vez que lhe atribuamos um novo valor. Por isso, para mudar o tipo de uma varivel simplesmente temos de atribuir um valor com o novo tipo.
Nota: Excluem-se neste caso a mudana de variveis de tipo Array porque a sintaxe pode resultar ambgua ao expressar esse cdigo, isto , pode dar-se o caso que uma linha de cdigo possa significar duas coisas. $a = "1"; //$a uma cadeia $a[0] = "f"; //Estamos editando o ndice da cadeia ou forando a array?

Foragem De todos modos, podemos forar uma varivel para que mude o tipo com a funo setType().
setType($variavel,"novo_tipo");

A funo setType() atualiza o tipo de $variavel a "novo_tipo" e retorna um boleano indicando se houve xito ou no com a converso. Entre "novo_tipo" temos: "integer" "double" "string" "array" "object"

Tambm podemos fazer com que uma varivel se comporte como um tipo determinado forando-a, da mesma maneira a como se faz na linguagem C.
$variavel = "23"; $variavel = (int) $variavel;

As foragens permitidas so:


Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 16

Manuais e recursos para desenvolvimento web www.criarweb.com

(int), (integer) - fora a inteiro (integer) (real), (double), (float) - fora a duplo (double) (string) - fora a cadeia (string) (array) - fora a array (array) (object) - fora a objeto (object)

Artigo por Miguel Angel Alvarez - Traduo de JML

Variveis de sistema em PHP


Dada a sua natureza de linguagem do lado do servidor, PHP capaz de nos dar acesso a toda uma srie de variveis que nos informam sobre o nosso servidor e sobre o cliente. A informao destas variveis atribuda pelo servidor e em nenhum caso nos possvel modificar os seus valores directamente mediante o script. Para faz-lo necessrio influir sobre a propriedade que definem. Existem vrias variveis deste tipo, algumas sem utilidade aparente e outras realmente interessantes e com uma aplicao directa para o nosso site. Aqui enumeramos algumas destas variveis e a informao que nos oferecem: Varivel Descrio Informa-nos principalmente sobre o sistema operativo e tipo e verso do navegador utilizado pelo cibernauta. A sua principal utilidade radica em que, a $HTTP_US partir desta informao, podemos redireccionar os nossos usurios para ER_AGENT pginas optimizadas para o seu navegador ou realizar qualquer outro tipo de aco no contexto de um navegador determinado. Retorna-nos a ou as abreviaes da lngua considerada como principal pelo $HTTP_AC navegador. Esta lngua ou lnguas principais podem ser escolhidas no menu de CEPT_LAN opes do navegador. Esta varivel torna-se tambm extremamente til para GUAGE enviar o cibernauta s pginas na sua lngua, se que existem. $HTTP_REF ERER $PHP_SELF $HTTP_GET _VARS $HTTP_PO ST_VARS $HTTP_CO OKIES_VA RS $PHP_AUT H_USER Indica-nos a URL com a qual o cibernauta teve acesso a pgina. Muito interessante para gerar botes de "atrs" dinmicos ou para criar os nossos prprios sistemas estatsticos. Retorna-nos uma cadeia com a URL do script que est a ser executado. Muito interessante para criar botes para recarregar a pgina. Trata-se de um array que armazena os nomes e os contedos das variveis enviadas ao script por URL ou por formulrios GET. Trata-se de um array que armazena os nomes e os contedos das variveis enviadas ao script por meio de um formulrio POST. Trata-se de um array que armazena os nomes o os contedos das cookies. Veremos o que so mais tarde. Armazena a varivel usurio quando se efectua a entrada a pginas de acesso restringido. Combinado com $PHP_AUTH_PW ideal para controlar o acesso s pginas internas do site.

$PHP_AUT Armazena a varivel password quando se efectua a entrada a pginas de H_PW acesso restringido. Combinado com $PHP_AUTH_USER ideal para controlar o
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 17

Manuais e recursos para desenvolvimento web www.criarweb.com

acesso s pginas internas do site. $REMOTE_ ADDR $DOCUMEN T_ROOT Mostra o endereo IP do visitante. Retorna-nos o path fsico no qual se encontra alojada a pgina no servidor.

$PHPSESSI Guarda o identificador da sesso do usurio. Veremos mais frente o que so D as sesses. Nem todas as variveis esto disponveis na totalidade dos servidores ou em determinadas verses dum mesmo servidor. Ademais, algumas delas tem de ser previamente activadas ou definidas por meio de algum evento. Assim, por exemplo, a varivel $HTTP_REFERER no est definida a menos que o cibernauta aceda ao script a partir de um link desde outra pgina. Variveis superglobais A partir de PHP 4.1.0, dispem-se de um conjunto de variveis de tipo array que mantm informao do sistema, chamadas superglobais porque se definem automaticamente num mbito global. Estas variveis fazem referncia s mesmas que se acediam antes por meio dos arrays do tipo $HTTP_*_VARS. Estas ainda existem, ainda que a partir de PHP 5.0.0 podem-se desactivar com a diretiva register_long_arrays. A lista destas variveis, extrada directamente da documentao de PHP a seguinte: $GLOBALS Contem uma referncia a cada varivel disponvel no espectro das variveis do script. As chaves desta matriz so os nomes das variveis globais. $GLOBALS existe desde PHP 3. $_SERVER Variveis definidas pelo servidor web ou directamente relacionadas com o entorno onde se est a executar.Anloga a antiga matriz $HTTP_SERVER_VARS (a qual ainda est disponvel, ainda que no se utilize). $_GET Variveis proporcionadas ao script por meio de HTTP GET. Anloga a antiga matriz $HTTP_GET_VARS (que ainda est disponvel, ainda que no se utilize). $_POST Variveis proporcionadas ao script por meio de HTTP POST. Anloga a antiga matriz $HTTP_POST_VARS (que ainda est disponvel, ainda que no se utilize). $_COOKIE Variveis proporcionadas ao script por meio de HTTP cookies. Anloga a antiga matriz $HTTP_COOKIE_VARS (que ainda est disponvel, ainda que no se utilize).

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

18

Manuais e recursos para desenvolvimento web www.criarweb.com

$_FILES Variveis proporcionadas ao script por meio da subida de ficheiros via HTTP. Anloga a antiga matriz $HTTP_POST_FILES (que ainda est disponvel, ainda que no se utilize). $_ENV Variveis proporcionadas ao script por meio do entorno. Anloga a antiga matriz $HTTP_ENV_VARS (que ainda est disponvel, ainda que no se utilize). $_REQUEST Variveis proporcionadas ao script por meio de qualquer mecanismo de entrada do usurio e portanto no se pode confiar nelas. A presena e a ordem em que aparecem as variveis nesta matriz so definidas pela directiva de configurao variables_order. Esta matriz no tem um anlogo em verses anteriores a PHP 4.1.0. Veja tambm import_request_variables(). $_SESSION Variveis registradas na sesso do script. Anloga a antiga matriz $HTTP_SESSION_VARS (que ainda est disponvel, ainda que no se utilize). Artigo por Miguel Angel Alvarez - Traduo de JML

Tabelas ou Arrays em PHP


Um tipo de varivel que j descrevemos mas pode ser relativamente complicado de assimilar em relao maioria, so os arrays. Um array uma varivel que est formada de vrios elementos, cada um deles catalogado dentro dele mesmo por meio de uma chave. Nos captulos anteriores pnhamos como exemplo um array chamado sentido que continha os diferentes sentidos do ser humano:
<? $sentido[1]="ver"; $sentido[2]="tocar"; $sentido[3]="ouvir"; $sentido[4]="gosto"; $sentido[5]="cheirar"; ?>

Neste caso este array cataloga os seus elementos, normalmente chamados valores, por nmero. Os nmeros do 1 ao 5 so por conseguinte chaves e os sentidos so os valores associados. Nada nos impede de utilizar nomes (cadeias) para classific-los. A nica coisa que temos de fazer coloc-los entre aspas:
<? $moeda["espanha"]="Peseta"; $moeda["Portugal"]="Escudo"; $moeda["usa"]="Dolar"; ?>

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

19

Manuais e recursos para desenvolvimento web www.criarweb.com

Outra forma de definir identicamente este mesmo array e que nos pode ajudar na criao de arrays mais complexos a seguinte sentena.
<? $moeda=array("espanha"=> "Peseta","portugal" => "Escudo","usa" => "Dolar"); ?>

Uma forma muito prtica de armazenar dados mediante a criao de arrays multidimensionais (tabelas). Suponhamos o seguinte exemplo: Queremos armazenar dentro de uma mesma tabela o nome, moeda e lngua falada em cada pas. Para faz-lo podemos utilizar um array chamado pas que vir definido por estas trs caractersticas (chaves). Para cri-lo, deveramos escrever um expresso do mesmo tipo que a vista anteriormente na que meteremos um array dentro de outro. Este processo de incluir uma instruo dentro de outra chama-se aninhar e muito corrente em programao.
<? $pais=array ( "espanha" =>array ( "nome"=>"Espanha", "lingua"=>"Castelhano", "moeda"=>"Peseta" ), "portugal" =>array ( "nome"=>"Portugal", "lingua"=>"Portugues", "moeda"=>"Escudo" ) ); echo $pais["portugal"]["moeda"] //Saca pelo ecr: "Escudo" ?>

Executar script Antes de entrar em detalhe com este pequeno script, comentemos alguns pontos referentes a sintaxe. Como podemos observar, nesta sequncia de script no introduzimos ponto e vrgula ";" no fim de cada linha. Isto deve-se simplesmente a que o que escrevemos pode ser considerado como uma nica instruo. Na realidade, somos ns quem decidimos cort-la em varias linhas para facilitar a sua leitura. A verdadeira instruo acabaria uma vez definido completamente o array, e a precisamente onde colocamos o nico ponto e vrgula. Por outro lado, podes observar como usamos o tabulador para separar umas linhas mais que outras do princpio. Isto tambm se faz por questes de clareza, pois permite-nos ver que partes esto includas dentro de outras. importante acostumar-se a escrever desta forma assim como a introduzir comentrios pois a clareza dos scripts fundamental na hora de depura-los. Um pouco de esforo pode poupar-nos muitas horas na hora de corrigi-los ou modific-los meses mais tarde. Passando j ao comentrio de programa, como podes ver, este permite-nos armazenar tabelas e a partir de uma simples petio, visualizar um determinado valor pelo ecr. O interessante que a utilidade dos arrays no acaba aqui, podendo tambm utilizar toda uma srie de funes criadas para orden-los por ordem alfabtico directo ou inverso, por chaves, contar o nmero de elementos que compem o array para alm de poder movimentar-mo-nos nele para frente ou para trs.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

20

Manuais e recursos para desenvolvimento web www.criarweb.com

Muitas so as funes propostas por PHP para o tratamento de arrays, no vamos entrar aqui em detalhe das mesmas. Somente incluiremos esta pequena tabela que pode ser complementada, se necessrio, com a documentao que mencionamos. Funo array_values (meu_array) asort(meu_array) e arsort(meu_array) count(meu_array) ksort(meu_array) e krsort(meu_array) list ($variavel1, $variavel2...)=meu_array next(meu_array), prev(meu_array), reset(meu_array) y end(meu_array) each(meu_array) Descrio Lista os valores contidos em meu_array Ordena por ordem alfabtica directa ou inversa em funo dos valores D-nos o nmero de elementos do nosso array Ordena por ordem alfabtica directa ou inversa em funo das chaves Atribui cada varivel a cada um dos valores do array Permite-nos mover por dentro do array com um ponteiro para frente,para trs, ao principio e ao fim. D-nos o valor e a chave do elemento no qual nos encontramos e mexe o ponteiro ao elemento seguinte.

Tambm devemos relembrar a grande utilidade do loop foreach que recorre de forma sequencial o array do princpio ao fim. Artigo por Miguel Angel Alvarez - Traduo de JML

Trabalho com tabelas ou arrays em PHP


Vamos ver vrios exemplos de trabalho com arrays (vetores, matrizes...) em PHP que ilustram um pouco o funcionamento de algumas funes de arrays mais populares que trs consigo PHP. Sem mais, vamos introduzir-nos em matria com vrios exemplos interessantes de uso de vectores.
Referncia: Os arrays em PHP explicam-se no artigo Tabelas ou Arrays em PHP.

Modificar o nmero de elementos de um array Agora vamos ver vrios exemplos nos quais os nossos arrays podem aumentar ou reduzir o nmero de cdulas disponveis. Reduzir o tamanho de um array array_slice() Para diminuir o nmero de clulas de um array temos vrias funes. Entre elas, array_slice() que a utilizaremos quando quisermos recortar algumas clulas do array, sabendo que os ndices das cdulas que desejarmos conservar.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

21

Manuais e recursos para desenvolvimento web www.criarweb.com

Recebe trs parmetros. O array, o ndice do primeiro elemento e o nmero de elementos a tomar, sendo este ultimo parmetro opcional. No seguinte exemplo temos um array com quatro nomes prprios. Na primeira execuo de array_slice() estamos a indicar que desejamos tomar todos os elementos desde o ndice 0 (o principio) at um numero total de 3 elementos. O segundo array_slice() indica que se tomem todos os elementos a partir do ndice 1 (segunda cdula).
<? $entrada = array ("Miguel", "Carlos", "Joaquim", "Joao", "Paulo"); //modifico o tamanho $saida = array_slice ($entrada, 0, 3); //mostro o array foreach ($saida as $atual) echo $atual . "<br>"; echo "<p>"; //modifico outra vez $saida = array_slice ($saida, 1); //mostro o array foreach ($salida as $atual) echo $atual . "<br>"; ?>

Ter como sada: Miguel Carlos Joaquim Carlos Joaquim array_shift() Esta funo extrai o primeiro elemento do array e retorna-o. Alm disso, reduze a longitude do array eliminando o elemente que estava na primeira cdula. Sempre faz o mesmo, pelo tanto, no receber mais nada a no ser o array ao que se deseja eliminar a primeira posio. No cdigo seguinte tem-se o mesmo vetcor com nomes prprios e executa-se duas vezes a funo array_shift() eliminando um elemento em cada ocasio. Imprimem-se os valores que retorna a funo e os elementos do array resultante de eliminar a primeira cdula.
<? $entrada = array ("Miguel", "Carlos", "Joaquim", "Joao", "Paulo"); //elimino a primeira cedula $saida = array_shift ($entrada); //mostro o array echo "A funao retorna: " . $saida . "<br>"; foreach ($entrada as $atual) echo $atual . "<br>";

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

22

Manuais e recursos para desenvolvimento web www.criarweb.com

echo "<p>"; //elimino a primeira cdula, que agora seria a segunda do array original $saida = array_shift ($entrada); echo "A funao retorna: " . $salida . "<br>"; //muestro el array foreach ($entrada as $actual) echo $actual . "<br>"; ?>

D como resultado: A funo retorna: Miguel Carlos Joaquim Joao Paulo A funo retorna: Carlos Joaquim Joao Paulo unset() Utiliza-se para destruir uma varivel dada. No caso dos arrays, pode-se utilizar para eliminar uma cdula de um array associativo (os que no tem numricos mas sendo este uma cadeia de caracteres). Vejamos o seguinte cdigo para conhecer como definir um array associativo e depois eliminar uma das suas cdulas.
<? $estadios_futebol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta"); //mostramos os estadios foreach ($estadios_futebol as $indice=>$atual) echo $indice . " -- " . $atual . "<br>"; echo "<p>"; //eliminamos o estadio associado ao real madrid unset ($estadios_futebol["Real Madrid"]); //mostramos os estadios outra vez foreach ($estadios_futebol as $indice=>$atual) echo $indice . " -- " . $atual . "<br>"; ?>

A sada ser a seguinte: Barcelona -- Nou Camp Real Madrid -- Santiago Bernabeu Valencia -- Mestalla Real Sociedad -- Anoeta

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

23

Manuais e recursos para desenvolvimento web www.criarweb.com

Barcelona -- Nou Camp Valencia -- Mestalla Real Sociedad -- Anoeta Aumentar o tamanho de um array Temos tambm a nossa disposio varias funes que nos podem ajudar a aumentar o nmero de cdulas de um array. array_push() Insere no fim do array uma srie de clulas que se indiquem por parmetro. Portanto, o nmero de clulas de um array aumentar em tantos elementos como se tenham indicado no parmetro da funo. Retorna o numero de clulas do array resultante. Vejamos este cdigo onde se cria um array e se acrescentam a seguir trs novos valores.
<? $tabela = array ("Lagartixa", "Aranha", "Cao", "Gato", "Rato"); //aumentamos o tamanho do array array_push($tabela, "Galinha", "Pombo", "Urso"); foreach ($tabela as $atual) echo $atual . "<br>"; ?>

D como resultado esta sada: Lagartixa Aranha Cao Gato Rato Galinha Pombo Urso array_merge() Agora vamos ver como unir dois arrays utilizando a funo array_merge(). Passando-lhe dois ou mais arrays por parmetro retorna um array com todos os campos dos vetores passados. Neste cdigo de exemplo criamos trs arrays e depois unimo-los com a funo array_merge()
<? $tabela = array ("Lagartixa", "Aranha", "Cao", "Gato", "Rato"); $tabela2 = array ("12","34","45","52","12"); $tabela3 = array ("Sauce","Pinheiro","Laranjeira","Toupeira","Cao","34"); //aumentamos o tamanho do array $resultado = array_merge($tabela, $tabela2, $tabela3); foreach ($resultado as $atual) echo $atual . "<br>"; ?>

Da como resultado:

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

24

Manuais e recursos para desenvolvimento web www.criarweb.com

Lagartixa Aranha Cao Gato Rato 12 34 45 52 12 Sauce Pinheiro Laranjeira Toupeira Cao 34 Por ltimo, dizer que tambm se podem introduzir novas cdulas num array pelos mtodos habituais de atribuir as novas posies do array s cdulas que necessitemos. Em arrays normais faria-se assim:
$tabela = array ("Sauce","Pinheiro","Laranjeira"); $tabela[3]="Pereira";

Em arrays associativos:
$estadios_futebol = array("Valencia" => "Mestalla","Real Sociedad" => "Anoeta"); $estadios_futebol["Barcelona"]= "Nou Camp";

Veremos mais frente outras possibilidades de trabalho com arrays. Artigo por Miguel Angel Alvarez - Traduo de JML

Cadeias
Uma das variveis mais frequentes as que teremos que fazer frente na maioria dos nossos scripts so as cadeias, que no so mais que informao de carcter no numrico (textos, por exemplo). Para atribuir a uma varivel um contedo deste tipo, escrevemo-lo entre aspas dando lugar a declaraes deste tipo:
$cadeia="Esta a informao da minha varivel"

Se queremos ver no ecr o valor de uma varivel ou uma mensagem qualquer usaremos o comando echo como j dissemos anteriormente:
echo $cadeia //sacaria "Esta a informao da minha varivel"

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

25

Manuais e recursos para desenvolvimento web www.criarweb.com

echo " Esta a informao da minha varivel " //daria o mesmo resultado

Podemos concatenar vrias cadeias pondo um ponto entre elas:


<? $cadeia1="Co"; $cadeia2=" morde"; $cadeia3=$cadeia1.$cadeia2; echo $cadeia3 //O resultado : "Co morde" ?>

Executar script Tambm podemos introduzir variveis dentro da nossa cadeia o qual nos pode ajudar muito a desenvolver os nossos scripts. O que veremos no o nome, mas sim o valor da varivel.
<? $a=55; $mensagem="Tenho $a anos"; echo $mensagem //O resultado : "Tenho 55 anos" ?>

Executar script A pergunta que podemos fazer-nos agora ... Ento, como fao para que em vez do valor "55" me saia o texto "$a"? Noutras palavras, como se faz para que o smbolo $ no defina uma varivel mas sim que seja tomado tal qual. Esta pergunta interessante tal que em alguns scripts este smbolo deve ser utilizado por uma simples razo comercial (pago em dlares por exemplo) e se no o escrevermos tal qual, o computador vai pensar que o que vem detrs uma varivel quando no o . Pois bem, pra meter este e outros caracteres utilizados pela linguagem dentro de cadeias e no confundi-las, temos que escrever uma contrabarra a frente: Caracter \$ \" \\ \8/2 Efeito na cadeia Escreve dlar na cadeia Escreve aspas na cadeia Escreve contrabarra na cadeia Escreve 8/2 e no 4 na cadeia

Tambm existem outras utilidades de esta contrabarra que nos permitem introduzir no nosso documento HTML determinados eventos: Caracter \t \n \r Efeito na cadeia Introduz una tabulao no nosso texto Mudamos de linha Salto de linha

Estas mudanas de linha e tabulaes tm unicamente efeito no cdigo e no texto executado pelo navegador. Noutras palavras, se queremos que o nosso texto seja executado mude de linha temos de introduzir um echo " " e no echo"\n" pois este ultimo s muda de linha no ficheiro HTML criado ao enviar ao navegador quando a pgina seja executada no servidor. A diferena entre estes dois elementos
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 26

Manuais e recursos para desenvolvimento web www.criarweb.com

pode ser facilmente compreendida observando o cdigo fonte produzido ao executar o script:
<HTML> <HEAD> <TITLE>mudancalinha.php</TITLE> </HEAD> <BODY> <?echo "Ol, \n continuo na mesma linha executada mas no no cdigo fonte.<br>Agora mudo de linha executada mas continuo na mesma no cdigo fonte."?> </BODY> </HTML>

Executar script D uma vista de olhos ao cdigo fonte do navegador O cdigo fonte que observaramos seria o seguinte: <HTML> <HEAD> <TITLE>mudancalinha.php</TITLE> </HEAD> <BODY> Ol, continuo na mesma linha executada mas no no cdigo fonte.<br>Agora mudo de linha executada mas continuo na mesma no cdigo fonte. </ BODY> </HTML> As cadeias podem ser tratadas por meio de funes de todo tipo. Veremos estas funes mais frente com mais detalhe. S devemos reter que existem muitas possveis aces que podemos realizar sobre elas: Dividi-las em palavras, eliminar espaos que sobram, localizar sequncias, mudar caracteres especiais pelo seu correspondente em HTML ou inclusive sacar as etiquetas META de uma pgina web. Artigo por Miguel Angel Alvarez - Traduo de JML

Funes
No nosso manual de pginas dinmicas vimos o conceito de funo. Vimos que uma funo podia ser definida como um conjunto de instrues que exploram certas variveis para poder realizar uma tarefa mais ou menos elementar. PHP baseia a sua eficcia principalmente neste tipo de elemento. Uma grande livraria que cresce constantemente, medida que novas verses vo surgindo, complementada com as funes prprias dando como resultado um sem fim de recursos que so aplicados com uma simples chamada. As funes integradas em PHP so muito fceis de utilizar. S temos de realizar a chamada da forma apropriada e especificar os parmetros e/ou variveis necessrias para que a funo realize a sua tarefa.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

27

Manuais e recursos para desenvolvimento web www.criarweb.com

O que pode parecer ligeiramente mais complicado, mas que se torna sem lugar a duvidas muito pratico, criar as nossas prprias funes. De uma forma geral, poderamos criar as nossas funes para nos conectarmos a uma base de dados ou criar os cabealhos ou etiquetas META de um documento HTML. Para uma aplicao de comrcio eletrnico poderamos criar, por exemplo funes de mudana de uma moeda a outra ou de calculo de impostos a acrescentar ao preo de um artigo. Em definitiva, interessante criar funes para a maioria de aces mais ou menos sistemticas que realizamos nos nossos programas. Aqui daremos o exemplo da criao de uma funo que, chamada no comeo do script, nos cria o cabealho do nosso documento HTML e coloca o ttulo que queremos na pgina.
<? Function fazer_cabecalho($titulo) { $cabecalho="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n"; echo $cabecalho; } ?>

Esta funo poderia ser chamada ao principio de todas as nossas pginas da seguinte forma:
$titulo="Minha web"; fazer_cabecalho($titulo);

Desta forma automatizamos o processo de criao do nosso documento. Poderamos por exemplo incluir na funo outras variveis que nos ajudassem a construir as etiquetas meta e desta forma, com um esforo mnimo, criaramos os cabealhos personalizados para cada uma das nossas pginas. Desta forma nos possvel criar fins de documento ou formatos diversos para os nossos textos como se fossem de folhas de estilo que teriam a vantagem de ser reconhecidas por todos os navegadores. Claro que, a funo h de ser definida dentro de um script pois no se encontra integrada em PHP, tendo que a criar ns mesmos. Na realidade isto no nos d nenhum problema pois pode ser includa a partir de um ficheiro no qual iremos armazenando as definies das funes que vamos criando ou compilando. Estes ficheiros nos que se guardam as funes chamam-se livrarias. A forma de inclui-los no nosso script a partir da instruo require ou include.
require("livraria.php") ou include("livraria.php")

Resumindo, a coisa ficaria assim: Teramos um ficheiro livraria.php como segue


<? //funo de cabealho e colocao do titulo Function fazer_cabealho($titulo) { $cabecalho="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n"; echo $cabecalho; } ?>

Por outra parte teramos o nosso script principal pagina.php (por exemplo):

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

28

Manuais e recursos para desenvolvimento web www.criarweb.com

<? include("livraria.php"); $titulo="Minha Web"; fazer_cabecalho($titulo); ?> O corpo da pagina

Executar script
Dar uma vista de olhos no cdigo fonte do navegador

Podemos meter todas as funes que formos encontrando dentro de um mesmo ficheiro mas torna-se muito mais vantajoso ir classificando-as em diferentes ficheiros por temtica: Funes de conexo a base de dados, funes comerciais, funes gerais, etc... Isto vai ajudar-nos a localiz-las antes para as corrigir ou modificar, permite-nos tambm carregar unicamente o tipo de funo que necessitamos para o script sem sem recarregar este em excesso para alm de nos permitir utilizar um determinado tipo de livraria para diferentes stios web. Tambm se pode tornar muito prtico utilizar uma nomenclatura sistemtica hora de nomelas: As funes comerciais poderiam ser chamadas com_qqcoisa, as bases de dados bd_qqcoisa, as de tratamento de ficheiros file_qqcoisa, Isto vai permitir reconhece-las rapidamente quando lermos o script sem ter de recorrer a nossa oxidada memria para descobrir a sua utilidade. No obstante, antes de nos lanarmos a criar a nossa prpria funo, vale a pena dar uma vista de olhos documentao para ver se a funo existe ou podemos se nos podemos aproveitar de alguma das existentes para facilitar o nosso trabalho. Assim, por exemplo, existe uma funo chamada header que cria um cabealho HTML configurvel que evita termos que a criar ns mesmos. Como pode ver-se, a tarefa do programador pode nalguns casos parecer-se de um coleccionador. H que ser paciente e metdico e no fim, a base de trabalho prprio, intercmbio e tempo podemos chegar at o nosso pequeno tesouro. Exemplo de funo Vejamos um exemplo de criao de funes em PHP. Trata-se de fazer uma funo que recebe um texto e o escreve na pgina com cada carcter separado por "-". dizer, se recebe "Ola" deve escrever "O-l-a" na pgina web.
Nota: Para compreender este exemplo necessitamos conhecer o loop for, que se explica no captulo Controlo do fluxo em PHP: Loops II.

A maneira de realizar esta funo ser recorrer o string, caracter a caracter, para imprimir cada um dos caracteres, seguido do signo "-". Recorremos o string com um loop for, desde o carcter 0 at ao nmero de caracteres total da cadeia. O nmero de caracteres recebe uma cadeia e obtm-se com a funo predefinida em PHP strlen(), que recebe o string entre parnteses e retorna o nmero dos caracteres que tem.
<html> <head> <title>funo 1</title> </head>

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

29

Manuais e recursos para desenvolvimento web www.criarweb.com

<body> <? function escreve_separa($cadeia){ for ($i=0;$i<strlen($cadeia);$i++){ echo $cadeia[$i]; if ($i<strlen($cadeia)-1) echo "-"; } } escreve_separa ("Ola"); echo "<p>"; escreve_separa ("Texto mais comprido, a ver o que faz"); ?> </body> </html>

A funo que acabmos de criar chama-se escreve_separa e recebe como parmetro a cadeia que h que escrever com o separador "-". O loop for serve-nos para recorrer a cadeia, desde o primeiro ao ultimo caracter. Depois, dentro do loop, imprime-se cada caracter separado pelo signo "-". O if que h dentro do loop for comprova se o atual no seja o ultimo carcter, porque neste caso no teramos que escrever o signo "-" (queremos conseguir "o-l-a" e se no estive-se o if obteramos "o-l-a-"). Neste cdigo fazem-se um par de chamadas funo para ver o resultado obtido com diferentes cadeias como parmetro. Podemos ver o script em funcionamento.. Artigo por Miguel Angel Alvarez - Traduo de JML

Mais sobre funes: passagem de parmetros


Vamos explicar alguns detalhes adicionais sobre a definio e uso de funes, para ampliar o artigo de funes em php. Passagem de parmetros Os parmetros so dados que recebem as funes e as utilizam para realizar as operaes de funo. Uma funo pode receber qualquer nmero de parmetros, ou mesmo nenhum. Na hora de definir a funo, no cabealho, definem-se os parmetros que vai receber.
function f1 ($parametro1, $parametro2)

Assim definimos uma funo f1 que recebe dois parmetros. Como se pode observar, no temos de definir o tipo de dados de cada parmetro. Os parmetros tem validede durante a execuo da funo, isto , tem um mbito local funo de onde se recebem.Quando a funo termina, os parmetros deixam de existir. Os parmetros por valor A passagem de parmetros em PHP realiza-se por valor. "Por valor" uma maneira tpica de

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

30

Manuais e recursos para desenvolvimento web www.criarweb.com

passar parmetros em funes, quer dizer que a modificao de um parmetro no actualiza o dado da varivel como parmetro, apesar de mudarmos o valor do parmetro dentro da funo, a varivel original no se v afectada pela mudana. Veja melhor num exemplo:
function porvalor ($parametro1){ $parametro1="ol"; echo " " . $parametro1; //imprime "ol" } $minhavariavel = "isto no muda"; porvalor ($minhavariavel); echo "<br>" . $minhavariavel; //imprime "isto no muda"

Esta pgina ter como resultado: ol isto no muda Passagem de parmetros por referncia Em contraposio passagem de parmetros por valor, est a passagem de parmetros por referncia. Neste ltimo caso, a mudana do valor de um parmetro dentro de uma funo afecta o valor da varivel original. Podemos passar os parmetros por referncia se, na declarao da funo, colocarmos um "&" antes do parmetro.
<? function porreferencia(&$cadeia) { $cadeia = 'Sim muda'; } $str = 'Isto uma cadeia'; porreferencia ($str); echo $str; // Imprime 'Sim muda' ?>

Este script mostrar pelo ecr 'Sim muda'. Parmetros pr-definidos Podemos definir valores pr-definidos para os parmetros. Os valores pr-definidos servem para que os parmetros contenham algum dado pr-definido, que ser o valor da varivel se no se lhes passa nenhum valor na chamada da funo. Os valores por defeito definem-se atribuindo um dado ao parmetro quando se declara na funo.
function predefinido ($parametro1="Z";$parametro2=3)

Para a definio de funo anterior, $parametro1 tem como valor pr-definido "Z", assim como $parametro2 tem 3 como valor pr-definido. Se chamarmos funo sem indicar valores aos parmetros, estes tornar-se-o valores atribudos.
predefinido () // $parametro1 igual a "Z" e $parametro2 igual a 3

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

31

Manuais e recursos para desenvolvimento web www.criarweb.com

Se chamarmos a funo indicamos um valor, este ser tido em conta para o primeiro parmetro.
predefinido ("ol") // $parametro1 igual a "ol" e $parametro2 igual a 3

Ateno, estamos obrigados a declarar todos os parmetros com valores por defeito no fim. Artigo por Miguel Angel Alvarez - Traduo de JML

Mais sobre funes: Retorno de valores


As funes podem retornar valores. Para isso utiliza-se a palavra "return" indicando a seguir o dado ou varivel que tem que retornar. A funo pode ter mltiplos retun, ainda que s retornar dados por um deles cada vez, isto porque cada vez que se chama a return, terminase a execuo da funo retornando o dado indicado. Exemplo de funo IVA Veremos um novo exemplo para ilustrar o funcionamento de uma funo um pouco mais avanada, que utiliza parte dos novos conceitos introduzidos neste artigo. Trata-se de fazer uma funo que calcula o IVA e que recebe dois parmetros. Um o valor sobre o qual se calcula e o outro a percentagem a aplicar. Se no se indica a percentagem de IVA entende-se que o 19%.
<html> <head> <title>exemplo IVA</title> </head> <body> <? function iva($base,$percentagem=16){ return $base * $porcentagem /100; } echo iva(1000) . "<br>"; echo iva(1000,7) . "<br>"; echo iva(10,0) . "<br>"; ?> </body> </html>

Se os conceitos se perceberam bem, este exemplo no pode resultar difcil. A funo recebe um parmetro chamado $percentagem com 16 como valor pr-definido. Retorna a percentagem dada aplicando a base tambm passada por parmetro. Deste modo, na primeira execuo da funo, como no se indica a percentagem, mostrar-se o 19% de 1000. Na segunda, mostra-se o 7% de 1000 e na terceira o 0% de 10. Retornar mltiplos valores

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

32

Manuais e recursos para desenvolvimento web www.criarweb.com

Uma funo retorna um nico valor. Se queremos fazer que se possam retornar vrios valores diferentes temos que recorrer a um truque que consiste em retornar um array.
function small_numbers() { return array (0, 1, 2); } list ($zero, $one, $two) = small_numbers();

list() usa-se para atribuir uma lista de variveis numa s operao. Depois de essa operao, $zero ter como valor 0, $one ter como valor 1 e $two ter como valor 2. Artigo por Miguel Angel Alvarez - Traduo de JML

Controlo do fluxo em PHP: Condies IF


A programao exige em muitas ocasies a repetio de aces sucessivas ou a escolha de uma determinada sequncia e no de outra dependendo das condies especificas da execuo. Como exemplo, podamos fazer aluso a um script que execute uma sequncia diferente em funo do dia da semana no que nos encontramos. Este tipo de aces podem ser levadas a cabo graas a um conjunto de instrues presentes na maioria das linguagens. Neste captulo vamos descrever algumas delas propostas por PHP e que tem uma utilidade evidente. Para evitar complicar o texto, vamos limitar-nos a introduzir as mais importantes deixando de lado outras que podero ser facilmente assimilveis a partir de exemplos prticos. As condies if Quando queremos que o programa, chegado um certo ponto, tome um caminho concreto em determinados casos e outro diferente se as condies de execuo diferem, partimos do conjunto de instrues if, else e elseif. A estrutura de base para este tipo de instrues a seguinte:
if (condio) { Instruo 1; Instruo 2; ... } else { Instruo A; Instruo B; ... }

Chegados a este ponto, o programa verificar o cumprimento ou no da condio. Se a condio certa as instrues 1 e 2 sero executadas. Do contrario (else), as instrues A y B sero levadas a cabo.
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 33

Manuais e recursos para desenvolvimento web www.criarweb.com

Esta estrutura de base pode complicar-se um pouco mais se tivermos em conta que nem tudo necessariamente preto no brano e que existem muita possibilidades. por isso que outras condies se podem questionar dentro de uma condio principal. Falamos pois de condies aninhadas que teriam uma estrutura do seguinte tipo:
if (condio1) { Instruo 1; Instruo 2; ... } else { if (condio2) { Instruo A; Instruo B; ... } else { Instruo X ... } }

Deste modo, poderamos introduzir o nmero de condies que quisermos dentro de uma condio principal. de grande ajuda a instruo elseif que nos permite numa s linha introduzir uma condio adicional. Este tipo de instruo simplifica ligeiramente a sintaxe que acabmos de ver.
if (condio1) { Instruo 1; Instruo 2; ... } elseif (condio2) { Instruo A; Instruo B; ... } else { Instruo X ... }

O uso desta ferramenta claro com um pouco de prtica. Utilizemos um exemplo simples de utilizao de condies. O seguinte programa permitiria detectar a lngua empregue pelo navegador e visualizar uma mensagem nessa lngua.
<HTML> <HEAD> <TITLE>Detector de Lingua</TITLE> </HEAD> <BODY> <?

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

34

Manuais e recursos para desenvolvimento web www.criarweb.com

//Antes de nada introduzimos mensagens em forma de variveis $portugues="Ola"; $ingles="Hello"; $frances="Bonjour"; //Agora lemos do navegador qual a sua lngua oficial $idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2); //Formulamos as possibilidades que se podem dar if ($idioma == "pt") {echo "$portugues";} elseif ($idioma=="fr") {echo "$frances";} else {echo "$ingles";} ?> </BODY> </HTML>

Executar script Para poder ver o funcionamento deste script necessrio mudar o idioma preferido o qual pode ser realizado a partir do menu de opes do navegador. Para ler a lngua aceite pelo navegador o que fazemos definir uma varivel ($idioma) e, mediante a funo subst, recolhemos as duas primeiras letras do cdigo correspondente ao idioma aceitado pelo navegador ($HTTP_ACCEPT_LANGUAGE). A terceira parte do script encarrega-se de ver se o navegador est em portugus (pt), francs (fr) ou em qualquer outro idioma que no seja nenhum destes dois e de imprimir a mensagem que proceda em cada caso. Temos de destacar que, quando se trata de comparar variveis, pomos um duplo igual "==" em lugar de um simples "=". Este ltimo fica reservado exclusivamente para atribuir valores s variveis. Artigo por Miguel Angel Alvarez - Traduo de JML

Controlo do fluxo em PHP: Loops I


Os computadores, como qualquer mquina, esto desenhados para realizar tarefas repetitivas. por isso que os nossos programas se podem aproveitar desse princpio para realizar uma determinada sequncia de instrues um certo numero de vezes. Para isso utilizamos as estruturas chamadas em loop que nos ajudam a, usando poucas linhas, realizar uma tarefa includa dentro dum loop um certo nmero de vezes definido por ns mesmos. PHP prope vrios tipos de loops, cada um com umas caractersticas especificas: Loop While Sem dvida o loop mais utilizado e mais simples. Usamo-lo para executar as instrues contidas no seu interior sempre que a condio definida seja verdadeira. A estrutura sintctica a seguinte:

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

35

Manuais e recursos para desenvolvimento web www.criarweb.com

while (condio) { instruo1; instruo2; ... }

Um exemplo simples este loop que aumenta o tamanho da fonte numa unidade em cada passagem:
<? $size=1; While ($size<=6) { echo"<font size=$size>Tamanho $size</font><br>\n"; $size++; } ?>

Executar script Como explicao, diremos que, antes de mais, temos de definir o valor da varivel que vamos avaliar na condio. Algo absolutamente bvio mas fcil de esquecer. Neste caso atribumoslhe o valor 1 que corresponde a letra mais pequena. O passo seguinte criar o loop no qual impomos a condio que a varivel no exceda o valor 6. A instruo a executar ser imprimir no nosso documento um cdigo HTML em que a etiqueta font e a mensagem que contm variam medida que $size muda o seu valor. Seguidamente, devemos incrementar numa unidade o valor de $size. Isto pode-se fazer com uma expresso como a mostrada no loop ($size++) que na realidade sinnimo de:
$size=$size+1

Veremos outras abreviaes mais a frente. Outro exemplo do loop While O loop while costuma utilizar-se quando no se sabe exactamente quantas iteraes se devem realizar antes de acabar. Utilizamo-lo num outro exemplo, no qual temos de recorrer uma cadeia at encontrar um carcter dado. Se o encontra, escrever a sua posio. Se no, escrever que no se encontrou.
Nota: Para fazer este exerccio necessitamos de conhecer a funo de cadeia strlen(), que obtm a longitude da cadeia que se passa por parmetro. int strlen (string cad) Retorna um inteiro igual ao tamanho da cadeia. <? $cadeia = "Ola a todo o mundo"; //recorro a cadeia at encontrar uma "m" $i=0; while ($cadeia[$i]!="m" && $i< strlen($cadeia)) { $i++; }

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

36

Manuais e recursos para desenvolvimento web www.criarweb.com

if ($i==strlen($cadeia)) echo "No se encontra..."; else echo "Est na posio $i"; ?>

Neste exemplo define-se uma cadeia com o valor "Ola a todos". Posteriormente recorre-se essa cadeia at finalizar ou at encontrar o carcter "m", utilizando uma varivel $i que assentando o numero de caracteres recorridos. No fim do loop while, se samos do loop porque se encontrou o carcter "m", a varivel $i ter como valor um nmero menor que o tamanho da cadeia. Se saiu do loop por chegar ao fim da cadeia, a varivel $i ter um valor igual ao do tamanho da cadeia, e por tanto, obtemos que no se achou o carcter passado por parmetro. Podemos ver o exemplo em funcionamento. Loop do/while Este tipo de loop no difere em excesso do anterior. A sintaxe a seguinte:
do { instruo1; instruo2; ... } while (condio)

A diferena em relao aos loops while que este tipo de loop avalia a condio no final, o que quer dizer que, inclusive sendo falsa a condio desde um principio, este executa-se pelo menos uma vez. Artigo por Miguel Angel Alvarez - Traduo de JML

Controlo do fluxo em PHP: Loops II


Loop for PHP tem outros tipos de loops que tambm so muito prticos em determinadas situaes. O mais popular o loop for que, como nos casos anteriores, se encarrega de executar instrues entre chaves. A diferena para com os anteriores radica na forma como se especifica a condio de finalizao do loop. Para esclarecer o seu funcionamento vamos expressar o exemplo do loop while visto no captulo anterior em forma de loop for:
<? For ($size=1;$size<=6;$size++) { echo"<font size=$size>Tamanho $size</font><br>\n"; } ?>

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

37

Manuais e recursos para desenvolvimento web www.criarweb.com

Executar script As expresses dentro do parntese definem respectivamente: Inicializao da varivel. Valida para o primeiro recorrido do loop. Condio de avaliao em cada recorrido. Se for certa, o loop continua. A realizar no final de cada recorrido do loop.

Loop foreach Este loop, implementado nas verses 4 de PHP, ajuda-nos a recorrer os valores de um array o que pode ser muito til para, por exemplo, efectuar uma leitura rpida do mesmo. Recordamos que um array s uma varivel que guarda um conjunto de elementos (valores) catalogados por chaves. A estrutura geral a seguinte:
Foreach ($array as $chave=>$valor) { instruo1; instruo2; ... }

Um exemplo prtico a leitura de um array que se poderia fazer do seguinte modo:


<? $moeda=array("Espanha"=> "Peseta","Portugal" => "Escudo","USA" => "Dolar"); Foreach ($moeda as $chave=>$valor) { echo "Pais: $chave Moeda: $valor<br>"; } ?>

Executar script Este script encarrega-se de nos mostrar pelo ecr o contedo do array $moeda. No seria m ideia criar uma funo prpria baseada neste loop que nos permitisse visualizar arrays unidimensionais e armazen-la na nossa livraria. Esta funo poderia ser definida desta forma:
Function mostrar_array ($array) { Foreach ($array as $chave=>$valor) { echo "$chave=>$valor<br>"; } }

Break e Continue Estas duas instrues introduzem-se dentro da estrutura e servem-nos respectivamente para sair do loop e para saltar a seguinte iterao. Podem ser muito teis nalgumas situaes. Artigo por Miguel Angel Alvarez - Traduo de JML

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

38

Manuais e recursos para desenvolvimento web www.criarweb.com

Operadores
As variveis, como base da informao de uma linguagem, podem ser criadas, modificadas e comparadas com outras por meio dos chamados operadores. Nos captulos anteriores utilizmos nos nossos exemplos alguns deles. Neste captulo pretendemos dar a conhecer os mais importantes para os usar em futuros exemplos. Operadores aritmticos Permitem-nos realizar operaes numricas com as nossas variveis. + * / Soma Subtraco Multiplicao Diviso

% Retorna o resto da diviso


Referncia: O operador aritmtico que pode ser o mais desconhecido para os leitores o operador %. Explicaremos com mais pormenores o seu funcionamento noutro captulo.

Operadores de comparao Utilizam-se principalmente, nas nossas condies, para comparar duas variveis e verificar se cumprem ou no a propriedade do operador. = = != < Igualdade Desigualdade Menor que

< Menor igual que = > Maior que > Maior igual que = Operadores lgicos Usam-se em combinao com os operadores de comparao quando a expresso da condio assim o requer. And Or ! Operadores de incremento Servem para aumentar ou diminuir numa unidade o valor de uma varivel E Ou No

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

39

Manuais e recursos para desenvolvimento web www.criarweb.com

++ $variavel --$variavel Operadores combinados

Aumenta em 1 o valor de $variavel Diminui em 1 o valor de $variavel

Uma forma habitual de modificar o valor das variveis atravs dos operadores combinados: $variavel += 10 $variavel -= 10 $variavel .= "acrescento" Soma 10 $variavel Subtrai 10 $variavel Concatena as cadeias $variavel e "acrescento"

Este tipo de expresses no so mais do que abreviaes de outras formas mais clssicas: $variavel += 10 o mesmo que: $variavel = $variavel +10 Artigo por Miguel Angel Alvarez - Traduo de JML

Passagem de variveis pela URL


Loops e condies so teis para processar os dados dentro de um mesmo script. Mas, num stio de internet, as pginas visitadas e os scripts utilizados so numerosos. Frequentemente precisamos que os nossos scripts estejam conectados uns com os outros e que utilizem variveis comuns. Por outro lado, o usurio interage por meio de formulrios cujos campos tm de ser processados para poder dar resposta. Todo este tipo de factores dinmicos tm de ser eficazmente regulados por uma linguagem como PHP. possvel que se tenham apercebido que as variveis de um script tm uma validez exclusiva para o script e que se torna impossvel conservar o seu valor quando executamos outro ficheiro diferente ainda que ambos estejam ligados. Existem vrias formas de enviar as variveis de uma pgina a outra de maneira que a pgina destino reconhea o valor atribudo pelo script de origem: Passagem de variveis pela URL Para passar as variveis de uma pgina a outra podemos faz-lo introduzindo a varivel dentro do link hipertexto da pgina destino. A sintaxe seria a seguinte:
<a href="destino.php?variavel=valor1&variavel2=valor2&...">Meu link</a>

Podem observar que estas variveis no possuem o smbolo $ frente. Isto por que, na realidade, este modo de passar variveis no especfico de PHP, sendo utilizado por outras linguagens. Agora a nossa varivel pertence tambm ao entorno da pgina destino.php e est pronta para a sua utilizao.
Nota: Nem sempre se definem automaticamente as variveis recebidas por parmetro nas pginas web,

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

40

Manuais e recursos para desenvolvimento web www.criarweb.com

depende de una varivel de configurao de PHP: register_globals, que tem de estar activada para que assim seja. Ver comentrios do artigo ao final da pgina para mais informao.

Para resolver possveis dvidas, vejamos isto em forma de exemplo. Teremos, pois duas pginas, origem.html (no necessrio dar-lhe extenso PHP pois no h nenhum tipo de cdigo) e destino.php:
<HTML> <HEAD> <TITLE>origem.html</TITLE> </HEAD> <BODY> <a href="destino.php?comprimento=ola&texto=Isto uma varivel de texto">Passo variveis comprimento e texto pgina destino.php</a> </BODY> </HTML> <HTML> <HEAD> <TITLE>destino.php</TITLE> </HEAD> <BODY> <? echo "Varivel \$comprimento: $comprimento <br>\n"; echo "Varivel \$texto: $texto <br>\n" ?> </BODY> </HTML>

Executar exemplo $_GET Relembramos que possvel compilar numa s varivel tipo array o conjunto de variveis que foram enviadas ao script por este mtodo a partir da varivel de sistema $_GET, que um array associativo. Utilizando-o ficaria assim:
<? echo "Varivel \$comprimento: $_GET_["comprimento"] <br>\n"; echo "Varivel \$texto: $_GET["texto"] <br>\n" ?> Nota: Ainda que possamos recolher variveis com este array associativo ou utilizar directamente as variveis que se definem na nossa pgina, mais seguro utilizar $_GET por duas razes, a primeira que assim temos a certeza que essa varivel vem realmente da URL e a segunda, que assim o nosso cdigo ser mais claro quando o quisermos ler, porque ficar especificado que estamos a receber essa varivel pela URL.

Artigo por Miguel Angel Alvarez - Traduo de JML

Processar variveis de formulrios


Este tipo de transferncia de uma grande utilidade pois permite-nos interagir directamente com o usurio. Este processo similar ao explicado para as URLs. Em primeiro lugar, apresentamos uma
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 41

Manuais e recursos para desenvolvimento web www.criarweb.com

primeira pgina com o formulrio clssico para preencher e as variveis so recolhidas numa segunda pgina que as processa:
Nota: Nem sempre se definem automaticamente as variveis recebidas por parmetro nas pginas web, depende de uma varivel de configurao de PHP: register_globals, que tem de estar activada para que assim seja. Ver comentrios do artigo ao final da pgina para mais informao. <HTML> <HEAD> <TITLE>formulario.html</TITLE> </HEAD> <BODY> <FORM METHOD="POST" ACTION="destino2.php"> Nome<br> <INPUT TYPE="TEXT" NAME="nome"><br> Apelidos<br> <INPUT TYPE="TEXT" NAME="apelidos"><br> <INPUT TYPE="SUBMIT"> </FORM> </BODY> </HTML> <HTML> <HEAD> <TITLE>destino2.php</TITLE> </HEAD> <BODY> <? echo "Varivel \$nome: $nome <br>\n"; echo "Varivel \$apelidos: $apelidos <br>\n" ?> </BODY> </HTML>

Executar exemplo $_POST Relembramos que possvel compilar numa s varivel tipo array o conjunto de variveis que foram enviadas ao script por este mtodo a partir da varivel de sistema $_POST:
echo "Varivel \$nome: " . $_POST["nome"] . "<br>\n"; Nota: Ainda que possamos recolher variveis com este array associativo ou utilizar diretamente as variveis que se definem na nossa pgina, torna-se mais seguro utilizar $_POST por duas razes, a primeira que assim temos a certeza que essa varivel vem realmente de um formulrio e a segunda, que assim o nosso cdigo ser menos confuso quando queiramos l-lo, porque ficar especificado que estamos a receber essa varivel atravs de um formulrio.

Exemplo de restrio de acesso por idade Para continuar com exemplos de uso de formulrios vamos realizar uma pgina que mostra e solicita a idade do visitante e, dependendo da sua idade, permite ou no visualizar o contedo da web. A maiores de 18 anos -lhes permitido ver a pgina e a menores no. O exemplo muito simples e no seria correcto para utiliz-lo tal e qual a modo de uma verdadeira barreira de acesso. S nos serve para saber como obter dados de um formulrio e como trat-los para realizar uma ou outra aco, dependendo do seu valor. A pgina do formulrio, qual demos o nome idade.php, teria o seguinte aspecto:
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 42

Manuais e recursos para desenvolvimento web www.criarweb.com

<html> <head> <title>Restringir por idade</title> </head> <body> <form action="idade2.php" method="post"> Escreve a tua idade: <input type="text" name="idade" size="2"> <input type="submit" value="Entrar"> </form> </body> </html>

Esta uma pgina sem nenhum cdigo PHP, simplesmente tem um formulrio. Se repararmos no action do formulrio, que est dirigido a uma pgina chamada idade2.php, que a que receber o valor da idade e mostrar um contedo ou outro dependendo desse valor. O seu cdigo seria o seguinte:
<html> <head> <title>Restringir por idade</title> </head> <body> <? $idade = $_POST["idade"]; echo "Tua idade: $idade<p>"; if ($idade < 18) { echo "No podes entrar"; }else{ echo "Bemvindo"; } ?> </body> </html>

Esperamos que este outro cdigo tambm no seja estranho. Simplesmente o formulrio recebe a idade, utilizando o array $_POST. A seguir, mostra-se a idade e executa-se uma expresso condicional em funo de que a idade seja menor que 18. Em caso positivo (idade menor que 18), mostra-se uma mensagem que informa que no se pode aceder pgina. Em caso negativo (maior ou igual a 18) mostra-se uma mensagem de Boas-vindas. Podemos ver o exemplo em funcionamento. Artigo por Miguel Angel Alvarez - Traduo de JML

Autochamada de pginas
Ao incluir um formulrio numa pgina deve-se indicar, atravs do atributo action, o nome do

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

43

Manuais e recursos para desenvolvimento web www.criarweb.com

ficheiro PHP ao que enviaremos os dados escritos no formulrio. Desta maneira, para um esquema de envio de dados por formulrio, podem participar duas pginas: uma que contm o formulrio e outra que recebe os dados de dito formulrio. O mesmo acontece quando enviamos variveis pela URL. Temos uma pgina que conter o link e outra pgina que receber e tratar esses dados para mostrar uns resultados. Neste artigo vamos ver como se pode enviar e receber dados de um formulrio com uma nica pgina. Tambm veremos como na mesma pgina podemos ter links com passagem de variveis pela URL e podemos recolher e tratar esses dados com a mesma pgina. A este efeito podemos chamar-lhe "autochamada de pginas", mas tambm normal dar-lhe o nome de "formulrios reentrantes" ou trminos similares. muito interessante conhecer o modo de funcionamento destes scripts, porque sero muito habituais nas nossas pginas PHP e ajudam muito a ter os cdigos ordenados. Em ambos casos, para formulrios o envio de dados pela URL, deve-se seguir um esquema como este: Comprovar se recebo dados pela URL ou pelo formulrio Se no recebo dados Mostro o formulrio e os links que pasma as variveis Se recebo dados Tenho de processar o formulrio ou as variveis da URL

Para um formulrio Vejamos a continuao como seria o cdigo de um formulrio reentrante.


<html> <head> <title>Chamo-me a mim mesmo...</title> </head> <body> <? if (!$_POST){ ?> <form action="auto-chamada.php" method="post"> Nome: <input type="text" name="nome" size="30"> <br> Empresa: <input type="text" name="empresa" size="30"> <br> Telefone: <input type="text" name="telefone" size=14 value="+351 " > <br> <input type="submit" value="Enviar"> </form> <? }else{ echo "<br>Seu nome: " . $_POST["nome"]; echo "<br>Sua empresa: " . $_POST["empresa"]; echo "<br>Seu Telefone: " . $_POST["telefone"]; } ?> </body> </html>

No exemplo, o primeiro passo conhecer se se esto a receber ou no os dados atravs de um formulrio. Pra isso comprova-se com um enunciado if se existe ou no uma varivel $_POST.
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 44

Manuais e recursos para desenvolvimento web www.criarweb.com

Em concreto if (!$_POST) quer dizer algo assim como "Se no existem dados provenientes de um formulrio". No caso de que no existam, mostro o formulrio. Em caso de que efetivamente existam, recolho os dados e imprimo-os na pgina. Pode-se ver o exemplo em funcionamento noutra pgina. Para passagem de variveis pela URL A idia a mesma. Verificar com um enunciado if se os dados so recebidos desde uma URL. Vejamos o cdigo a continuao. Trata-se de uma pgina que mostra uma serie de links para ver as tabuadas do 1 ao 10. Cada um dos links mostra uma tabuada. Pressionando o primeiro link podemos ver a tabuada do 1, no segundo a tabuada do 2, etc. Recordemos que a pgina chama-se a si mesma. Para compreende-la mais facilmente interessante ve-la em funcionamento.
<html> <head> <title>Tabuadas</title> </head> <body> <? if (!$_GET){ for ($i=1;$i<=10;$i++){ echo "<br><a href='ver_tabuada.php?tabuada=$i'>Ver a tabuada do $i</a>\n"; } } else { $tabuada=$_GET["tabuada"]; ?> <table align=center border=1 cellpadding="1"> <? for ($i=0;$i<=10;$i++){ echo "<tr><td>$tabuada X $i</td><td>=</td><td>" . $tabuada * $i . "</td></tr>\n"; } ?> </table> <? } ?> </body> </html>

Este cdigo um pouco mais complicado, porque faz bastantes mais coisas que o anterior, mas para o assunto que nos preocupa que a autochamada de pginas, tudo continua igual de simples. Temos de reparar que o if verifica se recebemos dados pela URL: if ($_GET), que quer dizer algo como "Se no se recebem variveis pela URL". Em caso positivo (no se recebem dados pela URL) mostram-se os links para ver cada uma das tabuadas e em caso de receber dados, mostra-se a tabuada do nmero que se est a receber na URL. Para mostrar os links e as tabuadas utilizam-se loops for, que esperamos que no resultem

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

45

Manuais e recursos para desenvolvimento web www.criarweb.com

desconhecidos para o leitor. Pode ficar-se a conhecer mais sobre loops for em Controlo de fluxo em PHP: Loops II. Artigo por Miguel Angel Alvarez - Traduo de JML

Utilizao de cookies
Sem dvida este trmino resulta familiar para muitos. Alguns tero lido ou ouvido falar mas no sabem de que se trata. Outros, sabero que as cookies so "umas informaes" armazenadas por um sitio web no disco rgido do usurio. Esta informao armazenada num ficheiro tipo texto que se guarda quando o navegador acede ao sitio web. possvel, evidentemente, ver estes ficheiros. Para abri-los h que ir ao diretrio C:\Windows\Cookies para os usurios de IE 4+ ou a C:\...\Netscape\User\defaultuser para os usurios de Netscape. Como podem comprovar, na maioria dos casos a informao que se pode obter indecifrvel. A utilidade principal das cookies permitir ao navegador, quando o cliente visita por segunda vez um sitio web, em funo do perfil que o cliente deu na sua primeira visita, poder adaptarse dinamicamente s suas preferncias (lngua utilizada, cores do ecr, formulrios preenchidos total ou parcialmente...) Para criar um ficheiro cookie, modificar ou gerar uma nova cookie faze-lo-emos a partir da funo SetCookie:
setcookie("nome_da_cookie",valor,expirao);

Ponhamos um exemplo simples. Imaginemos que queremos introduzir numa varivel cookie o nome do visitante. O nome pode ter sido recolhido previamente por um formulrio tal e como vimos:
setcookie("pessoa",$nome,time()+86400*365);

Deste modo, criamos uma cookie chamada pessoa que tem como valor o contedo da varivel $nome e ter uma durao de 1 ano a partir da sua criao (o tempo time() atual em segundos somado a um ano em segundos) importante que a criao da cookie seja prvia a apertura do documento HTML. Noutras palavras, as chamadas funo setcookie() devem ser colocadas antes da primeira etiqueta HTML Por outro lado, interessante apontar que o feito de definir uma cookie j existente implica que a antiga seja apagada. Do mesmo modo, ao criar uma primeira cookie leva consigo a gerao automtica do ficheiro texto. Para utilizar o valor da cookie nos nossos scripts s teremos de chamar a varivel que define a cookie. Realmente simples! H que ter cuidado em no definir variveis no nosso script com o mesmo nome que as cookies pois PHP dar privilegio ao contedo da varivel local em relao a cookie e no
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 46

Manuais e recursos para desenvolvimento web www.criarweb.com

mostrar mensagem de erro. Isto pode conduzir-nos a erros realmente complicados de detectar. Lembramos que possvel compilar numa varivel de tipo array o conjunto de cookies armazenadas no disco rgido do cibernauta mediante a varivel de servidor $HTTP_COOKIE_VARS As cookies so uma ferramenta fantstica para personalizar a nossa pgina mas temos de ter cuidado pois no todos os navegadores permitem a utilizao de cookies e podemos deliberadamente no querer a criao de cookies. Vemos que as cookies so um complemento e no uma fonte de variveis infalvel para o nosso site. Artigo por Miguel Angel Alvarez - Traduo de JML

Sesses I
Nos programas que vimos at agora, utilizmos variveis que s existiam no ficheiro que era executado. Quando carregvamos outra pgina diferente, os valores destas variveis perdiamse a no ser que nos incomodssemos em passa-los pela URL ou inscrev-los nos cookies ou num formulrio para a sua posterior utilizao. Estes mtodos, ainda que teis, no so de todo prticos pois em determinadas situaes nas que a varivel que queremos conservar tem de ser utilizada em vrios scripts diferentes e distantes entre si. Poderamos pensar que esse problema pode ficar resolvido com as cookies pois so variveis que podem ser invocadas em qualquer momento. O problema, como j dissemos, que os cookies no so aceitos nem pela totalidade dos usurios nem pela totalidade dos navegadores o que implica que uma aplicao que se servisse das cookies para passar variveis de um ficheiro a outro no seria 100% infalvel. importante s vezes pensar "na imensa minoria", sobretudo em aplicaes de comrcio eletrnico onde devemos captar a maior quantidade de possveis clientes e portanto, os nossos scripts devem estar preparados para qualquer eventual deficincia do navegador do cliente. Visto isto, tona-se necessrio poder declarar certas variveis que possam ser reutilizadas tantas vezes como queiramos dentro da mesma sesso. Imaginemos um site multilingue em que cada vez que queremos imprimir uma mensagem em qualquer pgina necessitamos de saber em que idioma se deve fazer. Poderamos introduzir um script identificador da lngua do navegador em cada um dos ficheiros ou bem declarar uma varivel que fosse vlida para toda a sesso e que tivesse como valor o idioma reconhecido no primeiro momento. Pensemos tambm num carrinho de compras de uma loja virtual onde o cliente vai navegando pelas pginas do site e acrescenta os artigos que querem comprar ao carrinho. Este carrinho poderia ser perfeitamente uma varivel de tipo array (tabela) que armazena para cada referncia a quantidade de artigos contidos no carrinho. Esta varivel deveria ser obviamente conservada ao longo de todos os scripts. Este tipo de situaes so resolvidas a partir de variveis de sesso. Uma sesso considerada como o intervalo de tempo empregue pelo usurio em recorrer as nossas pginas at que abandona o nosso site ou deixa de trabalhar sobre ele durante um tempo prolongado e obviamente tambm, se simplesmente, fecha o navegador.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

47

Manuais e recursos para desenvolvimento web www.criarweb.com

PHP permite-nos armazenar variveis chamadas de sesso que, uma vez definidas, podem ser utilizadas durante este lapso de tempo por qualquer um dos scripts do nosso site. Estas variveis sero especficas do usurio de modo que podem coexistir diversas variveis de sesso do mesmo tipo com diferentes valores para cada uma das sesses que esto a ter lugar simultaneamente. Estas sesses tm o seu prprio identificador de sesso que ser nico e especfico. Alguns melhoramentos referentes utilizao de sesses foram introduzidos com PHP4. Nesta nova verso a que faremos referncia na hora de explicar as funes disponveis e a forma de operar. Para os programadores de PHP3 a maior diferena que esto obrigados a gerir eles mesmos as sesses e definir os seus prprios identificadores de sesso. Vejamos no seguinte captulo a forma de plasmar esta necessidade tcnica nos nossos scripts a partir das funes que gerem as sesses em PHP. Artigo por Miguel Angel Alvarez - Traduo de JML

Sesses II
Tnhamos dito no captulo anterior que as vaiveis de sesso se diferenciam das variveis clssicas em que estas residem no servidor, so especificas de um s usurio definido por um identificador e que podem ser utilizadas na globalidade das nossas pginas. Para iniciar uma sesso podemos faz-lo de duas maneira diferentes: Declaramos abertamente a abertura de sesso atravs da funo session_start(). Esta funo cria uma nova sesso para um novo visitante ou recupera a que se estava a utilizar. Declaramos uma varivel de sesso por meio da funo session_register('variavel'). Estas funo, para alem de recuperar a sesso para a pgina em que se inclui tambm serve para introduzir uma nova varivel de tipo sesso.

As sesses devem ser iniciadas ao principio do nosso script. Antes de abrir qualquer etiqueta ou de imprimir seja o que for. Em caso contrario obteremos um erro. Visto isto, vamos propor um exemplo clssico de utilizao de uma sesso: um contador. Este contador dever aumentar numa unidade cada vez que reabrimos a pgina ou apertamos o link.
<? session_register('contador'); ?> <HTML> <HEAD> <TITLE>contador.php</TITLE> </HEAD> <BODY> <? If (isset($contador)==0) { $contador=0; } ++$contador; echo "<a href="contador.php">Abriste esta pgina $contador vezes</a>"; Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 48

Manuais e recursos para desenvolvimento web www.criarweb.com

?> </BODY> </HTML>

Executar Script A condio if tem em conta a possibilidade de que a varivel $contador no tenha sido ainda iniciada. A funo isset encarrega-se de lhe dar o valor 0 quando uma varivel ainda no foi iniciada. Outras funes teis para a gesto de sesses so: Funo Session_id() Session_destroy() Descrio Retorna-nos o identificador da sesso D por abandonada a sesso eliminando variveis e identificador.

Session_unregister('variave Abandona uma varivel de sesso l') Se ests procura de mais funes ou de informao adicional sobre sesses, consulta o manual oficial de PHP. Artigo por Miguel Angel Alvarez - Traduo de JML

Trabalhar com bases de dados em PHP


Uma das principais vantagens de trabalhar com pginas dinmicas, poder armazenar os contedos em bases de dados. Desta forma, podemos organiz-los, actualiz-los e procur-los de uma maneira muito mais simples. Como j dissemos, a linguagem PHP oferece interfaces para o acesso a maioria das bases de dados comerciais e por ODBC a todas as bases de dados possveis em sistemas Microsoft, a partir das quais poderemos editar o contedo do nosso site com extrema facilidade. Esta interaco realiza-se, por um lado, a partir das funes que PHP nos propem para cada tipo de base de dados e, por outro estabelecendo um dilogo a partir de um idioma universal: SQL (Structured Query Language) o qual comum a todas as bases de dados. Esta linguagem torna-se, como veremos no tutorial de SQL, muito potente e fcil de aprender. Neste manual de PHP vamos limitar-nos utilizao de instrues SQL bsicas que sero aprendidas a medida que explicamos as diferentes formas de actuar sobre uma base de dados deixando para o tutorial de SQL os aspectos mais avanados. Como base de exemplo de estes captulos escolhemos MySQL, sem dvida a base de dados mais utilizada em conjunto com PHP. O ser de graa, eficcia e simplicidade fazem-na uma boa candidata. J explicmos em captulos anteriores a sua instalao ao mesmo tempo que presentmos os comandos de base que nos podem permitir aborda-la com relativa facilidade.
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 49

Manuais e recursos para desenvolvimento web www.criarweb.com

No caso de utilizar qualquer outra base compatvel, as correces que temos de fazer em relao aos nossos exemplos no so excessivamente grandes e a leitura de esses captulos continua a ser de grande utilidade. Uma vez instalado MySQL e antes de poder comear com os nossos exemplos, ser necessrio realizar as seguintes operaes: - Introduzidos dentro de MySQL, criaremos a base de dados exemplo com a seguinte sentena:
create database exemplo;

- Seleccionaremos a base exemplo como a base a ser utilizada:


use exemplo

- A seguir, criamos a tabela clientes a partir da seguinte sentena:


create table clientes (nome varchar(100),telefone varchar(100));

Agora j temos nossa disposio a nossa tabela vazia. S resta comear a preenche-la com dados que iremos introduzindo. Artigo por Miguel Angel Alvarez - Traduo de JML

Insero de novos registos


Uma vez criada a tabela clientes na nossa base de dados exemplo, o seguinte passo ser preenche-la com registos. Os dados do registo podem ser obtidos, por exemplo, a partir de um formulrio. Aqui vos propomos um simples documento HTML que recolhe os dados e os envia a uma pgina PHP que se encarrega de processa-los.
<HTML> <HEAD> <TITLE>Inserir.html</TITLE> </HEAD> <BODY> <div align="center"> <h1>Inserir um registo</h1> <br> <FORM METHOD="POST" ACTION="inserir.php"> Nome<br> <INPUT TYPE="TEXT" NAME="nome"><br>Telefone<br> <INPUT TYPE="TEXT" NAME="telefone"><br><INPUT TYPE="SUBMIT" value="Inserir"> </FORM> </div> </BODY> </HTML>

Uma vez na pgina destino do formulrio (inserir.php), o primeiro que teremos de fazer

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

50

Manuais e recursos para desenvolvimento web www.criarweb.com

estabelecer um vnculo entre o programa e a base de dados. Esta ligao faz-se atravs da funo mysql_connect. A seguir, devemos gerar uma ordem de insero do registo na linguagem SQL. Esta ordem ser executada por meio da funo mysql_db_query. Nesta funo especificaremos a base de dados sobre a que queremos trabalhar e a continuao incluiremos a sentena SQL:
<HTML> <HEAD> <TITLE>Inserir.php</TITLE> </HEAD> <BODY> <? //Ligao base mysql_connect("localhost","user","password"); //Execuo da sentena SQL mysql_db_query("exemplo","insert into clientes (nome,telefone) values ('$nome','$telefone')"); ?> <h1><div align="center">Registo Inserido</div></h1> <div align="center"><a href="leitura.php">Visualizar o contedo da base</a></div> </BODY> </HTML>

Executar exemplo Os parmetros user e password so definidos para o criador da base. conveniente ao princpio, ao criar as nossas bases, trabalhar sem eles com o qual deixaremos esses campos vazios: "". Para alm da prpria insero, o programa avisa da introduo do registo e oferece um link a uma pgina de leitura a qual ser comentada a continuao. Artigo por Miguel Angel Alvarez - Traduo de JML

Seleco e leitura de registos


Dentro de uma base de dados, organizada por tabelas, a seleco de uma tabela inteira ou de um certo nmero de registos tornar-se- uma operao habitual. Aqui mostramos uma forma bastante clssica de mostrar pelo ecr os registos seleccionados por uma sentena SQL atravs de um loop:
<HTML> <HEAD> <TITLE>leitura.php</TITLE> </HEAD> <BODY> <h1><div align="center">Leitura da tabela</div></h1> <br> <br> <? //Ligao com a base mysql_connect("localhost","user","password"); //Executamos a sentena SQL $result=mysql_db_query("exemplo","select * from clientes"); ?> <table align="center"> Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 51

Manuais e recursos para desenvolvimento web www.criarweb.com

<tr> <th>Nome</th> <th>Telefone</th> </tr> <? //Mostramos os registos while ($row=mysql_fetch_array($result)) { echo '<tr><td>'.$row["nome"].'</td>'; echo '<td>'.$row["telefone"].'</td></tr>'; } mysql_free_result($result) ?> </table><div align="center"> <a href="inserir.html">Acrescentar um novo registo</a><br> <a href="actualizar1.php">Actualizar um registro existente</a><br> <a href="apagar1.php">Apagar um registro</a><br> </div> </BODY> </HTML>

Executar script Os passos a realizar so, em princpio, os vistos para a insero de um registo: Conexo base de dados e execuo da sentena. Esta vez, a informao da execuo ser armazenada numa varivel ($result). O que fazemos a seguir visualizar no ecr a informao recolhida em $result. Faremos isto mediante a funo mysql_fetch_array que retorna uma varivel array com os contedos de um registo ao mesmo tempo que se posiciona sobre o seguinte. O loop while permite-nos ler e imprimir sequencialmente cada um dos registos. A funo mysql_free_results encarrega-se de liberar a memria utilizada para executar a consulta. Ainda que no seja necessria a sua utilizao, altamente aconselhvel. Artigo por Miguel Angel Alvarez - Traduo de JML

Actualizao de um registo
Para mostrar como se actualiza um registo presente na nossa base de dados, vamos faz-lo a partir de um caso um pouco mais complexo para que comecemos a familiarizar-nos com estas operaes. Realizaremos um par de scripts que permitam mudar o nmero de telefone das diferentes pessoas presentes na nossa base. O nome destas pessoas, assim como o novo nmero de telefone, sero recolhidos atravs de um formulrio. Este ficheiro do formulrio vai ser de esta vez um script PHP no que efectuaremos uma chamada nossa base de dados para construir um menu dinmico onde apaream todos os nomes. Ficaria assim:
<HTML> <HEAD> <TITLE>Actualizar1.php</TITLE> </HEAD> <BODY> <div align="center">

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

52

Manuais e recursos para desenvolvimento web www.criarweb.com

<h1>Actualizar um registo</h1><br> <? //Conexo base mysql_connect("localhost","user","password"); echo '<FORM METHOD="POST" ACTION="actualizar2.php">Nombre<br>'; //Criamos a sentena SQL e executamo-la $sSQL="Select nome From clientes Order By nome"; $result=mysql_db_query("exemplo",$sSQL); echo '<select name="nome">'; //Geramos o menu dinmico while ($row=mysql_fetch_array($result)) { echo '<option>'.$row["nome"]; } ?> </select><br>Telefone<br><INPUT TYPE="TEXT" NAME="telefone"> <br> <INPUT TYPE="SUBMIT" value="Actualizar!"> </FORM> </div> </BODY> </HTML>

A maneira de trabalhar para construir o menu dinmico a mesma que para visualizar a tabela. Novamente empregamos um loop while em combinao com a funo mysql_fetch_array o que nos permite mostrar cada uma das opes. O script de actualizao seria muito parecido ao de insero:
<HTML> <HEAD> <TITLE>Actualizar2.php</TITLE> </HEAD> <BODY> <? //Conexo com a base mysql_connect("localhost","user","password"); //Criamos a sentena SQL e executamo-la $sSQL="Update Clientes Set telefone='$telefone' Where nome='$nome'"; mysql_db_query("exemplo",$sSQL); ?> <h1> <div align="center">Registro Actualizado</div> </h1><div align="center"> <a href="leitura.php">Visualizar o contedo da base</a></div> </BODY> </HTML>

Executar exemplo Artigo por Miguel Angel Alvarez - Traduo de JML

Eliminao de um registo
Outra das operaes elementares que se podem realizar sobre uma base de dados apagar um registo. Para o fazer, SQL prope sentenas do tipo Delete. Vejamos com um exemplo aplicado nossa agenda. Primeiro, criamos um menu dinmico como no caso das
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 53

Manuais e recursos para desenvolvimento web www.criarweb.com

actualizaes:
<HTML> <HEAD> <TITLE>Apagar1.php</TITLE> </HEAD> <BODY> <div align="center"> <h1>Apagar um registo</h1> <br> <? //Conexo com a base mysql_connect("localhost","user","password"); echo '<FORM METHOD="POST" ACTION="borrar2.php">Nome<br>'; //Criamos a sentena SQL executamo-la $sSQL="Select nome From clientes Order By nome"; $result=mysql_db_query("exemplo",$sSQL); echo '<select name="nome">'; //Mostramos os registos em forma de menu dinmico while ($row=mysql_fetch_array($result)) { echo '<option>'.$row["nome"]; } mysql_free_result($result) ?> </select> <br> <INPUT TYPE="SUBMIT" value="Apagar!"> </FORM> </div> </BODY> </HTML>

O seguinte passo fazer efectiva a operao a partir da execuo da sentena SQL que construmos a partir dos dados do formulrio:
<HTML> <HEAD> <TITLE>Apagar2.php</TITLE> </HEAD> <BODY> <? //Conexo com a base mysql_connect("localhost","user","password"); //Criamos a sentena SQL y executamo-la $sSQL="Delete From Clientes Where nome='$nome'"; mysql_db_query("exemplo",$sSQL); ?> <h1><div align="center">Registo Apagado</div></h1> <div align="center"> <a href="leitura.php">Visualizar o contedo da base</a> </div> </BODY> </HTML>

Executar exemplo Com este captulo fechmos o bloco de acessos s bases de dados com PHP. Para mais informao relacionada poders consultar num workshop de PHP que estamos a pensar fazer em breve.

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

54

Manuais e recursos para desenvolvimento web www.criarweb.com

Artigo por Miguel Angel Alvarez - Traduo de JML

Subir uma aplicao PHP ao servidor


Uma vez pediram-me que escrevesse sobre um tema que at agora no tnhamos tocado demasiado, que consiste em por uma aplicao a funcionar, programada em local, no nosso servidor de hosting, isto , na transferncia de todos os ficheiros PHP e a base de dados ao nosso espao no servidor contratado num provedor de alojamento. Espero que o assunto vos seja familiar a todos os que lem os nossos artigos, pois provavelmente j tenham tido que passar por essa etapa em alguma ocasio, ainda que pretendo dar algumas dicas que podem ajudar a todos, tenham ou no experincia neste assunto. Subir os ficheiros O nosso servidor deve ter um directrio para a publicao das pginas. Esse seria o lugar onde h que subir os ficheiros .php. Dependendo do provedor com o que estejamos a trabalhar, o directrio de publicao pode variar. Normalmente, quando contratamos um alojamento, proporcionam-nos uma conta de FTP para nos poder conectar ao servidor e transferir os ficheiros do nosso site, para alm de uns dados para a conexo, que sero o nome do servidor e o usurio e password para o acesso ao FTP.
Referncia: se por acaso algum no sabe o que o FTP, falamos mais sobre isso no manual de Publicar na Internet, concretamente no artigo Subir os ficheiros ao servidor.

Ao ligar-nos ao servidor como s dados do FTP, que devem ser proporcionados pelo nosso provedor, acederemos a um directrio. Este directrio poderia ser o de publicao, ainda que normalmente no assim, seno que costuma ser um subdirectrio chamado "HTML" ou "docs" ou algo similar. Como estava a dizer, este directrio pode ter nomes diferentes em provedores diferentes, mas em qualquer caso, com uma simples pergunta ao nosso provedor resolvemos essa duvida. Os ficheiros devem-se subir ao directrio de publicao, ou a qualquer subdirectrio deste. Concluindo, teremos de aloja-los por ai dentro e para aceder a eles bastaria com escrever o nome do domnio ou URL do nosso alojamento, seguido do nome do ficheiro. Se tivssemos um ficheiro chamado ola.php e o nosso alojamento se tivesse contratado para o domnio www.meudominio.com, deveramos de subir esse ficheiro ao directrio de publicao e acederamos ao ficheiro escrevendo: http://www.meudominio.com/ola.php Se criamos subdirectrios dentro do directrio de publicao poderemos aceder a eles escrevendo o nome do domnio ou URL do nosso alojamento, seguido do nome do directrio e do nome do ficheiro. Por exemplo, se criamos um subdirectorio chamado paginas e temos dentro um ficheiro chamado pag1.php, poderamos aceder a ele da seguinte forma: http://www.meudominio.com/paginas/pag1.php

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

55

Manuais e recursos para desenvolvimento web www.criarweb.com

Referncia: h outro conceito interessante que deveramos conhecer neste ponto, que o "documento pr-definido". Este o ficheiro que se envia ao navegador se na URL acedida no se especifica nenhum ficheiro. Costuma chamar-se index.html ou index.php (ou index.asp se o nosso servidor suporta programao em ASP), ainda que pode variar de um provedor a outro.

Artigo por Miguel Angel Alvarez - Traduo de JML

Colocar os ficheiros PHP fora do directrio de publicao


O primeiro que temos de assinalar que tudo o que pusermos fora do directrio de publicao no poder ser acedido atravs do navegador. Isto , se criamos um directrio que se chame funcoes_php ao mesmo nvel que o directrio de publicao (fora do directrio de publicao) no poderemos aceder com o explorador aos ficheiros que coloquemos dentro de nenhuma maneira. Isto assim porque a URL de inicio do nosso alojamento corresponde com esse directrio e no podemos mover-nos para baixo nesse directrio com as URLs, que so a maneira de especificar ao navegador os recursos aos que se quere aceder.
Referncia: J se explicou o que era o directrio de publicao no captulo anterior sobre Subir ficheiros PHP ao servidor.

No seria possvel sair do directrio de publicao com uma URL como esta, por muito que utilizemos o operador .. (que serve para aceder ao directrio pai). http://www.meudominio.com/../funcoes_php/ficheiro_inalcancavel.php De todos modos, colocar alguns ficheiros fora do directrio de publicao pode ser muito til. Por exemplo, poderamos colocar ali copias de segurana de alguns ficheiros ou documentos que simplesmente queremos guardar no servidor para aceder a eles desde qualquer parte e com o nosso programa de FTP. H outra utilidade mais interessante sobre colocar ficheiros fora do directrio de publicao. Muitas vezes utilizamos nos nossos programas bocados de cdigo repetidamente, por exemplo, para abrir e fechar bases de dados, para mostrar o cabealho do nosso portal, para verificar que um e-mail escrito num formulrio correcto, etc. muito til separar estes bocados de cdigo num ficheiro parte e chamar este ficheiro com as funes PHP include() ou require(). Deste modo, se um dia modificamos o cabealho do nosso portal, s temos que modificar um ficheiro ou se muda a base de dados que utilizamos s teramos que modificar o ficheiro que faz a ligao base de dados em vez de ir alterando todas as pginas PHP que faziam uma apertura da base de dados. Estes ficheiros no so pginas independentes, mas sim fragmentos. Provavelmente se os executamos por separado no mostrariam nenhum resultado vlido, inclusive poderiam dar mensagens de erro. Por esta razo vale a pena coloca-los num lugar onde ningum pudesse ter acesso: fora do directrio de publicao. Com PHP poderemos aceder a este directrio para incluir estes ficheiros. Somente deveramos utilizar as funes PHP include() ou require() indicando o path para aceder aos ficheiros. No caso de ter uma pgina chamada ola.php no directrio de publicao e um ficheiro, que chama abre_base_dados.php, no directrio funcoes_php, que est fora do directrio de publicao, se quisssemos aceder (desde ola.php) ao ficheiro que abre a base de dados
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 56

Manuais e recursos para desenvolvimento web www.criarweb.com

fazamo-lo da seguinte maneira:


include("../funcoes_php/abre_base_dados.php")

Desde PHP sim podemos aceder aos ficheiros que se encontram fora do directrio de publicao. Para isso especificamos o path adequado, na que utilizamos o operador .. para descer ao directrio pai. No h nada mais a dizer sobre a colocao dos ficheiros: uma vez situados no directrio de publicao poder-se aceder aos ficheiros com o nosso navegador e deveria-se poder executar perfeitamente. Temos de ter em conta que, tanto PHP como o servidor onde trabalhamos, podem ter configuraes diferentes e pode que algum detalhe de programao das nossas pginas no funcione correctamente. Por exemplo, o nosso PHP pode declarar ou no automaticamente as variveis que chegam atravs dum formulrio. Se em local estava configurado para fazer isso e em remoto no, deveramos localizar os lugares onde recolhemos as variveis e utilizar as variveis correctas (ver artigo sobre Processar variveis em formulrios e os comentrios para saber mais sobre esta possvel fonte de erros). Mesmo no sendo um caso habitual, podemos nos por em contacto com o nosso provedor de alojamento para ver se pode ajudar-nos com a configurao do sistema ou se pode indicar-nos os passos a seguir para resolver o assunto nos nossos scripts.
Comentrio: O seguinte script calcula o nvel de directrio dos scripts que queremos incluir na pgina actual. // Achamos o nvel do directrio onde se encontra a pgina 1. Contamos os caracteres que contem o nome do script actual. $Chars = count_chars($PHP_SELF,1); 2. Exploramos a tabela dos caracteres retornados procurando o carcter ('/' Cdigo 47 ) de directrio (pasta) que retorna Apache. foreach ($Chars as $Char=>$nChars){ if ($Char==47) {$n=$nChars;break;} } 3. Geramos uma cadeia de n-1 vezes com a subcadeia "../" que nos da o nvel de directrio no que se encontra o script. if ($n==0) $PathString=""; else $PathString=str_pad("",($n-1)*3,"../");

Artigo por Miguel Angel Alvarez - Traduo de JML

Subir uma base de dados ao servidor de Internet


Para alm dos ficheiros da pgina, devemos subir a base de dados com a que temos de trabalhar. As bases de dados com as que trabalha PHP so muito variadas e em vrios casos podemos utilizar uma ou outra, e por tanto o modo de subir a base de dados tambm pode variar.
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 57

Manuais e recursos para desenvolvimento web www.criarweb.com

muito normal que o nosso provedor de hosting oferea junto com PHP a base de dados MySQL, assim que os apontamentos para subir essa base de dados ao servidor de este artigo vo encaminhados a oferecer solues para essa base de dados. A base de dados MySQL no se pode subir por FTP, como se fazia com os ficheiros do cdigo PHP. Para a subir teremos que utilizar outros mecanismos. Vou distinguir entre trs casos diferentes nos que poderamos encontrar-nos neste momento: 1. A base de dados que pretendemos subir est vazia. S crimos as tabelas, mas no introduzimos dados ou simplesmente introduzimos algum dado como experincia. 2. A base de dados que queremos subir est completa e uma base de dados MySQL. Neste caso teremos de criar a base de dados em local com toda a informao dentro e obviamente, queremos que esteja disponvel essa informao em remoto. 3. A base de dados est completa (como no caso anterior), mas no uma base de dados MySQL. Neste caso estaramos a fazer uma migrao da base de dados de um sistema gestor a outro. Veremos os trs casos por separado mais frente, mas antes disso, vamos mostras umas ferramentas que nos sero muito teis para a administrao de qualquer base de dados remota. As ferramentas em concreto so as seguintes: PhpMyAdmin. Uma aplicao criada em PHP que podemos instalar no nosso espao de alojamento para administrar a base de dados. Mysql Control Center (a partir de agora MyCC). Uma aplicao Windows que permite conectar-se a diversas bases de dados MySQL, que se estejam em local ou em remoto. Access. Tambm permite administrar uma base de dados MySQL conectada em local ou em remoto. Neste caso utiliza-se uma interface que muitos j conhecem, como a do Access, para administrar uma base de dados que nada tem a ver com o mencionado programa.

Nos trs casos o que nos permite realizar o software de administrao so tarefas, sobre as bases de dados, de todo tipo, como podem ser criar tabelas, modific-las, inserir dados, apag-los, edit-los. Modificar ou apagar tabelas ou campos das mesmas, etc. A eleio de uma ferramenta ou de outra passa pelos recursos que nos permitam utilizar no nosso provedor. Basicamente, o que nos pode levar a escolher uma opo ou outra se nos permitem ou no conectar de maneira remota base de dados MySQL. Conheo alojamentos onde se permite essa conexo e alojamentos onde no. Se no permidito conectar-nos remotamente escolheramos o PhpMyAdmin, pois uma aplicao PHP que se conecta em local e ao que se pode aceder atravs de uma pgina web, e isso est permitido pelos provedores, inclusive h muitos que j tm instalado esse software para administrar as bases de dados. No caso de que efetivamente possmos conectar-nos remotamente com a base de dados, a nossa escolha ser MyCC ou Access, que so aplicaes Windows muito mais potentes e rpidas que as que utilizam interface web, como o PhpMyAdmin. prefervel usar MyCC porque est especialmente feito para conectar-se e operar com bases de dados MySQL. Artigo por Miguel Angel Alvarez - Traduo de JML
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 58

Manuais e recursos para desenvolvimento web www.criarweb.com

Subir uma base de dados MySQL vazia ao servidor


normal que tenhamos uma base de dados para o nosso projecto do 0, definindo s diferentes entidades do nosso modelo de dados, os seus campos e os seus tipos. Neste caso o mais provvel que a base de dados esteja vazia, ou bem contenha dados que introduzimos para verificar o correcto funcionamento da base. Obviamente no queremos conservar estes dados quando a aplicao esteja a funcionar no servidor... A opo mais interessante podia ser criar outra vez as tabelas que temos em local na base de dados remota. Para o fazer temos duas hipteses. a) Se temos poucas tabelas e bastante simples Podemos cria-las em remoto com alguma ferramenta como PhpMyAdmin ou MyCC b) Se temos muitas tabelas e/ou so muito complicadas Neste caso recomendamos fazer um backup da estrutura em local e restaura-la em remoto. Isto evitar-nos ter que voltar a criar todas as tabelas e definir todos os seus campos e tipos. Pode ser um pouco mais complicado mas sem duvida poupar-nos tempo. Para fazer backup da estrutura em local podemos utilizar alguma ferramenta como PhpMyAdmin, ou utilizar o comando mysqldump desde a linha de comandos de MS-DOS.

Ferramenta de backup de PhpMyAdmin. Est marcada a opo de extrair s a estrutura das tabelas. Se marcamos tambm a opo "Send", o nosso navegador criar um ficheiro de texto. Se no o fizermos s se visualizar.

O que temos de fazer neste caso um backup da estrutura da base de dados, isto , os "create tables" ou sentenas SQL para criar as tabelas. Seriam bastantes sentenas deste gnero. # -------------------------------------------------------# # Table structure for table 'comentario' #
CREATE TABLE comentario ( Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 59

Manuais e recursos para desenvolvimento web www.criarweb.com

id_comentario int(5) unsigned NOT NULL auto_increment, id_artigo int(4) DEFAULT '0' NOT NULL, comentario text NOT NULL, data int(14) unsigned DEFAULT '0' NOT NULL, revisado tinyint(1) DEFAULT '0' NOT NULL, nome_comentario varchar(100) DEFAULT 'Nome no especificado' NOT NULL, email_comentario varchar(100) DEFAULT 'Email sem especificar' NOT NULL, tipo tinyint(1) unsigned DEFAULT '1' NOT NULL, PRIMARY KEY (id_comentario) );

Para restaurar estas sentenas temos opes tanto dentro de PhpMyAdmin como de MyCC. Em ambos casos o que temos de fazer executar estas sentenas no servidor MySQL remoto. Em PhpMyAdmin temos um campo para introduzir sentenas SQL e outro para seleccionar um ficheiro de texto com todas as sentenas SQL, para executa-las uma detrs da outra. No MyCC temos um boto que nos permite abrir uma consola onde introduzir uma ou vrias sentenas SQL e executa-las.

Boto para introduzir sentenas SQL em MyCC

Recordamos que isto s nos servir para subir a estrutura da base de dados e no os dados que contenham. Se desejamos subir tambm a informao da base de dados temos de utilizar outras estratgias que relataremos proximamente. Artigo por Miguel Angel Alvarez - Traduo de JML

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

60

Manuais e recursos para desenvolvimento web www.criarweb.com

Subir uma base de dados MySQL com a estrutura e os dados


Se a base de dados que queremos subir est cheia de informao e desejamos que se conserve uma vez subida a base de dados a remoto, temos de realizar um backup da base de dados e restaura-lo em remoto.
Nota: Estas recomendaes pensadas para subir uma base de dados MySQL que esteja em local a uma base de dados MySQL que tenhamos contratado em remoto. Se a base origem no MySQL estaramos a falar de uma migrao de bases de dados, mas isto ser visto num artigo mais a frente.

Neste caso o processo seria muito parecido ao de subir uma base de dados vazia, relatado anteriormente, excepto que agora temos de extrair no s a estrutura da base de dados, mas tambm os registos que contm. Para fazer isto podemos utilizar mysqldump ou PhpMyAdmin, seleccionando a opo que indica que o backup contem a estrutura e os dados (Structure and data). A estrutura e os dados vem num ficheiro de texto com uma serie de sentenas SQL para criar as tabelas e os insert necessrios para introduzir cada um dos dados. Para restaurar a base de dados, vamos seguir os mesmos passos como para o caso em que a base de dados est vazia, com a ajuda de uma instalao de PhpMyAdmin em remoto ou MyCC, que se conecte a base de dados contratada no servidor de Internet. Se temos problemas para subir o ficheiro de backup da base de dados possvel que o nosso provedor de alojamento nos possa ajudar a subir o ficheiro e restaura-lo. Como o provedor dispe dos servios nas suas prprias instalaes, tem muitas mais possibilidades para trabalhar com as bases de dados do que ns, sem temor a que as lentas comunicaes pela internet nos dem erros na restaurao dos dados. Se o nosso provedor no pode ajudar-nos, de certeza que dispem ou nos pode indicar algum mecanismo para realizar a tarefa sem erros. Pode acontecer que algum provedor nos diga que se encarrega de tudo mas que nos exige um pagamento pelas horas de trabalho da pessoa que vai restaurar o backup da base de dados. Se no dispe de facilidades nem sequer nisto, provavelmente seja melhor ir pedindo-lhe o dinheiro de volta porque o seu servio quase de certeza no vai ser de qualidade. Artigo por Miguel Angel Alvarez - Traduo de JML

Migrar uma base de dados a MySQL


O ltimo caso no que nos podemos encontrar na hora de subir uma base de dados ao nosso provedor de alojamento que a base de dados que tenhamos criada em local v ser utilizada em remoto. Em remoto supomos sempre que vamos utilizar a base de dados MySQL. Em local poderamos dispor de uma base de dados Access, SQL Server ou de outro sistema de base de dados. O processo da migrao pode ser bastante complexo e como h tantas bases de dados diferentes, vai ser complicado dar uma "receita" que funcione em todos os casos. Para alm da
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 61

Manuais e recursos para desenvolvimento web www.criarweb.com

dificuldade de transferir informao entre os dois sistemas gestores de bases de dados, tambm influir muito na complexidade do problema o tipo de dados das tabelas que estamos a utilizar. Por exemplo, as datas, os campos numricos com decimais ou os boleanos podem dar problemas ao passar de um sistema a outro porque podem armazenar-se de maneiras diferentes ou nos caso dos nmeros, com uma preciso diferente. Recomendaes para migrar de Access a MySQL Se a nossa base de dados anterior estava construda em Access a migrao ser fcil graas a que MySQL dispe dum driver ODBC para sistemas Windows, que nos permite conectar Access com o prprio MySQL e passar informao facilmente. Devemos indicar que se desejarmos fazer uma exportao desde Access em local a MySQL em remoto pode haver problemas porque no todos os servidores permitem as conexes em remoto com a base de dados. Se no temos disponvel uma conexo em remoto com o nosso servidor de bases de dados vamos ter que mudar de estratgia. A idia neste ltimo caso instalar MySQL em local e realizar a migrao desde Access em local a MySQL em local e depois ,fazer um backup da base de dados local e subi-la a remoto, tal e qual como se relatou antes. Recomendaes para migrar desde SQL Server a MySQL A verdade que nunca passei por este problema, mas Access tambm nos pode ajudar neste caso. Access permite seleccionar uma base de dados SQL Server e trabalhar desde a prpria interfaz de Access. A idia que Access tambm permite trabalhar com MySQL e possivelmente fazendo uma pontes entre estes dois sistemas gestores podemos exportar dados desde SQL Server a MySQL. O certo que utilizando o prprio Access de ponte poderamos realizar o trabalho. Primeiro exportando de SQL Server a Access e depois de Access a MySQL. Outras bases de dados e outras tcnicas Se a base de dados origem dispem de um driver ODBC no haver (em teoria) nenhum problema para conecta-la com Access, de maneira similar a como se conecta com MySQL. Poderamos utilizar Access para exportar os dados, porque desde ali poderia-se aceder aos dois sistemas gestores de bases de dados Se no temos Access, ou a base de dados original no tem driver ODBC, ou ainda se no funciona correctamente o processo e no sabemos como resolver o problema, outra possibilidade exportar os dados a ficheiros de texto, separados por vrgulas ou algo parecido. Muitas bases de dados tm ferramentas para exportar os dados das tabelas a ficheiros de texto, os quais podem ser introduzidos no nosso sistema gestor destino (MySQL) com a ajuda de alguma ferramenta tal como PhpMyAdmin. Para isso, na pgina de propriedades da tabela encontraremos uma opo para fazer o backup da tabela e para introduzir ficheiros de texto dentro de uma tabela (Insert textfiles into table)

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

62

Manuais e recursos para desenvolvimento web www.criarweb.com

Acedendo a este link poderemos ver um formulrio onde introduzir as caractersticas do ficheiro de texto, como o carcter utilizado como separador de campos, ou o terminador de linhas, etc, junto com o prprio ficheiro com os dados, e PhpMyAdmin encarregar-se- de todo esse trabalho de incluir eses dados na tabela.

Obviamente, necessrio ter a tabela criada em remoto para que se possa introduzir os dados do ficheiro de texto. Mudana de um formato de dados a outro Toda migrao tem de ter em conta muito especialmente, como j se disse, as formas que tenham cada base de dados de guardar a informao. Temos que contar sempre com a possibilidade de transformar alguns dados como podem ser os campos boleanos, datas, campos memo (texto com longitude indeterminada), etc, que podem armazenar-se de maneira diferente em cada um dos sistemas gestores, origem e destino. Nalguns casos possivelmente tenhamos de realizar algum script que realize as mudanas necessrias nos dados. Por exemplo para localizar os valores boleanos guardados como
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 63

Manuais e recursos para desenvolvimento web www.criarweb.com

true/false e muda-los a valores inteiros 0 / 1, que como se guarda em MySQL. As datas tambm podem sofrer alteraes de formato, por exemplo, em Access aparece com o formato (dd/mm/aaaa), e em MySQL o formato (aaaa-mm-dd). PHP pode Ajudar-nos na tarefa de fazer este script mas tambm Visual Basic Script para Access pode fazer estas tarefas complexas e a prpria linguagem SQL, base de sentenas dirigidas contra a base de dados. Artigo por Miguel Angel Alvarez - Traduo de JML

Programao orientada a objectos em PHP


A programao orientada a objectos uma metodologia de programao avanada e bastante estendida, na que os sistemas se modelam criando classes, que so um conjunto de dados e funcionalidades. As classes so definies, a partir das que se criam objectos. Os objectos so exemplares de uma classe determinada e como tal, dispem dos dados e funcionalidades definidos na classe. A programao orientada a objectos permite conceber os programas de uma maneira bastante intuitiva e prxima a realidade. A tendncia que um maior nmero de linguagens de programao adoptem a programao orientada a objectos como paradigma para modelar os sistemas. Prova disso a nova verso de PHP (5), que possui a programao de objectos como metodologia de desenvolvimento. Tambm a Microsoft deu um giro em direo a programao orientada a objectos pois .NET dispem de vrias linguagens para programar e todas orientadas a objectos. De este modo, a programao orientada a objectos uma rea de grande interesse, pois muito utilizada e cada vez torna-se mais essencial para poder desenvolver em quase qualquer linguagem moderna. Neste artigo vamos ver alguma notaes sobre a programao orientada a objectos em PHP. Ainda que sendo uma rea bastante amplia e novidade para muitos e num principio difcil de assimilar, vamos tentar explicar a sintaxe bsica de PHP para utilizar objectos, sem entrar em muita teoria de programao orientada a objectos em geral. As classes: class Uma classe um conjunto de variveis, chamados atributos, e funes, chamadas mtodos, que trabalham sobre essas variveis. As classes so uma definio: uma especificao de propriedades e funcionalidades de elementos que vo participar nos nossos programas. Por exemplo, a classe "Caixa" teria como atributos caractersticas como as dimenses, cor, contedo e coisas semelhantes. As funes ou mtodos que poderamos incorporar a classe "Caixa" so as funcionalidades que queremos que realize a caixa, por exemplo introduz(), mostra_conteudo(), comprova_se_cabe(), vaziar()... As classes em PHP definem-se da seguinte maneira:
<? class Caixa{ var $altura; var $grossura; var $largura; var $conteudo; var $cor;

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

64

Manuais e recursos para desenvolvimento web www.criarweb.com

function introduz($coisa){ $this->conteudo = $coisa; } function mostra_conteudo(){ echo $this->conteudo; } } ?>

Neste exemplo criou-se uma classe Caixa, indicando como atributos a altura, a grossura, a largura e tambm a cor e o contedo. Para comear criaram-se um par de mtodos, um para introduzir um elemento na caixa e outro para mostrar o contedo. Se repararmos, os atributos definem-se declarando umas variveis ao principio da classe. Os mtodos definem-se declarando funes dentro de uma classe. A varivel $this, utilizada dentro dos mtodos ser explicada um pouca mais em baixo. Utilizar a classe As classes so definies. Se queremos utilizar uma classe temos de criar um exemplar dessa classe, o que normalmente se chama instanciar um objectos de uma classe.
$minhacaixa = new Caixa;

Com isto crimos ou melhor dito, instancimos, um objecto da classe Caixa chamado $minhacaixa
$minhacaixa->introduz("algo"); $minhacaixaa->mostra_conteudo();

Com estas duas sentenas estamos a introduzir "algo" na caixa e depois estamos a mostrar esse contedo no texto da pgina. Repara que os mtodos de um objecto chamam-se utilizando o cdigo "->".
nome_do_objecto->nome_do_metodo()

Para aceder aos atributos de uma classe tambm se acede com o cdigo "->". Desta forma:
nome_do_objeto->nome_do_atributo

A varivel $this Dentro de um mtodo, a varivel $this faz referncia ao objecto sobre o que invocamos o mtodo. Na invocao $minhacaixa->introduz("algo") est-se a chamar ao mtodo introduz sobre o objecto $minhacaixa. Quando se est a executar esse mtodo, passa-se o valor que recebe por parmetro ao atributo contedo. Neste caso $this->contedo faz referncia ao atributo contido no objecto $minhacaixa, que sobre o que se invocava o mtodo. Artigo por Miguel Angel Alvarez - Traduo de JML

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

65

Manuais e recursos para desenvolvimento web www.criarweb.com

Construtores em PHP
Os construtores so funes, ou mtodos, que se encarregam de realizar as tarefas de iniciao dos objectos ao ser instanciados. Isto , quando se criam os objectos a partir das classes, chama-se a um construtor que se encarrega de iniciar os atributos do objecto e realizar qualquer outra tarefa de iniciao que seja necessria No obrigatrio dispor de um construtor, mas so muito teis e a sua utilizao muito habitual. No exemplo da caixa, que comentmos no artigo anterior de programao orientada a objectos em PHP, o normal seria iniciar as variveis como cor ou as relacionadas com as dimenses e tambm indicar que o contedo da caixa est vazio. Se no h um construtor no se iniciam nenhum dos atributos dos objectos. O construtor define-se dentro da prpria classe, como se fosse outro mtodo. O nico detalhe que o construtor deve ter o mesmo nome que a classe. Ateno a PHP, que faz diferena entre maisculas e minsculas. Para a classe Caixa definida anteriormente, poderia declarar-se este construtor:
function Caixa($altura=1,$grossura=1,$largura=1,$cor="preto"){ $this->altura=$altura; $this->grossura=$grossura; $this->largura=$largura; $this->cor=$cor; $this->conteudo=""; }

Neste construtor recebemos por parmetro todos os atributos que h que definir numa caixa. muito til definir uns valores pr-definidos nos parmetros que recebe o construtor, igualando o parmetro a um valor dentro da declarao de parmetros da funo construtora, deste modo, ainda que se chame ao construtor sem proporcionar-lhe parmetros, iniciar-se- com os valores pr-definidos. importante assinalar que nos construtores no se tem porque receber todos os valores para iniciar o objecto. H alguns valores que se podem iniciar a vazio (NULL) ou a qualquer outro valor fixo, como neste caso, o contedo da caixa, que inicialmente supusemos que estar vazia. Artigo por Miguel Angel Alvarez - Traduo de JML

Herana em PHP
A programao orientada a objectos tem um mecanismo chamado herana pela que qual se podem definir classes a partir de outras classes. As classes realizadas a partir de outra classe ou melhor dito, que derivam de outra classe, chamam-se classes derivadas. As classes derivadas herdam todos os atributos e mtodos da classe base, para alm de poder ter tantos atributos e mtodos novos como se desejem. Para ampliar o exemplo que temos tado a utilizar, a classe Caixa, vamos criar uma classe
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 66

Manuais e recursos para desenvolvimento web www.criarweb.com

derivada chamada Caixa_tematica. Esta classe herda de caixa, mas tem um "tema", que a descrio do tipo de coisas que metemos na caixa. Com isto podemos ter varias caixas, cada uma com coisas de um tema concreto.
class Caixa_tematica extends Caixa{ var $tema; function define_tema($novo_tema){ $this->tema = $novo_tema; }

Nesta classe herdamos de Caixa, por tanto temos nossa disposio todos os atributos e mtodos da classe base. Tambm se definiu um novo atributo, chamado $tema, e um mtodo, chamado define_tema(), que recebe o tema com o que se deseja etiquetar a caixa. Poderamos utilizar a classe Caixa_tematica de maneira similar a como fazamos com a classe Caixa original
$minhacaixa_tematica = new Caja_tematica(); $minhacaixa_tematica->define_tema("Cabos e conectores"); $minhacaixa_tematica ->introduz("Cabo de rede"); $minhacaixa_tematica ->introduz("Conetor RJ45"); $minhacaixa_tematica ->mostra_conteudo();

Neste caso, o resultado que se obtm parecido ao que se obtm para a classe base. Mas, quando se mostra o contedo de uma caixa, o mais interessante seria, que se indicara tambm o tipo de objectos que contem a caixa temtica. Para isso, temos que redefinir o mtodo mostra_conteudo(). Redefinir mtodos em classes derivadas Redefinir mtodos significa voltar a codifica-los, isto , voltar a escrever o seu cdigo para a classe derivada. Neste caso, temos que redefinir o mtodo mostra_conteudo() para que mostre tambm o tema da caixa. Para redefinir um mtodo, o nico que devemos fazer voltar a escrever dentro da classe derivada.
function mostra_conteudo(){ echo "Conteudo da caixa de <b>" . $this->tema . "</b>: " . $this->conteudo; }

Neste exemplo codificmos de novo o mtodo inteiro para mostrar os dados completos. Nalgumas ocasies muito til basear-se na definio de um mtodo da classe base para realizar as aces da classe derivada. Por exemplo, para este exemplo concreto, temos de definir um construtor para a classe Caixa temtica, no que tambm se inicie o tema da caixa. Como j existe um mtodo construtor na classe base, no vale a pena reescrever o cdigo de este, o melhor chamar ao construtor que tnhamos definido na classe Caixa original, com o que se iniciaro todos os dados da classe base, e depois realizar a iniciao para os atributos da prpria classe derivada. Para chamar a um mtodo da classe pai dentro do cdigo de um mtodo que estamos a redefinir, utilizamos uma sintaxe como esta:

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

67

Manuais e recursos para desenvolvimento web www.criarweb.com

function Caixa_tematica($altura=1,$grossura=1,$largura=1,$cor="preto",$tema="Sem classificao"){ parent::Caixa($altura,$grossura,$largura,$cor); $this->tema=$tema; }

Aqui vemos a redefinio de construtor, da classe Caixa, para a classe Caixa_tematica. O construtor faz primeiro uma chamada ao construtor da classe base, atravs de uma referncia a "parent". Depois inicia o valor do atributo $tema, que especifico da Caixa_temtica. Na mesma linha de trabalho, podemos redefinir o mtodo mostra_conteudo() baseando-nos no que foi declarado para a classe base. O cdigo ficaria assim:
function mostra_conteudo(){ echo "Conteudo da caixa de <b>" . $this->tema . "</b>: "; parent::mosta_conteudo(); }

Artigo por Miguel Angel Alvarez - Traduo de JML

Cookies em PHP
As cookies en PHP so muito fceis de utilizar. J comeamos a explicar alguns pontos interessantes no artigo utilizao de cookies no manual de PHP. Agora vamos mostrar outros detalhes que convm saber para trabalhar com as cookies, sobretudo com relao sua criao.

Criar cookies em PHP


Em PHP as cookies se controlam por meio de uma funo, que nos serve para ger-las e guard-las no navegador do usurio. a funo setcookies(), que recebe vrios parmetros, entre eles, o nome da cookie, o valor e a caducidade. O nico parmetro obrigatrio o primeiro, o nome da cookie, os demais so opcionais. Vejamos a lista inteira de parmetros de setcookie() com suas explicaes: Nome Um string com o nome que queremos dar cookie a ser guardada. Pode ser qualquer um que desejemos. Valor Uma cadeia de caracteres que o valor que vai a ter a cookie. Caducidade um timestamp com o valor da data em que expirar a cookie. O normal utilizar a funo time(), que gera o timestamp atual e somar a ele o nmero de segundos que acordemos que dure a cookie. Por exemplo, time() + (60 * 60 * 24 * 365) faria com que a cookie durasse um ano no sistema do usurio. Rota O caminho ou rota onde a cookie poder ser utilizada dentro do domnio. Por padro, a cookie poder ser utilizada no diretrio onde foi criada e em seus subdiretrios. Se indicamos "/" a
Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao. 68

Manuais e recursos para desenvolvimento web www.criarweb.com

cookie ter validade dentro de todo o domnio. Domnio o subdomnio onde se poder acessar a cookie. As cookies s podem ser geradas e utilizadas para o domnio da pgina onde est colocado o script, porm podemos torn-lo visvel para todos os subdomnios do domnio da web por meio de ".meudominio.com". Seguro um booleano que, se true, indica que a cookie s pode ser transmitida por shttp (http seguro). S http Isto outro booleano que serve para indicar que a cookie s ser acessvel por meio dos cabealhos do http, o que a tornaria inalcanvel para linguagens de script no cliente como Javascript. Este parmetro foi adicionado no PHP 5.2.0 A funo setcookie() de PHP gera e envia a cookie ao navegador e retorna um booleano, se true indica que foi includa no navegador do usurio e se false indica que no foi possvel coloc-la no sistema. Contudo, este valor no indica que o visitante aceitou a cookie, posto que o navegador pode t-lo configurado para no aceitar cookies e isso no pode ser detectado por setcookie() diretamente. Por exemplo, estas seriam diferentes chamadas a setcookie():
setcookie("minhacookie", "meuvalor"); setcookie("cookie2", "meuvalor2", time() + 3600); setcookie("outracookie", "valorfinal", time() + 3600, "/", ".meudominio.com");

Porm, ateno com um assunto: enviar uma cookie ao navegador deve ser feito antes de ter mandado os cabealhos do http ao cliente, ou seja, antes de ter escrito qualquer texto na pgina. Caso contrrio, PHP pode enviar um erro de headers already sent (cabealhos j enviados). Recuperar cookies com PHP Por outro lado, para receber as cookies que o navegador do usurio possa ter criadas no sistema se utiliza o array associativo $_COOKIE. Neste array esto todas as cookies disponveis na pgina PHP no domnio e no diretrio onde est colocado. Por meio do nome da cookie acessamos seu valor:
$_COOKIE["minhacookie"]; $_COOKIE["cookie2"];

Para ver um exemplo de uso de cookies PHP acessar a oficina de PHP Estilos CSS diferentes a uma pgina com PHP e cookies. Artigo por Miguel Angel Alvarez - Traduo de Celeste Veiga

Manual do Programao em PHP: http://www.criarweb.com/manuais/programacao_php/ Os manuais de CriarWeb.com tm copyright dos autores. No reproduzir sem autorizao.

69

You might also like