Anda di halaman 1dari 65

Tcnico de Multimdia

Base de dados para Internet (server side)

Jos Ferreira

Nome do Formador :: ENA Escola de Negcios e Administrao

.100

ndice
Noes Bsicas de Bases de Dados.......................................................................................4
O que uma Base de dados?.........................................................................................................4

Modelo relacional................................................................................................................7
Conceitos do modelo relacional...................................................................................................7

Structured Query Language ..............................................................................................12


O que SQL?..........................................................................................................................12 Tipos de campos.....................................................................................................................13 Adicionar novos registos...........................................................................................................13 Apagar registos.......................................................................................................................15

PHP Hypertext Preprocessor.............................................................................................25


Para que serve o php?.............................................................................................................25 Instalao do php com wamp5..................................................................................................26 Funcionamento dos servidores ..............................................................................................27 Introduo sintaxe PHP.........................................................................................................28 Variveis em PHP....................................................................................................................30 Variveis atribudas por referncia.........................................................................................31 Mudana de tipo de variveis................................................................................................32 Forar tipos de variveis (Cast).............................................................................................32 Operadores.............................................................................................................................36 Vectores em PHP.....................................................................................................................37 Aplicao e funcionalidades vectoriais....................................................................................40 Cadeias de caracteres (strings).................................................................................................44 Funes PHP...........................................................................................................................47 Passagem de parmetros por valor........................................................................................49 Passagem de parmetros por referncia.................................................................................50 Parmetros pr-definidos......................................................................................................51 Retorno de valores...............................................................................................................51 Condies e ciclos...................................................................................................................53 Estruturas condicionais.........................................................................................................53 Estruturas Cclicas...............................................................................................................57 Formulrios ...........................................................................................................................58 Sesses.................................................................................................................................61

Bases de Dados e PHP........................................................................................................62


Funes de interligao PHP-SQL..............................................................................................63

Nome do Formador :: ENA Escola de Negcios e Administrao

.2

Nome do Formador :: ENA Escola de Negcios e Administrao

.3

NOES BSICAS DE BASES DE DADOS


2 -

Neste captulo sero abordados os principais constituintes de uma base de dados. O captulo ser iniciado com uma breve explicao da definio de uma base de dados e as suas utilidades, seguido de noes de funcionamento bsico.

O que uma Base de dados?


possvel dizer de uma forma genrica que qualquer conjunto de dados uma Base de Dados (BD): uma agenda com as moradas de pessoas conhecidas, uma lista de CDs, um livro, apontamentos tirados nas aulas, os dados guardados nos computadores das Finanas sobre os contribuintes e a World Wide Web. O objectivo de criarmos e mantermos uma BD a de poder obter e utilizar os dados l guardados: procurar a morada de uma determinada pessoa, saber o que foi dito nas aulas sobre um tema ou procurar uma pgina na (Os motores de busca como o Google funcionam com bases de dados).

Como funciona uma Base de Dados?


Embora sendo possvel usar a definio genrica dada acima, o termo base de dados aplicado hoje em dia principalmente para fazer referncia a bases de dados informticas, isto , conjuntos de dados estruturados, manipulados usando um Sistema de Gesto de Bases de Dados (SGBD) ou Database Management System (DBMS). Para permitir ao utilizador atingir os objectivos referidos acima, um SGBD disponibiliza linguagens de: Definio de dados: para criao e alterao da estrutura da BD (DDL - Data Definition Language) Nome do Formador :: ENA Escola de Negcios e Administrao

.4

Consulta de dados: obter e processar os dados armazenados (DQL - Data Query Language)

Manipulao de dados: para acrescentar dados novos e modificar dados existentes (DML - Data Manipulation Language).

Hoje em dia, cada vez mais SGBD, como o Access ou o Mysql, "escondem" essas linguagens por trs de interfaces do utilizador grfica. Outras caractersticas dos SGBDs so: Acesso simultneo: vrios utilizadores podem aceder e alterar a mesma BD ao mesmo tempo sem criar inconsistncias. Por exemplo, 2 utilizadores diferentes podem consultar simultaneamente os dados do mesmo cliente. No entanto o SGBD no permite que ambos os utilizadores alterem esses dados ao mesmo tempo. Vistas: diferentes utilizadores podero ter o seu acesso limitado a partes da BD. Por exemplo, embora todos os dados de uma organizao estejam na mesma BD, aqueles que so importantes para a definio da estratgia s podem ser consultados pela administrao. Construo de aplicaes: a tendncia actual dos SGBDs para combinarem a gesto do armazenamento/manipulao implementam os processos dos da dados com a construo das os aplicaes processos que eram organizao. Tradicionalmente,

implementados independentemente, com recurso a linguagens de programao mais ou menos integradas com o SGBD.

Porqu aprender Bases de Dados?


Porque que algum que no (nem pretende ser) profissional de sistemas de informao dever aprender a usar BDs? 1. Pelo mesmo motivo pelo qual se devia aprender a usar um computador h 10 anos atrs: a divulgao crescente dos computadores far com que dentro em breve os SGBDs sejam ferramentas de uso to comum como so hoje em dia as folhas de clculo. 2. Para facilitar a comunicao com os profissionais de sistemas de informao: a criao de sistemas de informao um processo que envolve pessoas tanto da rea de sistemas de Nome do Formador :: ENA Escola de Negcios e Administrao

.5

informao como da rea de aco da organizao, sendo a comunicao entre ambos os grupos essenciais para o sucesso do sistema. Ora, os problemas de comunicao fazem com que o sistema criado raramente satisfaa as expectativas do cliente e mesmo algumas vezes seja o motivo do insucesso deste tipo de projectos. Sendo as BDs a infra-estrutura dos sistemas de informao, algum conhecimento destas poder contribuir para melhorar a qualidade dos sistemas de informao.

Nome do Formador :: ENA Escola de Negcios e Administrao

.6

MODELO RELACIONAL
3 -

Neste captulo sero abordados os principais conceitos do modelo relacional. O captulo ser iniciado com uma breve explicao da sua origem e constituintes, seguido de noes de funcionamento.

Conceitos do modelo relacional


O modelo relacional um modelo formal, baseado na teoria matemtica das relaes. Tornou-se um padro para aplicaes comerciais, devido a sua simplicidade e performance, uma base de estruturao, e regras, para bases de dados. O modelo relacional representa os dados num BD como uma coleco de tabelas (relaes). Cada tabela ter um nome, que ser nico, e um conjunto de atributos com seus respectivos nomes e domnios. Todos os valores de uma coluna so do mesmo tipo de dados. Exemplo: Ex. Empregado Matr 100 250 108 210 Nome Ana Pedro Andr Paulo Endereo R. da Alegria, 120, 2D R. J. Paulo 2, 540, 3E R. de Itlia, 33, 27D R. da Constituio, 330,4E Funo Secretria Engenheiro Tcnico Engenheiro Salrio 500,00 1500,00 950,00 1810,00 Depart D1 D1 D2 D2

Nome do Formador :: ENA Escola de Negcios e Administrao

.7

Terminologia:
Na terminologia de BD Relacional os principais termos utilizados so tupla,atributo,relao,esquema e grau, estes ltimos sero explicados de seguida. A uma linha chama-se tupla, um nome de coluna chama-se atributo e cada tabela chama-se relao. Domnio um conjunto de valores atmicos que define o tipo de dados de cada atributo: Exemplo:

Telefone: conjunto de 10, dgitos CPF: conjunto de 7 dgitos Idade Empregado: 16 idade 70 Departamentos: conjunto de departamentos de uma empresa.

A cada domnio est associado um tipo de dados ou formato. Exemplo:


Telefone: (ddd) ddd-dddd onde d ={0,1,2,...,9} Idade Empregado: nmero inteiro.

Esquema de relao R, denotado por R(A1,A2,...,An), um conjunto de atributos. Cada atributo A o nome de um papel realizado por algum domnio D na relao R. Grau de uma relao o nmero de atributos que seu esquema contm. Exemplo: Seja o esquema Estudante (matrcula, nome, telefone, idade, curso) o grau 5.

Nome do Formador :: ENA Escola de Negcios e Administrao

.8

Caractersticas de Relaes
Todas as relaes tem regras fulcrais que tem que ser utilizada de forma a mantermos a integridade do modelo relacional, essas regras so as seguintes:

A ordem das tuplas e dos atributos no tem importncia Todo atributo possui valor atmico Cada atributo numa relao tem um nome que nico dentro da relao. Todas as tuplas devem ser nicas (conjunto).

(chaves de uma relao)

Chaves de uma relao


As tabelas relacionam-se umas as outras atravs de chaves. Uma chave um conjunto de um ou mais atributos que determinam a unicidade de cada registo. Por exemplo, se uma base de dados tem como chaves Cdigo do Produto e ID Sistema, sempre que acontecer uma insero de dados o SGBD ir fazer uma consulta para identificar se o registo j no se encontra gravado na tabela. Neste caso, um novo registo no ser criado, resultando esta operao apenas da alterao do registo existente. A unicidade dos registos, determinada pela sua chave, tambm fundamental para a criao dos ndices. Existem 4 terminologias relevantes a aprofundar relativamente ao conceito de chave: Chave candidata de uma relao: atributo ou conjunto de atributos que permitem identificar de forma inequvoca qualquer tuplo dessa relao. O conjunto no pode ser reduzido sem perder essa qualidade.

De entre as possveis chaves candidatas escolhida uma que ser declarada como chave Primria.

Chave Primria ter que ser:

Unvoca: o atributo (ou atributos) da chave primria tem um valor nico para qualquer tuplo da relao.

Nome do Formador :: ENA Escola de Negcios e Administrao

.9

No nula: No pode haver tuplos da relao, que tenham o atributo (ou atributos) da chave primria, nulos.

No redundante: Se algum dos atributos que a constituem for retirado os restantes deixam de identificar univocamente o tuplo.

Chave Estrangeira: Subconjunto de atributos de uma relao, que constituem a chave primria numa outra relao, permitindo estabelecer a associao entre tuplos entre as duas.

Super-chave: qualquer subconjunto de atributos que identifique univocamente qualquer tuplo da relao. No limite o conjunto de todos os atributos da relao uma super-chave. Para melhor compreender estes conceitos vejamos um exemplo. Exemplo:

N_fornecimento chave primria da relao Fornecimento. N_obra chave estrangeira da relao Fornecimento porque chave primria na relao Obra.

N_fornecedor chave estrangeira da relao Fornecimento porque chave primria na relao Fornecedor.

N_material chave estrangeira da relao Fornecimento porque chave primria na relao Material.

Nome do Formador :: ENA Escola de Negcios e Administrao

.10

Restries de integridade
Restries de integridade so usadas para garantir a exactido e a consistncia dos dados numa Base de dado relacional. A integridade dos dados tratada nas bases de dados atravs do conceito de integridade relacional. Uma base de dados est num estado de integridade se contm apenas dados vlidos. Ou seja, se os dados armazenados na base de dados esto de acordo com a realidade. O SGBD deve ajudar a prevenir a introduo de dados incorrectos. Como apenas as operaes de actualizao da base de dados podem pr em causa a sua integridade, estas operaes devem ser governadas por regras, designadas por restries de integridade, que definem o que vlido e o que no o . Os principais conceitos de integridade so:

Integridade de Chave: Todas as tuplas tm um conjunto de atributos que as identificam de maneira nica na relao.

Integridade de Entidade: Nenhum valor de chave primria poder ser nulo. Integridade Referencial: Uma relao pode ter um conjunto de atributos, que contm valores com o mesmo domnio, de outro conjunto de atributos, que forma a chave primria numa outra relao (este conjunto a chamada chave estrangeira).

Nome do Formador :: ENA Escola de Negcios e Administrao

.11

STRUCTURED QUERY LANGUAGE


4 -

At agora neste manual, focamos os principais conceitos de base de dados, mas a um nvel de abstraco puramente terico. J sabemos como funciona uma base de dados, como as tabelas se relacionam, como os dados so armazenados etc Mas a nvel prtico como utilizaramos estes conceitos numa base de dados real? Usando SQL: Structured Query Language. Este captulo incidir primariamente numa explicao genrica sobre SQL, passando depois para casos concretos da linguagem, MySql leccionada no mdulo.

O que SQL?
Devido diversidade de linguagens e de base de dados existentes, a maneira de comunicar entre umas e outras seria realmente complicada de providenciar, a no ser pela existncia de padres que nos permitem realizar as operaes bsicas de uma forma universal. justamente disso que se trata o SQL que no mais do que uma linguagem padro de comunicao com base de dados. Falamos portanto, de uma linguagem normalizada que nos permite trabalhar com qualquer tipo de linguagem (ASP ou PHP) em combinao com qualquer tipo de base de dados (MS Access, SQL Server, MySQL...). O fato de ser padro no quer dizer que seja idntico para cada base de dados. Na prtica, determinadas bases de dados implementam funes especficas que no tm necessariamente que funcionar noutras. parte desta universalidade, o SQL possui outras duas caractersticas muito apreciadas. Por uma parte, apresenta potncia e versatilidade notveis que contrasta, por outra, com sua acessibilidade de aprendizagem.

Nome do Formador :: ENA Escola de Negcios e Administrao

.12

Tipos de campos
Como sabemos, uma base de dados composta por tabelas onde armazenamos registos catalogados em funo de diferentes campos. Um aspecto prvio a considerar a natureza dos valores que introduzimos nesses campos, visto que um banco de dados trabalha com todo o tipo de informaes, importante especificar que tipo de valor estamos a introduzir de maneira a, por um lado, facilitar a busca posteriormente e, por outro, optimizar os recursos de memria. Cada base de dados introduz tipos de valores de campo que no esto necessariamente presentes em outros. Entretanto, existe um conjunto de tipos que esto representados na totalidade destas bases. Os tipos comuns so os seguintes:

Alfanumricos: Contm cifras e letras. Apresentam uma longitude limitada (255 caracteres)

Numricos: Existem de vrios tipos, principalmente, inteiros (sem decimais) e reais (com decimais).

Booleanos: Possuem duas formas: Verdadeiro e falso (Sim ou No). Datas: Armazenam datas facilitando posteriormente sua explorao. Armazenar datas desta forma possibilita ordenar os registos por datas ou calcular os dias entre uma data e outra...

Memos: So campos alfanumricos de longitude ilimitada. Apresentam o inconveniente de no poder ser indexados (veremos mais adiante o que isto quer dizer).

Auto-incrementveis: So campos numricos inteiros que incrementam em uma unidade seu valor para cada registo incorporado. Sua utilidade mais que evidente: Servir de identificador j que so exclusivos de um registo.

Adicionar novos registos


Os registos podem ser introduzidos a partir de comandos que empregam a instruo Insert. A sintaxe utilizada a seguinte: Exemplo: Nome do Formador :: ENA Escola de Negcios e Administrao

.13

Insert Into nome_tabela (nome_campo1,nome_campo2,...) Values (valor_campo1, valor_campo2...)

Um exemplo simples a partir da nossa tabela modelo a introduo de um novo cliente que seria feito com uma instruo deste tipo: Exemplo: Insert Into clientes (nome, sobrenomes, endereo, cidade, cdigo postal, e-mail, pedidos) Values ('Pedro', 'Palotes', 'Percebe n13', 'Londrina', '123456', 'pedro@criarweb.com', 33) Como se pode ver, os campos no numricos ou booleanos vo delimitados por apstrofes: '. Tambm interessante ver que o cdigo postal foi guardado como um campo no numrico. Isto deve-se a que em determinados pases (Inglaterra, por exemplo) os cdigos postais contm tambm letras.

Se desejarmos praticar com uma base de dados que est vazia, primeiro devemos criar as tabelas que vamos preencher. As tabelas tambm se criam com comandos SQL, este tema ser referenciado mais frente neste manual. Embora seja mais cmodo utilizar um programa com interface grfica, como MySQL, que nos pode servir para criar as tabelas em bases de dados do prprio atravs de ferramentas para o efeito (PhpMyAdmin), crucial que se entenda como estes mecanismos funcionem, pois usando linhas de cdigo PHP no teremos a ajuda destas ferramentas.

Obviamente, no imprescindvel preencher todos os campos do registo. Porm, poder ser que determinados campos sejam necessrios. Estes campos necessrios podem ser definidos quando construirmos a nossa tabela.

Se no inserirmos um dos campos na base de dados ele iniciado com o valor padro que tivermos definido na criao da tabela. Se no houver um valor padro, provavelmente se inicie como NULL (vazio), no caso de que este campo permitir valores nulos. Se esse campo no permitir valores nulos (isso tambm se define ao criar a tabela) o mais seguro que a execuo do comando SQL nos d um erro.

Nome do Formador :: ENA Escola de Negcios e Administrao

.14

Apagar registos
Para apagar um registo utilizamos a instruo Delete. Neste caso devemos especificar qual ou quais so os registos que queremos apagar. Por isso, necessrio estabelecer uma seleco que se realize mediante a clusula Where. A forma de seleccionar ser vista detalhadamente em captulos posteriores, agora apenas ser mostrado qual o tipo de sintaxe utilizada para efectuar estas supresses: Exemplo: Delete From nome_tabela Where condicoes_de_selecao

Se quisermos, por exemplo, apagar todos os registos dos clientes que se chamem Pedro, faramos o seguinte: Exemplo: Delete From clientes Where nome='Pedro'

Temos que ter cuidado com esta instruo, pois se no especificarmos uma condio com Where, o que estaramos a fazer seria apagar todos os dados da tabela: Exemplo: Delete From clientes

Actualizar
Nome do Formador :: ENA Escola de Negcios e Administrao

registos
.15

Update a instruo que serve para modificar os nossos registos. Como para o caso da instruo

Delete, necessitamos especificar por meio de Where quais so os registos nos quais queremos fazer modificaes. Ademais, obviamente, teremos que especificar quais so os novos valores dos campos que desejamos actualizar. A sintaxe deste tipo: Exemplo: Update nome_tabela Set nome_campo1 = valor_campo1, nome_campo2 = valor_campo2,... Where Um Update clientes exemplo Set nome='Jos' aplicado: Where nome='Pedro' condicoes_de_selecao

Mediante este comando substitudo, o nome Pedro, por Jos em todos os registos cujo nome seja Pedro. Aqui tambm h que ser cuidadoso de no esquecer de usar Where, do contrrio, modificaramos todos os registos de nossa tabela.

Criao de tabelas
Em geral, a maioria das bases de dados possui potentes editores que permitem a criao rpida e simples de qualquer tipo de tabela com qualquer tipo de formato. Entretanto, uma vez que a base de dados esta hospedado no servidor, pode acontecer o caso de que queiramos introduzir uma nova tabela atravs de php, e nesse caso teremos que conhecer a sintaxe completa. Nestes casos, podemos, a partir de um comando SQL, criar a tabela com o formato que desejarmos, o qual nos pode poupar mais que um quebra-cabeas. Estes tipos de comandos so especialmente teis para bases de dados como o Mysql, os quais trabalham directamente com comandos SQL e no por meio de editores. Para criar uma tabela devemos especificar diversos dados: O nome que queremos atribuir, os nomes dos campos e suas caractersticas. Ademais, pode ser necessrio especificar quais destes campos vo ser ndices e de que tipo sero. A sintaxe de criao pode variar ligeiramente de um banco de dados para outro j que os tipos de campos aceites, no estaro completamente padronizados. A seguir explicamos meramente a sintaxe deste comando e sero explicados uma srie de exemplos.

Nome do Formador :: ENA Escola de Negcios e Administrao

.16

sintaxe
Create Table nome_tabela ( nome_campo_1 tipo_1, nome_campo_2 tipo_2, nome_campo_n tipo_n, Key(campo_x,...) ) Ponhamos agora como exemplo a criao da tabela pedidos que empregamos anteriormente: Create Table pedidos ( id_pedido INT(4) NOT NULL AUTO_INCREMENT, id_cliente INT(4) NOT NULL, id_artigo INT(4)NOT NULL, data DATE, quantidade INT(4), total INT(4), KEY(id_pedido,id_cliente,id_artigo) ) Neste caso criamos os campos id os quais so considerados de tipo inteiro de uma longitude especificada pelo nmero entre parnteses. Para id_pedido requeremos que tal campo se incremente automaticamente (AUTO_INCREMENT) de uma unidade a cada introduo de um novo registo para, desta forma, automatizar a sua criao. Por outro lado, para evitar uma mensagem de erro, necessrio requerer que os campos que vo ser definidos como ndices no possam ser nulos (NOT NULL). O campo data armazenado com formato de data (DATE) para permitir sua correta explorao a partir das funes previstas a tal efeito. Finalmente, definimos os ndices numerando-os entre parnteses precedidos da palavra KEY ou INDEX. Da mesma forma poderamos criar a tabela de artigos com uma sentena como esta: Create Table artigos Nome do Formador :: ENA Escola de Negcios e Administrao

.17

( id_artigo INT(4) NOT NULL AUTO_INCREMENT, titulo VARCHAR(50), autor VARCHAR(25), editorial VARCHAR(25), preco REAL, KEY(id_artigo) ) Neste caso pode-se ver que os campos alfanumricos so introduzidos da mesma forma que os numricos. Voltemos a recordar que nas tabelas que tm campos comuns de vital importncia definir estes campos da mesma forma para o bom funcionamento da base. Muitas so as opes que se oferecem ao gerar tabelas. No vamos trata-las detalhadamente, pois sai do estritamente prtico. Mostraremos somente alguns dos tipos de campos que podem ser empregados na criao de tabelas com suas caractersticas.

Tipologia

INT ou INTEGER - Nmeros inteiros. Existem outros tipos de maior ou menor longitude especficos de cada banco de dados.

DOUBLE ou REAL - Nmeros reais (grandes e com decimais). Permitem armazenar todo tipo de nmero no inteiro.

CHAR- Alfanumricos de longitude fixa pr-definida. VARCHAR - Alfanumricos de longitude varivel. DATE - Datas, existem mltiplos formatos especficos de cada base de dados. BLOB - Grandes textos no indexveis. BIT ou BOOLEAN - Armazenam um bit de informao (verdadeiro ou falso).

Seleco de Tabelas
A seleco total ou parcial de uma tabela realiza-se com a instruo Select. Numa seleco h que especificar: Nome do Formador :: ENA Escola de Negcios e Administrao

.18

Os campos que queremos seleccionar A tabela na qual fazemos a seleco

Na nossa tabela modelo de clientes poderamos fazer, por exemplo, uma seleco do nome e endereo dos clientes com uma instruo deste tipo: Exemplo: Select nome, endereo From clientes Se quisssemos seleccionar todos os campos, ou seja, toda a tabela, poderamos utilizar o asterisco * da seguinte forma: Exemplo: Select * From clientes Tambm muito til filtrar os registos mediante condies que vem expressas depois da clusula Where. Se quisssemos mostrar os clientes de uma determinada cidade usaramos uma expresso como esta: Exemplo: Select * From clientes Where cidade Like 'Vila Nova de Gaia' Poderamos tambm ordenar os resultados em funo de um ou vrios de seus campos. Para este ltimo exemplo poderamos orden-los por nome da seguinte forma: Exemplo: Select * From clientes Where cidade Like 'Vila Nova de Gaia' Order By nome Tendo em conta que pode haver mais de um cliente com o esmo nome, poderamos dar um segundo critrio que poderia ser o sobrenome: Exemplo: Select * From clientes Where cidade Like 'Vila Nova de Gaia' Order By nome, sobrenome

Nome do Formador :: ENA Escola de Negcios e Administrao

.19

Se invertssemos a ordem "nome, sobrenome" por "sobrenome, nome", o resultado seria diferente. Teramos os clientes ordenados por sobrenome e aqueles que tivessem sobrenomes idnticos eram subclassificados pelo nome. possvel tambm classificar por ordem inversa. Se por exemplo quisssemos ver nossos clientes por ordem de pedidos realizados tendo os maiores em primeiro lugar escreveramos algo assim: Exemplo: Select * From clientes Order By pedidos Desc Uma opo interessante a de efectuar seleces sem coincidncia. Se por exemplo,

quisssemos saber em que cidades se encontram os nossos clientes sem a necessidade de que para isso aparea vrias vezes a mesma cidade, usaramos um comando assim: Exemplo: Select Distinct cidade From clientes Order By cidade Assim evitaramos ver repetido Vila Nova de Gaia tantas vezes quantos clientes tivermos nessa cidade.

Operadores
Quisemos compilar na forma de tabela certos operadores que podem ser teis em determinados casos. Estes operadores sero utilizados depois da clusula Where e podem ser combinados habilmente mediante parnteses para optimizar as nossa seleco a nveis bastante altos.

Operadores matemticos

> Maior que < Menor que >= Maior ou igual que

Nome do Formador :: ENA Escola de Negcios e Administrao

.20

<= Menor ou igual que <> Diferente = Igual

Operadores lgicos

And (e) Or (ou) Not (negao)

Outros operadores
Like: Selecciona os registos cujo valor de campo se assemelhe In e Not In: Conjunto de valores para os quais a condio de seleco (ou no) vlida Is Null e Is Not Null: Selecciona registos onde o campo especificado est (ou no) vazio Between...And: Selecciona os registos compreendidos em um intervalo Distinct: Selecciona os registos no coincidentes Desc,Asc: Ordena os registos de forma descendente/ascendente *: Substitui todos os campos %: Substitui a qualquer coisa ou nada dentro de uma cadeia _: Substitui s um carcter dentro de uma cadeia

Aplicaes Prticas
Neste comando seleccionamos todos os clientes do Porto cujo nome no seja Jos. Como se pode ver, empregamos Like ao invs de = simplesmente para evitar inconvenientes devido ao emprego ou no de maisculas. Select * From clientes Where cidade Like 'Porto' And Not nome Like 'Jose' Se quisssemos obter numa seleco aos clientes da nossa tabela, cujo sobrenome comea por A e cujo nmero de pedidos esteja compreendido entre 20 e 40, usaramos o seguinte comando: Select * From clientes Where sobrenomes like 'A%' And pedidos Between 20 And 40

Nome do Formador :: ENA Escola de Negcios e Administrao

.21

O operador In, ser visto mais adiante, muito prtico para consultas em vrias tabelas. Nos casos de uma nica tabela empregado da seguinte forma: Select * From clientes Where cidade In (Porto,Lisboa,Vila Nova de Gaia) Desta forma seleccionamos os clientes que vivem nestas trs cidades.

Funes
Alm dos critrios at agora explicados, para realizar as consultas em tabelas, o SQL permite tambm aplicar um conjunto de funes pr-definidas. Estas funes, embora sejam bsicas, podem-nos ajudar em alguns momentos a expressar a nossa seleco de uma maneira mais simples, sem ter que recorrer a operaes adicionais por parte do script que estivermos a executar. Dado que o resultado da funo no existe na base de dados, pois estamos a gera-lo virtualmente, isto pode criar inconvenientes quando estivermos a tratar seu valor e o seu nome de campo. por isso que o valor da funo tem que ser recuperada a partir de um apelido que ser especificado no comando SQL, atravs da instruo AS, como veremos nos exemplos seguintes.

Soma
Sum: esta funo calcula a soma dos registos do campo especificado aps o parntesis. Exemplo: Select Sum(total) As soma_pedidos From pedidos

A partir deste comando, calculamos a soma dos valores de todos os pedidos realizados e armazenamos esse valor num campo virtual chamado soma_pedidos, que poder ser utilizado normalmente, como qualquer outro campo da nossa base de dados. Obviamente, tudo que foi visto at agora pode ser aplicado neste tipo de funes de modo que, por exemplo, podemos estabelecer condies com a clusula Where. Nome do Formador :: ENA Escola de Negcios e Administrao

.22

Exemplo: Select Sum (quantidade) as soma_artigos From pedidos Where id_artigo=6 Isto resultava na quantidade de exemplares vendidos de um determinado livro.

Mdia
Avg: Calcula a mdia dos registos do campo especificado aps o parntesis. Exemplo: Select Avg (total/quantidade) From pedidos Outra propriedade interessante destas funes que permitem realizar operaes com vrios campos dentro de um mesmo parntese. Este exemplo tem como resultado o preo mdio a que estariam a ser vendidos os livros. Este resultado no tem porqu coincidir com o do preo mdio dos livros presentes no inventrio, j que, pode ser que as pessoas tenham tendncia a comprar os livros caros ou os baratos. Exemplo: Select Avg (preo) as preco_venda From artigos

Contagem
Count: Proporciona o valor do nmero de registos que foram seleccionados do campo especificado aps o parntesis, ou todos os campos da tabela com *.

Exemplo: Select id_cliente, Count (*) as numero_pedidos From pedidos

Agrupar

Nome do Formador :: ENA Escola de Negcios e Administrao

.23

Group By: Uma clusula interessante no uso das funes o agrupamento. Esta clusula permitenos agrupar registos aos quais vamos aplicar a funo. Podemos por exemplo calcular o dinheiro gasto por cada cliente. Exemplo: Select id_cliente, Sum (total) as soma_pedidos From pedidos Group By id_cliente Ou saber o nmero de pedidos que foram realizados. Exemplo: Select id_cliente, Count (*) as numero_pedidos From pedidos Group By id_cliente As possibilidades como vemos so numerosas e podem ser prticas. Agora tudo fica disposio de nossas ocorrncias e imaginao.

Nome do Formador :: ENA Escola de Negcios e Administrao

.24

PHP HYPERTEXT PREPROCESSOR


5 -

4
comunidade de

PHP uma das linguagens server side mais utilizadas da web. Trata-se de uma linguagem de criao relativamente crescente que teve uma grande aceitao pela webmasters, sobretudo pela potncia e simplicidade que a caracterizam. O 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 fundindo-se ao HTML. Uma das grandes vantagens do php, que ser explorada neste captulo, que oferece inmeras funes para a explorao de bases de dados de um modo fcil, sem complicaes.

Para que serve o php?


Pouco a pouco o PHP vai-se convertendo numa linguagem que nos permite fazer de tudo. No princpio foi desenhado para realizar pouco mais do que um contador e um livro de visitas, o 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 electrnico


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 electrnicos so includas na sua livraria.

Gesto de bases de dados


Torna-se complicado criar um site actual, 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. Nome do Formador :: ENA Escola de Negcios e Administrao

.25

Gesto de ficheiros
Criar, apagar, mover, modificar... qualquer tipo de operao mais ou menos razovel, que nos possamos lembrar, pode ser realizada a partir de uma ampla livraria de funes para a gesto de ficheiros PHP. Tambm poderemos transferir ficheiros por FTP a partir de comandos no nosso cdigo, protocolo para o qual PHP previu, tambm, grande quantidade de funes.

Tratamento de imagem
Evidentemente muito mais simples utilizar Photoshop para o tratamento de uma imagem mas... e se temos de tratar um grande nmero de imagens enviadas pelos nossos cibernautas? A verdade que pode ser complicado uniformizar em tamanho e em formato vrias imagens recebidas todos os dias. Tudo isto pode ser automatizado eficazmente a travs de PHP. Tambm pode parecer til criar botes dinmicos, isto , botes em que utilizamos o mesmo design e s mudamos o texto. A partir da livraria de funes grficas podemos fazer isto e muito mais.

Outras funcionalidades
Muitas outras funes pensadas para a Internet (tratamento de cookies, acessos restritos, comercio electrnico...) 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 todas aquelas obtidas em fruns e sites especializados.

Instalao do php com wamp5


Existe uma maneira de comear a utilizar PHP5 em Windows sem ter que sofrer as complicaes tpicas da instalao em servidores, necessrios para programar em PHP. Trata-se de instalar um pacote chamado WAMP, que permite instalar e configurar um servidor Apache, a base de dados MySQL e o mdulo de programao em PHP verso 5 na nossa mquina local.

Nome do Formador :: ENA Escola de Negcios e Administrao

.26

Programas contidos pelo wAMP5


O software que se instala com o WAMP5 contem os seguintes servidores e programas: Apache 1.3.31. O servidor de pginas web mais difundido do mercado. Embora a ltima verso deste servidor seja Apache 2, instala-se uma verso anterior que mais estvel. Existe um Add-on que permite substituir a verso 1.3.31 de Apache pela ltima verso. PHP5. O motor renovado da linguagem. MySQL. A base de dados mais difundida para utilizar com PHP. PHPmyadmin. Um software que permite administrar uma base de dados atravs de uma interface web. SQLitemanager. Um sistema para administrar uma base de dados a partir de comandos SQL.

Instalao do WAMP
A instalao realiza-se atravs de um executvel Windows onde se escolhe apenas o directrio onde desejarmos que se instalem os programas. Depois do processo de instalao terminado foram criados dois servios: um com o servidor Web e outro da base de dados: Servio wampapache: Relacionado com o servidor Apache. Servio wampmysql: Relacionado com a base de dados MySQL.

Dentro do directrio onde tivermos instalado o WAMP5 ter sido criada uma pasta chamada "www", que corresponde ao directrio de publicao, ou seja, o lugar onde devem ser colocadas as pginas Web.

Funcionamento dos servidores


Quando instalamos WAMP5 criado um grupo de programas chamado WampServer, onde poderemos encontrar a opo: "Start Wampserver", que ser necessria executar, se no tivermos seleccionado a opo para que o servidor se inicie automaticamente. Uma vez que o WampServer esteja em funcionamento, obteremos um cone na barra de tarefas com a forma de um marcador de velocidade. Se clicarmos sobre esse cone, acederemos a um Nome do Formador :: ENA Escola de Negcios e Administrao

.27

menu com opes variadas para providenciar os servios relacionados com o pacote. A imagem abaixo mostra esse menu.

Para termos certeza que a instalao foi bem sucedida e verificar se os servios esto activos, basta aceder pgina de incio do servidor local, escrevendo na barra de endereos de nosso navegador algo como http://localhost/. Ento dever aparecer uma pgina com vrias hiperligaes, para as distintas ferramentas instaladas com o WAMP5, alm de algumas pginas de prova de PHP.

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 nem 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 a seguinte:

<?

?>

Nome do Formador :: ENA Escola de Negcios e Administrao

.28

<% <?php

e e

%> ?>

Este ltimo modo principalmente aconselhado. O modo de funcionamento de uma pgina PHP, em grande parte, no difere do clssico de uma pgina dinmica server side: 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 como se separam uns comandos dos outros. Para faze-lo, temos de acabar cada comando com um ponto e vrgula ";". Para o ultimo comando, o que vai mesmo antes do etiqueta de fecho, no ser necessrio. Inclumos tambm neste captulo a sintaxe de comentrio. 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. O computador tem de ignorar essa frase, pois no vai dirigido a ele, se no a ns mesmos. Os comentrios tem uma grande utilidade pois muito fcil esquecer-se do funcionamento de um script e 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 se queres escrever uma linha ou mais. Vejamos um primeiro exemplo de script:

<? $mensagem="Tenho fome!"; //Comentrio de uma linha echo $mensagem; # Este comentrio tambm de uma linha /* Neste caso o meu comentrio ocupa varias linhas! */ ?>

Se usarmos dupla barra (//) ou o smbolo # podemos introduzir comentrios de uma linha. Mediante /* e */ criamos comentrios multinha. Claro que, nada nos impede de usar os ltimos Nome do Formador :: ENA Escola de Negcios e Administrao

.29

com uma s linha. No necessrio compreender o texto contido nas etiquetas, nesta fase do manual, tudo isso foi apenas a ttulo de exemplo. Adiantamos que as variveis em PHP definem-se antepondo um smbolo de dlar ($) e que a instruo echo serve para escrever no ecr frases ou variveis. Lembramos que todo o texto introduzido em forma de comentrio completamente ignorado pelo servidor. importante comentar o cdigo, com o tempo e complexidade do que estaremos a desenvolver, isto ser muito til.

Variveis em PHP
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 Nmeros com ou sem decimal o o $inteiro=2002; $real=3.14159;

Variveis alfanumricas: Armazenam textos compostos de nmeros e/ou letras


o

$cadeia="Ol mundo";

Vectores: Armazenam sries de informaes numricas e/ou alfanumricas.


o o o o

$sentido[1]="viso"; $sentido[2]="tacto"; $sentido[3]="audio"; $sentido[4]="paladar";

Em comparao com outras linguagens, o PHP tem uma grande flexibilidade ao 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 (ou String): $variavel="5"; //isto uma String Nome do Formador :: ENA Escola de Negcios e Administrao

.30

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: <?php $cadeia="5"; //isto uma cadeia $inteiro=3; //isto um inteiro echo $cadeia+$inteiro; ?> Este script ter como resultado "8". A varivel cadeia ser assimilada como inteiro (ainda que o seu tipo continua a ser de tipo String) para poder realizar essa operao matemtica. Do mesmo modo, podemos operar com variveis de tipo inteiro e tipo real. No devemos preocupar-nos com estas questo de tipo de varivel, o 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 trocar maisculas por minsculas, pois neste sentido, o PHP case-sensitive. 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 partilhem o espao de memria para o mesmo valor. 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. $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". Nome do Formador :: ENA Escola de Negcios e Administrao

.31

Algo assim como: O meu nome Bob O meu nome Bob

Mudana de tipo de variveis


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

Exclui-se, neste caso, a mudana de variveis de tipo Array, porque a sintaxe pode resultar ambgua, isto , pode dar-se o caso que uma linha de cdigo possa significar duas coisas.

$a = "1"; //$a uma cadeia $a[0] = "f"; //Estamos a editar o ndice da cadeia ou a forar o tipo a array?

Forar tipos de variveis (Cast)


De todos modos, podemos forar uma varivel para que mude o tipo com a funo setType(). Exemplo: setType ($variavel,"integer"); A funo setType() actualiza o tipo de $variavel a "integer" e retorna um booleano indicando se houve xito, ou no, com a converso. Os tipos possveis para converso so: "integer" "double" "string"

Nome do Formador :: ENA Escola de Negcios e Administrao

.32

"array" "object"

Tambm podemos fazer com que uma varivel se comporte como um tipo determinado forando-a, da mesma maneira como se faz na linguagem C. $variavel = "23"; $variavel = (int) $variavel; As transformaes permitidas so: (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)

Variveis de sistema
Dada a sua natureza de linguagem server side, o PHP capaz de 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 possvel modificar os seus valores directamente. Para faz-lo necessrio influir sobre as propriedades que as definem. Existem vrias variveis deste tipo, algumas sem utilidade aparente e outras realmente interessantes e com uma aplicao directa para construo de um site. Aqui enumeramos algumas destas variveis e a informao que nos oferecem:

$HTTP_USER_AGENT - Informa-nos principalmente sobre o sistema operativo e da verso do navegador utilizado. A sua principal utilidade incide em que, a partir desta informao, podemos redireccionar os nossos usurios para pginas optimizadas para o seu navegador ou realizar qualquer outro tipo de aco no contexto de um navegador determinado.

$HTTP_ACCEPT_LANGUAGE - Retorna-nos a, ou as abreviaes da lngua considerada como principal pelo navegador. Esta lngua, ou lnguas principais, podem ser escolhidas no menu de opes do navegador. Esta varivel torna-se tambm extremamente til para redireccionar um visitante para as pginas na sua lngua, se que existem.

Nome do Formador :: ENA Escola de Negcios e Administrao

.33

$HTTP_REFERER - Indica-nos a hiperligao com a qual o utilizador teve acesso a pgina. Muito interessante para gerar botes de "atrs" dinmicos ou para criar os nossos prprios sistemas estatsticos.

$PHP_SELF - Retorna-nos uma cadeia com a hiperligao do script que est a ser executado. Muito til para criar botes para recarregar a pgina.

$HTTP_GET_VARS - Trata-se de um vector que armazena os nomes e os contedos das variveis enviadas ao script por uma hiperligao ou por formulrios GET.

$HTTP_POST_VARS

Trata-se de um vector que armazena os nomes e os contedos

das variveis enviadas ao script por meio de um formulrio POST.

$HTTP_COOKIES_VARS - Trata-se de um vector que armazena os nomes e os contedos das cookies. Veremos o que so mais tarde.

$HTTP_COOKIES_VARS - Trata-se de um vector que armazena os nomes e os contedos das cookies.

$PHP_AUTH_USER - 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_AUTH_PW - Armazena a varivel palavra-chave quando se efectua a entrada a pginas de acesso restrito. Combinado com $PHP_AUTH_USER ideal para controlar o acesso s pginas internas do site.

$REMOTE_ADDR - Mostra o endereo IP do visitante. $DOCUMENT_ROOT - Retorna-nos o caminho fsico no qual se encontra alojada a pgina no servidor.

$PHPSESSID - Guarda o identificador da sesso do utilizador. Veremos mais frente o que so as sesses

Variveis superglobais
A partir de PHP 4.1.0, dispomos de um conjunto de variveis de tipo vector que mantm a informao do sistema. Estas variveis chamam-se superglobais porque se definem automaticamente num mbito global. Estas variveis fazem referncia s mesmas que se acediam, em verses antigas do php, por meio dos vectores: $HTTP_*_VARS. Estas ainda existem, ainda que a partir de PHP 5.0.0 podem-se desactivar com a directiva register_long_arrays. Nome do Formador :: ENA Escola de Negcios e Administrao

.34

A lista destas variveis, extrada directamente da documentao de PHP a seguinte:

$GLOBALS - Contm uma referncia a cada varivel disponvel no espectro das variveis do php. As chaves desta matriz so os nomes das variveis globais. $GLOBALS existe desde o PHP 3. $_SERVER -Variveis definidas pelo servidor Web. 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). $_FILES - Variveis proporcionadas ao script por meio do envio 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 utilizador e portanto no so fiveis. 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 registadas na sesso do script. Anloga a antiga matriz $HTTP_SESSION_VARS (que ainda est disponvel, ainda que no se utilize).

Nome do Formador :: ENA Escola de Negcios e Administrao

.35

Operadores
As variveis, como base da informao de uma linguagem, podem ser criadas, modificadas e comparadas por meio dos chamados operadores. Nos captulos anteriores utilizmos, nos nossos exemplos, alguns deles. Neste captulo pretendido dar a conhecer os mais importantes.

Operadores aritmticos
Permitem-nos realizar operaes numricas com as nossas variveis. Os mais utilizados so os seguintes:

Soma: + Subtraco: Multiplicao: * Diviso: / Resto da diviso: %

Operadores de comparao
Utilizam-se principalmente, em estruturas condicionais, para comparar duas variveis e verificar se cumprem, ou no, a propriedade do operador. Os mais utilizados so os seguintes:

Igualdade: == Desegualdade: != Menor que: < Menor ou igual que: <= Maior que: > Maior ou igual que: >=

Operadores Lgicos
Usam-se em combinao com os operadores de comparao quando a expresso da condio assim o requer.

E: and Ou: or Negao: !

Operadores de incremento
Nome do Formador :: ENA Escola de Negcios e Administrao

.36

Servem para aumentar ou diminuir numa unidade o valor de uma varivel, so os seguintes:

Aumenta em 1 o valor da varivel: ++$variavel Diminui em 1 o valor da varivel: --$variavel

Operadores combinados
Uma forma habitual de modificar o valor das variveis atravs dos operadores combinados, so os seguintes:

Soma 10 $variavel: $variavel += 10 Subtrai 10 $variavel: $variavel -= 10 Concatena as cadeias $variavel e "acrescento": $variavel .= "acrescento"

Este tipo de expresses no mais do que abreviaes de outras formas mais clssicas: $variavel += 10 o mesmo que: $variavel = $variavel +10

Vectores em PHP
Um tipo de varivel, que j descrevemos mas, que pode ser relativamente complicado de assimilar em relao maioria, o vector (ou array). Um vector uma varivel formada de vrios elementos, cada um deles catalogado dentro dele mesmo por meio de uma chave. Nos captulos anteriores tnhamos como exemplo, um vector 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"; ?> Este array cataloga os seus elementos, normalmente referidos como valores, por nmero. Os nmeros de 1 ao 5 so por conseguinte chaves e os sentidos so os valores associados. Nada nos impede de utilizar nomes (cadeias) para classific-los. Apenas temos de coloc-los entre aspas: Nome do Formador :: ENA Escola de Negcios e Administrao

.37

<? $moeda["Inglaterra"]="Libra"; $moeda["Portugal"]="Euro"; $moeda["usa"]="Dolar"; ?>

Outra forma de definir este mesmo array, e que nos pode ajudar na criao de arrays mais complexos, a seguinte: <? $moeda=array("Inglaterra "=> " Libra ","portugal" => "Euro","usa" => "Dolar"); ?>

Uma forma muito prtica de armazenar dados atravs da criao de arrays multidimensionais (matrizes). Suponhamos o seguinte exemplo: Queremos armazenar dentro de uma mesma matriz 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, escreve-mos uma expresso similar a exemplificada anteriormente, inserindo um array dentro de outro. Este processo, de incluir uma instruo dentro de outra, chama-se encapsular e muito comum em programao. <? $pais=array("espanha"=>array("nome"=>"Espanha","lingua"=>"Castelhano","moeda"=>"Peset a"), "portugal"=>array("nome"=>"Portugal","lingua"=>"Portugues","moeda"=>"Escudo") ); echo $pais["portugal"]["moeda"] //Escreve no ecr: "Euro" ?> Antes de entrar em detalhe sobre este bloco de cdigo, sero referidos alguns pontos importantes, referentes a sintaxe. Como podemos observar, nesta sequncia de cdigo 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 separa-la em vrias linhas para facilitar a sua leitura. A verdadeira instruo acabaria aps definir completamente o array, e a precisamente onde colocamos o nico ponto e Nome do Formador :: ENA Escola de Negcios e Administrao

.38

vrgula. Por outro lado, pode-se observar que possvel usar o tabulador para separar umas linhas mais que outras. Isto tambm se faz por questes de clareza, pois permite-nos ver que partes esto includas dentro de outras. importante escrever desta forma, assim como a introduzir comentrios, pois a clareza do cdigo fundamental na hora de depura-los. Um pouco de esforo pode poupar muitas horas na hora de corrigir ou modificar cdigo meses mais tarde. O interessante que a utilidade dos arrays no acaba aqui, podendo tambm utilizar toda uma srie de funes criadas para orden-los por ordem alfabtica, directa, inversa ou por chave, contar o nmero de elementos que compem o array etc. Muitas so as funes propostas pelo 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 oficial.

array_values (meu_array): Lista os valores contidos em meu_array asort(meu_array) e arsort(meu_array): Ordena por ordem alfabtica directa ou inversa em funo dos valores

count(meu_array): D-nos o nmero de elementos do nosso array ksort(meu_array) e krsort(meu_array): Ordena por ordem alfabtica directa ou inversa em funo das chaves

list ($variavel1, $variavel2...)=meu_array: Atribui a cada varivel um dos valores do array

next(meu_array),

prev(meu_array),

reset(meu_array)

end(meu_array):

Permite-nos mover dentro do array para o elemento seguinte, para o anteriorm voltar ao inicio ou colocarmo-nos no elemento final do array.

foreach (elem in meu_array): D-nos o valor e a chave do elemento no qual nos encontramos e mexe o ponteiro ao elemento seguinte.

importante referir a grande utilidade do ciclo foreach que percorre de forma sequencial o array do princpio ao fim.

Nome do Formador :: ENA Escola de Negcios e Administrao

.39

Aplicao e funcionalidades vectoriais


Vamos ver vrios exemplos da aplicao de arrays (vetores, matrizes...), em PHP, que ilustram um pouco o funcionamento de algumas funes mais populares. Vejamos alguns exemplos nos quais os nossos arrays podem aumentar ou reduzir o nmero de cdulas disponveis.

array_slice(): Recebe trs parmetros. O array, o ndice do primeiro elemento e o nmero de elementos a tomar, sendo este ltimo parmetro opcional Exemplo: <?php $entrada = array ("Miguel", "Carlos", "Joaquim", "Joao", "Paulo");

//Modifica-se 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 Nome do Formador :: ENA Escola de Negcios e Administrao

.40

Joaquim

array_shift() : Esta funo extrai o primeiro elemento do array e retorna-o. Alm disso, reduz a longitude do array eliminando o elemento que estava na primeira posio. Exemplo: <?php $entrada = array ("Miguel", "Carlos", "Joaquim", "Joao", "Paulo"); //Elimino a primeira cdula $saida = array_shift ($entrada); //Mostro o array echo "A funao retorna: ". $saida. <br>"; foreach ($entrada as $atual) echo $atual . <br>"; 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>"; ?> Ter como sada: Miguel Carlos Joaquim Joo Paulo Joo Paulo

Nome do Formador :: ENA Escola de Negcios e Administrao

.41

unset(): Utiliza-se para destruir uma varivel. No caso dos arrays, pode-se utilizar para eliminar um elemento de um array associativo. Exemplo: <?php $estadios_futebol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta"); //Mostramos os estdios 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>"; ?> Ter como sada: Barcelona -- Nou Camp Real Madrid -- Santiago Bernabeu Valencia Mestalla Real Sociedad -- Anoeta Barcelona -- Nou Camp Valencia Mestalla Real Sociedad -- Anoeta

array_push() : Insere no fim do array uma srie de elementos, indicados no parmetro da funo. Exemplo:

Nome do Formador :: ENA Escola de Negcios e Administrao

.42

<?php $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>"; ?> Ter como sada: Lagartixa Aranha Co Gato Rato Galinha Pombo Urso

array_merge() : Passando dois ou mais arrays por parmetro, retornada uma juno dos dois arrays. Exemplo: <? $tabela = array ("Lagartixa", "Aranha", "Cao", "Gato", "Rato"); $tabela2 = array ("12","34","45","52","12"); $tabela3 = array ("Carro","Pinheiro","Laranjeira","Toupeira","Cao","34"); //Aumentamos o tamanho do array $resultado = array_merge($tabela, $tabela2, $tabela3); foreach ($resultado as $atual) echo $atual . <br>"; ?> Ter como sada:

Nome do Formador :: ENA Escola de Negcios e Administrao

.43

Lagartixa Aranha Co Gato Rato 12 34 45 52 12 Carro Pinheiro Laranjeira Toupeira Co 34

Cadeias de caracteres (strings)


Uma das utilizaes de variveis mais frequente na maioria dos nossos blocos de cdigo so as cadeias de caracteres, vulgarmente definidos como Strings. Uma string no mais que uma cadeia de caracteres alfanumricos (textos, por exemplo). Para atribuir a uma varivel um contedo deste tipo, escrevemo-lo entre aspas dando lugar a declaraes deste tipo: $string="Esta a informao da minha varivel" Se queremos ver no ecr o valor de uma varivel ou uma mensagem qualquer usamos o comando echo como j dissemos anteriormente: echo $string //escreveria "Esta a informao da minha varivel" echo " Esta a informao da minha varivel " //daria o mesmo resultado Podemos concatenar vrias cadeias acrescentando um ponto entre elas: <? $string1="Co"; Nome do Formador :: ENA Escola de Negcios e Administrao

.44

$string2=" morde"; $string3=$string1. $string2; echo $cadeia3 //O resultado : "Co morde" ?>

Tambm podemos introduzir variveis dentro das nossas strings o que nos pode ajudar muito a desenvolver o nosso cdigo. 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" ?> A pergunta que poderiamos 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 como um carcter normal (para representar pago em dlares por exemplo. Para este e outros caracteres, reservados pela linguagem, serem usados dentro de strings, teremos que escrever uma contra barra frente:

Caracter \$ \" \\ \8/2

Efeito na string Escreve dlar na string Escreve aspas na string Escreve contrabarra na string Escreve 8/2 e no 4 na string

Existem, tambm, outras utilidades desta contra barra, que nos permitem introduzir no nosso documento HTML determinados eventos:

Caracter \t \n

Efeito na cadeia Introduz una tabulao no nosso texto Mudamos de linha

Nome do Formador :: ENA Escola de Negcios e Administrao

.45

\r

Salto de linha

Estas mudanas de linha e tabulaes tm unicamente efeito no cdigo e no texto executado pelo navegador. Se queremos que o nosso texto mude de linha teremos de introduzir um echo " " e no echo"\n" pois este ultimo s muda de linha no ficheiro HTML criado quando a pgina estiver a executar no servidor. A diferena entre estes dois elementos 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.<br>Agora mudo de linha executada mas continuo na mesma no cdigo fonte."?> </BODY> </HTML>

As strings podem ser tratadas por meio de varias funes. Veremos estas funes mais posteriormente com mais detalhe. Neste momento deve ser retido que existem muitas possveis aces que podemos realizar sobre string: Dividi-las em palavras, eliminar espaos que sobram, localizar sequncias, mudar caracteres especiais pelo seu correspondente em HTML ou inclusive sacar as META etiquetas de uma pgina Web.

Nome do Formador :: ENA Escola de Negcios e Administrao

.46

Funes PHP
Neste manual j foi referido 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. O 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, programadas por ns, tendo como resultado um conjunto de recursos quase infinito, aplicados atravs de uma simples chamada. As funes integradas em PHP so muito fceis de utilizar. S temos de realizar a chamada, e especificar os parmetros e/ou variveis necessrias para que a funo realize a sua tarefa. O que pode parecer ligeiramente mais complicado, mas que se torna sem dvida muito prtico, 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 (META etiquetas) de um documento HTML. Para uma aplicao de comrcio electrnico poderamos criar, por exemplo, funes de mudana de uma moeda a outra, ou de clculo de impostos a acrescentar ao preo de um artigo. Resumindo, mais que ser interessante, criar funes, tambm importante, especialmente nos casos em que teremos que usar mltiplas vezes a mesma acco. Evitando assim programar varias vezes a mesma coisa. Exemplo: <? Function fazer_cabecalho($titulo) { $cabecalho=" <html> \n <head> \n\t <title> $titulo </title> \n </head> \n"; echo $cabecalho; } ?> Esta funo poderia ser chamada no princpio de todas as nossas pginas da seguinte forma: $titulo="Minha web"; fazer_cabecalho($titulo);

Nome do Formador :: ENA Escola de Negcios e Administrao

.47

Desta forma automatizamos o processo de criao do nosso documento. Poderamos por exemplo incluir na funo outras variveis que nos ajudassem a construir as META etiquetas e desta forma, com um esforo mnimo, criaramos os cabealhos personalizados para cada uma das nossas pginas. nos possvel tambm, criar fins de documento ou formatos diversos para os nossos textos, como se fossem de folhas de estilo, teriam assim a vantagem de ser reconhecidos por todos os navegadores. Claro que, a funo ter que ser includa dentro do nosso cdigo, pois no se encontra integrada em PHP, tendo sido criada externamente. 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. Estes ficheiros, em que se guardam as funes, chamam-se livrarias. A forma de inclui-los no nosso cdigo usando a instruo require ou include. Exemplo: Teramos um ficheiro livraria.php como segue <?php //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 outro lado teramos o nosso script principal pagina.php (por exemplo): <? include("livraria.php"); $titulo="Minha Web"; fazer_cabecalho($titulo); ?> O corpo da pagina

Nome do Formador :: ENA Escola de Negcios e Administrao

.48

Podemos inserir todas as funes que formos encontrando dentro de um mesmo ficheiro, mas torna-se muito mais vantajoso classificar cada funo, em diferentes ficheiros, por temtica: Funes de conexo a base de dados, funes comerciais, funes gerais, etc. Isto vai ajudarnos a localiz-las, para as corrigir ou modificar. Permite-nos tambm carregar unicamente o tipo de funo que necessitamos para o nosso cdigo, evitando assim sobrecargas, 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 aquando 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 cdigo 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 se nos podemos aproveitar de alguma das existentes para facilitar o nosso trabalho. Relativamente ao exemplo anterior, 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 aos nossos objectivos.

Passagem de parmetros por valor


Parmetros so dados que as funes recebem e utilizam, para realizar operaes. Uma funo pode receber qualquer nmero de parmetros, ou mesmo nenhum. Os parmetros, que vo receber, so definidos no seu cabealho. 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 validade durante a execuo da funo, isto , tem um mbito local. Quando a funo termina, os parmetros deixam de existir.

Nome do Formador :: ENA Escola de Negcios e Administrao

.49

A passagem de parmetros em PHP realiza-se por valor. "Por valor" uma maneira tpica de passar parmetros em funes, quer dizer que a modificao de um parmetro no actualiza o valor da varivel fora da funo.

Exemplo: function porvalor ($parametro1){ $parametro1="ol"; echo "" . $parametro1; //imprime "ol" } $minhavariavel = "isto no muda"; porvalor ($minhavariavel); echo "<br>" . $minhavariavel; //imprime "isto no muda"

Ter como sada: Ol Isto no muda

Passagem de parmetros por referncia


Em contraposio passagem de parmetros por valor, est a passagem de parmetros por referncia. Neste 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. <?php function porreferencia(&$string) { $cadeia = 'Sim muda'; } Nome do Formador :: ENA Escola de Negcios e Administrao

.50

$str = 'Isto uma string; 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, no caso de no lhes passar nenhum valor na chamada da funo. Os valores por defeito definem-se atribuindo um dado ao parmetro quando declarado 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 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

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 return, ainda que s retornar dados por um deles de cada vez, isto porque cada vez que se chama um return, termina-se a execuo da funo retornando o dado indicado. Vejamos um novo exemplo para ilustrar o funcionamento de uma funo um pouco mais avanada, que utiliza parte dos novos conceitos introduzidos neste captulo. Trata-se de fazer uma funo que calcula o IVA e que recebe dois parmetros: o valor sobre o qual se Nome do Formador :: ENA Escola de Negcios e Administrao

.51

calcula e a percentagem a aplicar. Se no for indicada, a percentagem de IVA considera-se 19%.

Exemplo: <html> <head> <title>exemplo IVA</title> </head> <body> <?php function iva($base,$percentagem=16){ return $base * $percentagem /100; } echo iva(1000) . <br>"; echo iva(1000,7) . <br>"; echo iva(10,0) . <br>"; ?> </body> html> A funo recebe um parmetro chamado $percentagem com 16 como valor pr-definido. Retorna a percentagem dada sobre a base, tambm passada por parmetro. Deste modo, na primeira execuo da funo, como no se indica a percentagem, mostrar-se- 19% de 1000. Na segunda, mostrar-se- 7% de 1000 e na terceira 0% de 10. Uma funo retorna um nico valor. Se queremos que se possam retornar vrios valores diferentes temos que retornar um array.

Exemplo: function small_numbers() { return array (0, 1, 2); Nome do Formador :: ENA Escola de Negcios e Administrao

.52

} list ($zero, $one, $two) = small_numbers();

list() usa-se para atribuir uma lista de variveis numa s operao. Depois disto, $zero ter como valor 0, $one ter como valor 1 e $two ter como valor 2.

Condies e ciclos
A programao exige em muitas ocasies a repetio de aces sucessivas, ou a escolha de uma determinada sequncia, dependendo de uma ou varias condies. Como exemplo, podamos fazer aluso a um bloco de cdigo 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. 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.

Estruturas condicionais
Quando queremos que o programa tome um caminho concreto, dependente de duas ou varias condies de execuo diferentes, utilizaremos o 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; Nome do Formador :: ENA Escola de Negcios e Administrao

.53

... } O programa verificar o cumprimento ou no da condio. Se a condio estiver correcta, as instrues 1 e 2 sero executadas. De contrrio (else), as instrues A e B sero levadas a cabo. Esta estrutura de base pode complicar-se se tivermos em conta que nem tudo necessariamente to simplista, e que podem existir muitas possibilidades. por isso que poderemos acrescentar outras condies, dentro de uma condio principal. Falamos de condies encapsuladas que teriam uma estrutura do seguinte tipo:

if (condio1) { Instruo 1; Instruo 2; ... } else { if (condio2) { Instruo A; Instruo B; ... } else { Instruo X; ... } }

Nome do Formador :: ENA Escola de Negcios e Administrao

.54

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

Utilizemos um exemplo simples de utilizao de condies. O seguinte programa permitiria detectar a lngua empregue pelo navegador e visualizar uma mensagem nessa lngua. Exemplo: <HTML> <HEAD> <TITLE> Detector de Lngua/TITLE> </HEAD> <BODY> Nome do Formador :: ENA Escola de Negcios e Administrao

.55

<? //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> Para poder ver o funcionamento deste script necessrio mudar o idioma predefinido, 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).

Nome do Formador :: ENA Escola de Negcios e Administrao

.56

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

Estruturas Cclicas
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 cclicas ou loops que nos ajudam a, usando poucas linhas, realizar uma tarefa um certo nmero de vezes. PHP prope vrios tipos de loops, cada um com umas caractersticas especificas:

Loop While: Usamo-lo para executar as instrues contidas no seu interior sempre que a condio definida seja verdadeira. A estrutura sintctica a seguinte: <?php $size=1; While ($size<=6) { echo"<font size=$size>Tamanho $size</font><br>\n"; $size++; } ?>

Loop do/while: Este tipo de loop no difere em excesso do anterior, excepto pelo facto de ser executado pelos menus uma vez. A sintaxe a seguinte: do { instruo1; instruo2;

Nome do Formador :: ENA Escola de Negcios e Administrao

.57

... } while (condio)

Loop for: Este loop deve ser usado quando temos uma condio finita numerria. <? For ($size=1;$size<=6;$size++) { echo"<font size=$size>Tamanho $size</font><br>\n"; } ?>

Loop for each: ajuda-nos a recorrer os valores de um array, ou estrutura similar, para cada elemento existente. <?php $moeda=array("Espanha"=> "Peseta","Portugal" => "Escudo","USA" => "Dolar"); Foreach ($moeda as $chave=>$valor) { echo "Pais: $chave Moeda: $valor<br>"; } ?>

Formulrios
Este tipo de transferncia de uma grande utilidade, pois permite-nos interagir directamente com o utilizador. Este processo serve para extrair/enviar variveis atravs de URLs. Em primeiro lugar, apresentamos uma primeira pgina com um formulrio clssico para preencher e, em seguida, as variveis so recolhidas para uma segunda pgina que as processa:

Nome do Formador :: ENA Escola de Negcios e Administrao

.58

<HTML> <HEAD> </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> O que acontece neste exemplo, que as variveis so enviadas atravs do servidor, para o alvo definido no atributo action do nosso form. O mtodo de envio definido atravs do atributo method, sendo as possibilidades GET ou POST. Ambos os mtodos so similares, mas aconselhase a utilizao do mtodo POST, por questes de segurana, sendo que o mtodo GET torna visvel, temporariamente, na nossa URL os valores das variveis enviadas no formulrio

Nome do Formador :: ENA Escola de Negcios e Administrao

.59

Para continuar com exemplos de uso de formulrios vamos realizar uma pgina que solicita e mostra a idade do visitante e, dependendo da sua idade. Aos maiores de 18 anos -lhes permitido ver a pgina e aos menores no. A pgina do formulrio, qual demos o nome idade.php, teria o seguinte aspecto:

<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 na propriedade action do formulrio, veremos 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) { Nome do Formador :: ENA Escola de Negcios e Administrao

.60

echo "No podes entrar"; } Else { echo "Bemvindo"; } ?> </body> </html> O formulrio recebe a idade, utilizando o array $_POST. A seguir, mostra-se a idade e executase 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.

Sesses
As variveis de sesso diferenciam-se das variveis clssicas no facto em residem no servidor. So especficas de um s usurio, definido por um identificador, e podem ser utilizadas na globalidade das nossas pginas. Para iniciar uma sesso podemos faz-lo de duas maneiras diferentes: Declaramos 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 funes, para alm de recuperar a sesso, servem tambm para introduzir uma nova varivel de tipo sesso.

As sesses devem ser iniciadas no princpio do nosso cdigo, antes de abrir qualquer etiqueta ou de imprimir seja o que for. Em caso contrrio 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 clicamos na hiperligao. <?php Nome do Formador :: ENA Escola de Negcios e Administrao

.61

BASES DE DADOS E PHP


//Inicia a sesso session_start(); ?> <HTML> <HEAD> <TITLE>contador.php</TITLE> </HEAD> <BODY> <?php //grava a sesso na varivel contador incrementando $contador = ++$_SESSION['contador']; //imprime na tela o resultado
6 -

echo "<a href='contador.php'>Abriste esta pgina $contador vezes</a>"; ?> </BODY> </HTML> 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 nesse caso.

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. Nome do Formador :: ENA Escola de Negcios e Administrao

.62

A linguagem PHP oferece interfaces para o acesso a maioria das bases de dados comerciais e por ODBC a todas as bases de dados 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 oferece para cada tipo de base de dados e, por outro estabelecendo um dilogo a partir do idioma universal: SQL.

Funes de interligao PHP-SQL


Este captulo servir para enunciar e exemplificar algumas das funes mais importantes de interligao, entre a nossa base de dados e as nossas pginas PHP. Atravs de sintaxe PHP poderemos criar a nossa base de dados, criar cada tabela, inserir os registos, definir chaves, seleccionar a informao que queremos e basicamente submeter qualquer Query SQL tratando os resultados. Logicamente que a criao da base de dados, e da maioria das tabelas, dever ser feita atravs do interface grfico da nossa base de dados. Desta forma pouparemos cdigo e tempo. As principais funes de interligao so as seguintes: mysql_connect("localhost","user","password"): Esta funo executar a ligao nossa base de dados, recebe como parmetros o nome/Ip do alojamento, o nome de utilizador e a nossa senha de acesso. Deve ser usada antes de qualquer interaco com a base de dados.

mysql_db_query("exemplo","select * from clientes"): Esta funo executa uma query nossa base da dados (de nome exemplo), podemos guardar o seu valor de retorno numa varivel. No caso do insert e delete, devolvera true ou false caso a intruo tenha ou no sucesso. No caso dos Select, devolver o resultado da query. mysql_fetch_array($result): Sendo que a varivel $result, guarda o retorno de uma instruo SQL, submetida atravs da funo myslq_query, esta funo transforma o resultado num vector associativo com os nomes dos campos como chaves. mysql_affected_rows(): Devolve o nmero de linhas afectadas pela nossa ltima query, pode ser til para sabermos se um insert, update ou delete funcionou ou no. mysql_error(): Devolve, em caso de erro, a frase vinda da nossa base de dados. mysql_num_rows(): Devolve o nmero de registos seleccionados na nossa query. mysql_close(): Fecha a conexo nossa base de dados.

Nome do Formador :: ENA Escola de Negcios e Administrao

.63

Nome do Formador :: ENA Escola de Negcios e Administrao

.64

Anda mungkin juga menyukai