Você está na página 1de 61

Desenvolvendo aplicaes com PHP e MySQL

Sumrio

Notas do Autor, 3
Introduo, 4
Instalando o VertrigoServ no Windows, 5
Instalando o Xampp (Apache, MySQL, PHP, Perl) no Linux, 6
Um primeiro Script, 6
Sintaxe Bsica, 7
Tipos, 7
Array, 11
Variveis, 12
Constantes, 13
Expresses, 14
Operadores, 15
Estruturas de Controle, 18
Estruturas de repetio, 21
Funes, 23
Algumas funes do PHP, 25
Manipulao de Arrays, 32
Funes Matemticas, 37
PHP - Constantes Matemticas, 41
Formulrios e Interao com HTML, 44
Um pouco sobre Sesses, 46
MySQL, 47
Inserir, deletar e selecionar com MySQL, 49
Funes do MySQL, 51
PHP interagindo com o Banco de Dados MySQL, 52
Construindo uma Aplicao PHP+MySQL, 54
Referncias Bibliogrficas, 61
3

Notas do Autor

Este guia no tem a pretenso de exaurir o assunto, mas servir de fonte de consulta a iniciantes em
programao que querem desenvolver aplicaes para Web.

muito importante que o leitor teste os exemplos, faa os exerccios propostos e refaa os exerccios
resolvidos.

Os pr-requisitos para a leitura deste guia so: lgica de programao e familiarizao com HTML.

Estima-se que pouco mais de 10% dos domnios na Internet possuem o PHP instalado, da uma grande
oportunidade a esses estudantes e profissionais. Esta a primeira verso do guia.

Daniel Moreira dos Santos


Tcnico em Informtica e Licenciando em Matemtica

Contatos:
daniel-htm@hotmail.com
http://www.danielmoreira.wordpress.com

Dvidas, sugestes e crticas so bem-vindas.

12 Setembro de 2009

Devido a outras ocupaes voltei a escrever o guia e at mesmo a usar o PHP apenas neste ano de
2010. Hoje, dia 29 de Julho de 2010, publico a primeira verso, que chamarei de verso 0 (zero).
Espero em breve atualiz-la com idias que j tenho em mente e tambm com sugestes de leitores e
amigos. Fico feliz de poder contribuir de alguma forma para o seu aprendizado. O segredo dividir
para conquistar!

Daniel Moreira dos Santos

29 de Julho de 2010
4

Introduo

O nome PHP um acrnimo que significa PHP Hypertext Preprocessor. PHP uma linguagem de
script interpretada utilizada em maioria para desenvolver aplicaes Web embutida em um HTML, mas
tambm pode ser usada para o desenvolvimento de aplicaes desktop GUI (veja sobre PHP-GTK) e
scripts de linha de comando.

O PHP que temos hoje o sucessor do PHP/FI, que significa Personal Home Page/Forms Interpreter. O
PHP/FI foi criado por Rasmus Lerdorf por volta de 1995 com o intuito de controlar os acessos a sua
home page (currculo on line).

Voc pode consultar mais sobre a histria do PHP na pgina oficial http://www.php.net. Atualmente o
PHP est na verso 5. Esta verso pode ser encontrada no site assim como a documentao em
portugus.

A princpio daremos uma nfase maior ao desenvolvimento de aplicaes para Web. Para tal, voc
precisa ter instalado em sua mquina um cliente (browser) Web, um servidor Web (usaremos o Apache)
e evidentemente o interpretador PHP. Caso no tenha voc pode instal-los separadamente ou baixar os
pacotes pr-configurados, voc pode alugar um servidor que possua isso instalado se preferir.

Como a configurao no nosso objetivo mostraremos onde e como baixar esses pacotes no Linux e
Windows. Grande parte das aplicaes Web faz interao com um banco de dados, ns utilizaremos o
banco de dados MySQL, j que muito utilizado e gratuito.

O PHP uma linguagem de script Server-Side, isto , um conjunto de cdigos que sero interpretados
no servidor. Uma caracterstica que o cdigo de um arquivo.php no exibido como acontece com
um cdigo HTML ou Java script que so chamados linguagens Client-Side, so interpretadas no cliente
Web.
5

Instalando o VertrigoServ no Windows

Como dito anteriormente, precisamos instalar o Apache (servidor Web HTTP), PHP e o MySQL
(Sistema Gerenciador de Banco de Dados). Para tal vamos instalar O VertrigoServ, que um projeto
desenvolvido para facilitar a instalao desses componentes.

O VertrigoServ ainda inclui SQLite, SQLiteManager, ZendOptimizer, Smarty e o PhpMyAdmin. Esse


ltimo ns utilizaremos algumas vezes para manusearmos o nosso banco MySQL.

Para baix-lo abra a pgina do projeto http://vertrigo.sourceforge.net/?lang=br e procure pela verso


mais recente. Depois de instalar, inicie a aplicao. Note que na barra de tarefas ( direita) aparecer
um cone com um detalhe verde significando que tudo est funcionando (Apache, PHP e MySQL).

Clique sobre o cone e em seguida sobre WWW Folder. Esta pasta onde os seus arquivos.php devero
estar. Crie uma pasta com o nome do seu projeto, para visualizar seus arquivos .php abra o seu
navegador preferido e digite http://localhost/nome_da_sua_pasta/nome_do_arquivo.php.

Voc pode acessar o PhpMyAdmin em Tools (ou Ferramentas) e depois clicando sobre PhpMyAdmin.
Pronto, isso tudo que precisaremos no momento!
6

Instalando o Xampp (Apache, MySQL, PHP, Perl) no Linux.

Abra o seu Web browser e digite http://sourceforge.net/project/showfiles.php?group_id=61776, essa a


pgina do projeto. Procure pela verso mais nova para Linux. Agora abra o seu terminal e digite:

sudo tar xvfz xampp-linux-1.6.4.tar.gz -C /opt

Agora vamos iniciar as aplicaes:

sudo /opt/lampp/lampp start

Pronto. Est tudo instalado no diretrio /opt/lampp com a configurao padro. Voc pode instalar em
outro diretrio se preferir.

Para ver seus arquivos.php atravs de um Web browser coloque-os na pasta /opt/lampp/htdocs. No
navegador digite: http://localhost/nome_da_pasta/nome_do_arquivo.php

Um primeiro Script

Aqui vamos mostrar um primeiro script em PHP que imprimir a mensagem Ol Mundo! no
document do seu browser.

Este no um script muito til, pois sua sada ser a mesma de: <p> Ol&aacute; Mundo </p>. Mas a
inteno de mostrar como ele aparece em um cdigo HTML.

Note que um script em PHP comea com <?php e termina com ?>. O que estiver entre esses
delimitadores de cdigo no aparece no lado cliente como um cdigo. Clique com o boto direito do
mouse sobre o document, em seguida clique em exibir cdigo-fonte, note que voc no consegue
visualizar o cdigo PHP.

A funo echo imprime uma string na tela, nesse caso imprimimos Ol Mundo.
7

Sintaxe Bsica

Como falado anteriormente, um script em PHP inicia com a tag <?php e termina com a tag ?>. Essas
so as tags mais utilizadas para delimitar um cdigo PHP, mas voc tambm pode usar <? e ?> desde
que a opo short_open_tag esteja ativada no seu php.ini ou tambm se o PHP foi configurado com a
opo --enable-short-tags.

Outra opo, porm menos comum, a de usar <script language-php> e </script>. Como
curiosidade voc poderia pesquisar sobre como usar tags asp no php.

Uma boa prtica de programao usar ponto e vrgula ( ; ) no final de cada comando. O ponto e
vrgula diz ao PHP que a instruo chegou ao fim, e se no houver erro ele executa a prxima
instruo.

Voc pode omitir o ltimo ponto e vrgula ( ; ) do bloco de cdigo, pois a tag ?> diz ao php que o fim
da instruo e do bloco.

Tipos

O PHP tem suporte a oito tipos primitivos: boolean, integer, float (double), string, array, object,
resource e null. O PHP uma linguagem dita fracamente tipada, pois o tipo da varivel depende do
contexto em que ela est inserida, isto decidido em tempo de execuo.

A funo var_dump() checa o tipo e o valor de uma varivel ou expresso. Mas comumente queremos
saber apenas o tipo de uma varivel, ento usamos as funes is_int(), is_float, is_string() e is_bool().

Assim como em outras linguagens podemos forar um tipo em uma varivel. Para fazermos isso
usamos o que chamamos de casting ou a funo settype().

Para converter um tipo no PHP escrevemos o nome do tipo que queremos moldar a varivel entre
parntesis e em seguida o nome da varivel. Veja a sintaxe do casting no exemplo abaixo:

Moldagens possveis:

(int), (integer) - molde para inteiro.


(bool), (boolean) - converte para booleano.
(float), (double), (real) - converte para nmero de ponto flutuante.
(string) - converte para string
(binary) - converte para string binria
(array) - converte para array (object) - converte para objeto

Booleano
8

Booleano, bool ou boolean, o tipo mais simples. Pode assumir apenas dois valores: true ou false.
Esses so os chamados tipos lgicos. Observe que as palavras true e false so insensitivas, sendo assim
o mesmo que escrever True e False.

Usualmente o tipo booleano utilizado quando retornado de uma expresso envolvendo algum
operador lgico: ==, >=, <=, >, <, !=.

Como vimos acima, podemos converter um valor qualquer para boolean explicitamente utilizando
casting ou atribuindo esse tipo a uma varivel. Entretanto se uma estrutura de controle, operador ou
funo necessitar de um argumento booleano, esse ser enviado para o PHP mesmo que a varivel seja
de um outro tipo qualquer.

Isso ocorre porque o PHP decide o tipo da varivel em tempo de execuo, isso significa que uma
varivel pode ser boolean dependendo do contexto.

Em uma converso para booleano esses valores se tornam false:

1. O prprio booleano FALSE.


2. O inteiro 0 (zero) o ponto flutuante 0.0 (zero).
3. Uma string vazia e a string "0".
4. Um array sem elementos.
5. Um objeto sem elementos membros (somente PHP 4).
6. O tipo especial NULL (incluindo variveis no definidas).
7. Objeto SimpleXML criado para tags vazias.

Qualquer valor diferente assumido como true.

Inteiro

O tipo inteiro o mesmo que conhecemos na matemtica quando falamos de conjuntos numricos. Um
inteiro um elemento do conjunto Z={..., -2, -1, 0, 1, 2, ...}. No entanto, a memria do computador
limitada, por isso existe um valor mximo para um inteiro no computador.

O tamanho mximo depende da plataforma, sendo um numero aproximado a 2 bilhes que um


nmero de 32 bits com sinal.

Como observado no manual do PHP, ele no suporta inteiros sem sinal. O tamanho do inteiro pode ser
determinado por PHP_INT_SIZE, o valor mximo para PHP_INT_MAX desde o PHP 4.4.0 e PHP
5.0.5.

Os inteiros podem ser representados em notao decimal (ou base 10), octal (ou base 8) e hexadecimal
(ou base 16). Para que o PHP entenda que um nmero est sendo representado em uma outra base
numrica preciso que voc explicite isso.

Preceda o nmero com um 0 para indicar escrita em notao octal e com 0x para indicar notao
hexadecimal. Veja esse exemplo:
9

Uma observao importante que se voc usa um nmero maior que o limite suportado pelo tipo
inteiro, o PHP interpreta como um float.

No existe um operador de diviso inteira no PHP como o DIV em algumas linguagens. Entretanto
voc pode usar o casting que vai truncar o nmero real restando apenas os dgitos inteiros ou voc pode
usar a funo round().

Para converter um valor para o tipo inteiro voc pode usar os modificadores (int) e (integer) como dito
anteriormente ou ento deixar com o que o PHP converta como acontece com as converses para
booleano. Isso acontece desde que algum operador, estrutura de controle ou funo necessite de um
argumento inteiro.

O valor lgico true convertido para inteiro como 1, e o valor lgico false convertido com 0.

Quando um ponto flutuante moldado para inteiro atravs do casting ele truncado. Se o nmero
estiver alm dos limites de um inteiro o resultado indefinido.

Ponto Flutuante

O tipo float, double ou em portugus, ponto flutuante, uma representao de um nmero real. Mas
como j mencionado, o computador possui uma memria finita, o que implica que um float uma
aproximao limitada do nmero.

O tamanho de um float dependente da plataforma assim como o tamanho de um int, sendo o mximo
de ~1.8e308 com uma preciso de 14 casas decimais (nmero de 64 bits).

Por problemas de perda de preciso, nunca podemos ter certeza se um dado nmero de ponto flutuante
realmente exato. Na maioria das vezes ele uma aproximao suficientemente boa para algum
propsito especfico.

O PHP vem com algumas funes de preciso arbitrria que podem te ajudar se precisar de uma
preciso maior do que a fornecida.

Para converter um boolean ou um float, primeiro a converso feita para um int e ento segue a regra
de converso de inteiros para ponto flutuante. O caso do tipo primitivo string especial e veremos
adiante.

Veja um exemplo de representaes de ponto flutuante:


10

String

Uma string uma cadeia de caracteres. No PHP uma string no possui um tamanho mximo, isto ,
pode ser uma cadeia to longa quanto se queira.

Voc pode representar uma string com ' ' (apstrofo) ou (aspas duplas).

O PHP entende mais seqncias de escape para caracteres especiais quando a string delimitada por
aspas.

Veja abaixo algumas seqncias de escape extradas do manual:

\n fim de linha (linefeed ou LF ou 0x0A (10) em ASCII)


\r retorno de carro (carriage return ou CR ou 0x0D (13) em ASCII)
\t TAB horizontal (HT ou 0x09 (9) em ASCII)
\v TAB vertical (VT ou 0x0B (11) em ASCII) (desde o PHP 5.2.5)
\f form feed (FF ou 0x0C (12) em ASCII) (desde o PHP 5.2.5)
\\ contra barra ou barra invertida
\$ sinal de cifro
\" aspas
\[0-7]{1,3} a seqncia de caracteres batendo a expresso regular dos caracteres em notao octal
\x[0-9A-Fa-f]{1,2} a seqncia de caracteres batendo a expresso regular de um caractere em
notao hexadecimal.

Veja este exemplo do uso de strings retirado do manual:


11

Array

Um array um conjunto de variveis indexadas em uma lista. No PHP, um array um tipo bastante
complexo, voc pode acessar um valor da lista atravs de um ndice que pode ser um inteiro ou at uma
string.
Um array pode armazenar valores de diversos tipos, como, inteiro, float, booleano, string e at mesmo
outro array introduzindo o conceito de array multidimensional. Um array de uma dimenso
comumente chamado de vetor.
Podemos simular rvores binrias como array de arrays, mas esse conceito foge da nossa pauta inicial.
Um array pode ser construdo com o mtodo array() do PHP. Veja a sintaxe e logo abaixo um exemplo
ilustrativo do uso do construtor:

array(
ndice => valor, ndice=>valor, ...
)
Como falamos anteriormente, o ndice pode ser um inteiro ou uma string. Valor pode ser de qualquer
tipo.

importante notar algumas coisas, se voc indexar um valor com um float, isto , us-lo como um
ndice no seu array, ele ser convertido para inteiro.

possvel criar um array omitindo os ndices, isto faz com que o PHP fixe os ndices como inteiros. Se
todos os ndices forem omitidos o PHP inicializa o primeiro ndice com 0 e o restante de 1 em 1 em
ordem crescente. Se forem omitidos alguns ndices apenas, o PHP pega o maior ndice inteiro
acrescentado de um e indexa o novo valor da lista.

Veja este exemplo de um array multidimensional:


12

Existem outras observaes a serem feitas sobre o tipo array. O uso do valor lgico true como ndice
ser interpretado pelo PHP como o inteiro 1. Analogamente, false ser interpretado como 0 inteiro.

Usar NULL para indexar um valor no array interpretado como uma string vazia e usar uma string
vazia como chave ir criar (ou sobrescrever) uma chave com uma string vazia e seu valor.

Um aviso importante: voc no pode usar um array ou outro objeto como ndice, isso far com que o
PHP exiba a seguinte mensagem de erro: Illegal offset type..

Tambm existe a possibilidade de indexar valores em um array com colchetes explicitando o ndice e o
valor a ser atribudo. Veja o prximo exemplo:

Variveis

Uma varivel, tanto no PHP como em qualquer outra linguagem, uma referncia uma regio
limitada da memria que contem informao de um determinado tipo de dado.

Toda varivel no PHP deve iniciar com $, isto se torna muito bom quando necessrio identificar
variveis em um cdigo muito extenso.

O PHP case sensitive, isto , h distino no uso de letras maisculas e minsculas. Logo, uma
varivel $Variavel diferente de $variavel, $vArIaVeL, $VARIAVEL e etc.

O nome de uma varivel no PHP pode ter qualquer tamanho, desde que obedea algumas regras. Um
nome de varivel sempre deve iniciar com uma letra ou sublinhado, evidentemente depois do $,
seguido de qualquer seqncia de letras, algarismos e sublinhados. Veja o prximo exemplo sobre o
uso de variveis no PHP:

Como na linguagem C possvel atribuir uma varivel a outra por valor e atribuir por referncia. Uma
atribuio por valor significa que uma cpia da varivel atribuda passada para a outra varivel.
Quando o valor de uma das duas modificado o da outra permanece inalterado.

Quando feita uma atribuio por referncia a segunda varivel referencia (aponta) para a varivel
original. Logo possvel alterar o valor da varivel original utilizando a varivel que recebeu a
13

atribuio. Para fazer referncia necessrio o uso do & antes da varivel original. Veja este exemplo:

Como mostrado no exemplo acima, s possvel atribuir por referncia variveis com nome.

As variveis no precisam ser inicializadas no PHP, falaremos um pouco sobre boas prticas de
programao e riscos que isso representa no Captulo de Segurana.

Quando no inicializadas elas recebem um valor padro do tipo delas, que como dissemos, decidido
em tempo de execuo de acordo com o contexto - FALSE, zero, string vazia ou null.

Constantes

Pela prpria definio da palavra, uma constante no uma varivel. Uma varivel um identificador
para um valor que pode ser alterado, e no PHP at receber um valor de outro tipo. Uma constante um
identificador de um nico valor que no alterado no decorrer do script.

O nome ou identificador de uma constante sempre maisculo por padro. Como qualquer outro rtulo
no PHP, o nome de uma constante vlida comea com uma letra ou sublinhado, seguido por uma
seqncia de letras, nmeros e/ou sublinhados. Veja este exemplo:

A forma de definir uma constante utilizando a funo define(). Uma constante no pode ser alterada
depois de sua definio.

Constantes podem ser boolean, int, float ou string. Uma constante no pode ser um objeto, que
estudaremos adiante.

Para acessar o valor de uma constante basta escrever seu nome ou utilizar a funo constant(). Uma
observao importante que voc no pode utilizar o caractere $ no nome de uma constante.
14

Expresses

Utilizamos expresses em todos os exemplos dados acima. Uma expresso uma sentena com valor.
As expresses podem ser separadas em expresses de atribuio e expresses de comparao.

A forma mais simples de aparecer uma expresso em uma atribuio de um valor constante a uma
varivel, mas uma expresso aparece em diversas outras formas como comparaes retornando um
valor lgico. Veja o exemplo abaixo:

O PHP avalia uma atribuio da direita para a esquerda, portanto vlido e muito comum escrevermos
$a=$b=45;. O que acontece que o PHP atribui a constante 45 a $b e a $a.

No exemplo acima utilizamos os operadores incremento e decremento. Um incremento uma


atribuio do tipo $a++;, que o mesmo que $a=$a+1;. Analogamente um decremento subtrair 1 do
valor original da varivel, portanto $a--; o mesmo que $a=$a-1;

Existem vrios operadores de comparao, todos eles so utilizados em expresses. Vamos cit-los aqui
e v-los no prximo captulo com mais detalhe.

Operador de atribuio =, operador de incremento ++, operador de decremento --, operadores de


comparao: > (maior que), >= (maior ou igual a), < (menor que), <= (menor ou igual a), == (igual), !=
(diferente), === (igual a e do mesmo tipo), !== (diferente de ou no do mesmo tipo).

Note que existem formas diferentes de escrever a mesma coisa, por exemplo, $a+=1; isso
interpretado pelo PHP como o valor de $a incrementado de 1.
Um outro operador bem conhecido, mas talvez no to utilizado seja o operador condicional ternrio.
A segunda sub-expresso avaliada e tem seu valor retornado se a primeira sub-expresso for
verdadeira, se a primeira sub-expresso for falsa a terceira sub-expresso avaliada e seu valor
retornado.

Daremos um exemplo do seu uso mais adiante.


15

Operadores

Um operador algo que d vida a uma expresso lgica, em outras palavras, ele avalia uma expresso
de um ou mais valores e retorna um outro valor.

Existem os operadores unrios que operam em apenas um valor, os operadores binrios que operam em
dois valores e o operador ternrio que opera em trs valores.

Como na matemtica, no PHP existe uma precedncia de operadores, isto , quem ser o primeiro a ser
avaliado quando vrios operadores esto na mesma expresso.

Veja as tabelas abaixo retiradas do manual do PHP:

Precedncia dos operadores

Associao Operador Informao adicional


no associativo clone new clone e new
esquerda [ array()
no associativo ++ -- incremento/decremento
~ - (int) (float) (string) (array) (object)
no associativo tipos
(bool) @
no associativo instanceof tipos
direita ! lgico
esquerda */% aritmtico
esquerda +-. aritmtico e string
esquerda << >> Bit-a-bit
no associativo < <= > >= <> comparao
no associativo == != === !== comparao
esquerda & Bit-a-bit e referncias
esquerda ^ Bit-a-bit
esquerda | Bit-a-bit
esquerda && lgico
esquerda || lgico
esquerda ?: ternrio
= += -= *= /= .= %= &= |= ^= <<=
direita atribuio
>>=
esquerda and lgico
esquerda xor lgico
esquerda or lgico
esquerda , muitos usos
16

Operadores Aritmticos

Exemplo Nome Resultado


-$a Negao Oposto de $a.
$a + $b Adio Soma de $a e $b.
$a - $b Subtrao Diferena entre $a e $b.
$a * $b Multiplicao Produto de $a e $b.
$a / $b Diviso Quociente de $a por $b.
$a % $b Mdulo Resto de $a dividido por $b.

Operadores de comparao

Exemplo Nome Resultado


$a == $b Igual Verdadeiro (TRUE) se $a igual a $b.
Verdadeiro (TRUE) se $a igual a $b, e eles so do mesmo tipo
$a === $b Idntico
(introduzido no PHP4).
$a != $b Diferente Verdadeiro se $a no igual a $b.
$a <> $b Diferente Verdadeiro se $a no igual a $b.
Verdadeiro de $a no igual a $b, ou eles no so do mesmo tipo
$a !== $b No idntico
(introduzido no PHP4).
$a < $b Menor que Verdadeiro se $a estritamente menor que $b.
$a > $b Maior que Verdadeiro se $a estritamente maior que $b.
Menor ou
$a <= $b Verdadeiro se $a menor ou igual a $b.
igual
Maior ou
$a >= $b Verdadeiro se $a maior ou igual a $b.
igual
17

Operadores de Incremento/Decremento

Exemplo Nome Efeito


++$a Pr-incremento Incrementa $a em um, e ento retorna $a.
$a++ Ps-incremento Retorna $a, e ento incrementa $a em um.
--$a Pr-decremento Decrementa $a em um, e ento retorna $a.
$a-- Ps-decremento Retorna $a, e ento decrementa $a em um.

Operadores Lgicos

Exemplo Nome Resultado


$a and $b E Verdadeiro (TRUE) se tanto $a quanto $b so verdadeiros.
$a or $b OU Verdadeiro se $a ou $b so verdadeiros.
$a xor $b XOR Verdadeiro se $a ou $b so verdadeiros, mas no ambos.
! $a NO Verdadeiro se $a no verdadeiro.
$a && $b E Verdadeiro se tanto $a quanto $b so verdadeiros.
$a || $b OU Verdadeiro se $a ou $b so verdadeiros.

Operadores de array

Exemplo Nome Resultado


$a + $b Unio Unio de $a e $b.
$a == $b Igualdade TRUE se $a e $b tem os mesmos pares de chave/valor.
TRUE se $a e $b tem os mesmos pares de chave/valor na mesma ordem e
$a === $b Identidade
do mesmo tipo.
$a != $b Desigualdade TRUE se $a no igual a $b.
$a <> $b Desigualdade TRUE se $a no igual a $b.
$a !== $b No identidade TRUE se $a no idntico a $b.
18

Estruturas de Controle

Basicamente as estruturas de controle so divididas em dois tipos: Estruturas condicionais e as


estruturas de repetio (loops). As estruturas de controle aglomeram instrues que devero ser
executadas dada uma condio ou que sero executadas um nmero finito de vezes.

If

O if, ou se em portugus, uma estrutura de controle do tipo condicional, isto , um dado bloco de
comandos ser executado se certa condio for verificada. Note que j usamos esta estrutura de
controle anteriormente. Para ficar mais claro vamos ver um exemplo:

Neste exemplo $valor igual a 10, se $valor igual a 10 ento a prxima instruo para imprimir a
string Valor=10.
A sintaxe bsica da estrutura condicional if :
if(condio){
bloco_de_comandos
}

If else

O if else (se seno) funciona de forma semelhante, apenas tem-se um bloco de comandos de escape
caso a condio no seja satisfeita. Seguindo o exemplo anterior:

Neste exemplo impresso a string Valor!=11 pois a expresso $valor==10 retorna o valor lgico
false. Lembre-se que ser executado apenas um dos dois blocos de comandos.
A sintaxe bsica do if else :

if(condio){
bloco_de_comandos_1
}else{
bloco_de_comandos_2
}
19

Encadeando if else if

muito freqente o uso de if's encadeados durante a confeco de um programa. Vamos dar um
exemplo de como seria o seu uso.

Switch case

O Switch case uma outra estrutura condicional, mas diferente de outras linguagens, no PHP o switch
case pode ser usado para testar condies sobre strings alm de nmeros inteiros.

A instruo switch executa case a case, quando uma instruo case encontrada com um valor igual ao
valor dentro do switch, o PHP executa as instrues seguintes.

O PHP executa as instrues at o fim do bloco switch ou na primeira vez que encontrar uma instruo
break. Se voc no escrever uma instruo break no fim das instrues case, o PHP continuar
executando os cases seguintes. Vamos ver alguns exemplos:
20

Exemplo com strings:

No exemplo acima quando o case correto encontrado o programa sai do switch devido ao break aps
imprimir a frase correspondente.

O case default:

Este case executado quando nenhum outro executado.


21

Estruturas de Repetio (Loops)

As estruturas de repetio, ou laos de repetio, so utilizadas quando um bloco de comandos precisa


ser executado um determinado nmero de vezes.

For

O for uma estrutura de repetio que herdou uma sintaxe bem compacta da linguagem C. Sua sintaxe
bsica :

for(inicializao; condio de parada; incremento/decremento){


bloco_de_comandos
}

Veja um exemplo comentado do uso do for:

Neste exemplo a varivel $i serviu como um contador de passos. Voc pode omitir a inicializao da
varivel, no exemplo acima no faria nenhuma diferena j que o php inicializa a varivel com 0.

Se a instruo de incremento fosse omitida teramos o que chamamos de loop infinito, ou seja, ele iria
imprimir Programando em PHP indefinidamente, provavelmente at o seu computador travar por
falta de memria. Esse seria o exemplo, mas no vale a pena rod-lo, apenas didtico:

Note que como $i++ foi omitido ele verifica a condio (tambm chamada teste de parada) aps
executar o bloco de comandos, como o valor de $i no foi alterado, a condio sempre verdadeira e o
loop no pra.
22

While

Daremos os mesmos exemplos acima, mas substituindo o for pelo while com as devidas modificaes.
Quando avanarmos um pouco mais nas peculiaridades da linguagem teremos exemplos mais
interessantes para olhar.

Sintaxe bsica do while:

while(condio){
bloco_de_comandos
}

Outra forma de criar um loop infinito testando uma condio que sempre verdadeira. Veja o
exemplo abaixo:

Do While
No nada mais do que o while que permite que o bloco de comandos seja executado uma vez antes
que a condio de parada seja testada.
Sintaxe do Do While:
do{
bloco_de_comandos
}while(condio);

Veja este simples exemplo para ilustrar o seu uso:


23

Funes

At agora ns usamos somente uma funo, a funo echo usada para imprimir caracteres no
document do nosso browser.

Uma funo um bloco de comandos que pode ser invocado sempre quando necessrio sem a
necessidade de repetir todo o bloco, apenas fazendo referenciando o seu nome.

Geralmente quando se chama uma funo, um conjunto de argumentos passado e retornado um


valor.

A seguir vamos ver como declarar uma funo, como passar argumentos, como retornar valores
gerados dentro dela e tambm veremos algumas funes interessantes que usaremos no decorrer deste
guia.

Construindo Suas Funes

Para declarar uma funo comeamos com a palavra function seguida do nome que queremos d-la.
Dentro de parntesis, uma lista de argumentos separados por vrgula. Abrimos e fechamos o bloco de
comandos da funo respectivamente com { e }.

function nome_da_funcao(lista_de_argumentos){
bloco_de_comandos
return valor
}

Veja o exemplo abaixo:

claro que o exemplo acima apenas ilustrativo. No precisamos criar uma funo para somar dois
nmeros, podemos usar o operador + de uma vez.

O prximo exemplo mais interessante, pois mostra como seria incmodo repetir o bloco de comandos
da funo toda vez que precisssemos dela.

A partir dele voc pode inferir como til construir funes para resolver problemas maiores.
24

Veremos nos exemplos a seguir que uma funo pode no precisar de uma lista de argumentos e/ou
retornar algum valor.

O exemplo anterior poderia ser assim:


25

Algumas funes do PHP

Segue uma lista de funes do PHP que utilizaremos algumas vezes. Parte da lista foi retirada da
internet e parte retirada do manual do PHP. Voc pode adquirir a prtica de consult-lo sempre que
necessitar.

Manipulao de Strings

1) Funes relacionadas HTML

. htmlspecialchars

string htmlspecialchars(string str);

Retorna a string fornecida, substituindo os seguintes caracteres:

& para '&'


" para '"'
< para '<'
> para >'

. htmlentities

string htmlentities(string str);

Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte
todos os caracteres da string que possuem uma representao especial em html, como por exemplo:

para ''
para ''
para ''
para '

. nl2br

string nl2br(string str);

Retorna a string fornecida substituindo todas as quebras de linha ("\n") por quebras de linhas em html
("<br>").
26

Exemplo:

. get_meta_tags

array get_meta_tags(string arquivo);

Abre um arquivo HTML e percorre o cabealho em busca de "meta" tags, retornando num array todos
os valores encontrados.

Exemplo:

No arquivo teste.html temos:

...
<head>
<meta name="author" content="jose">
<meta name="tags" content="php3 documentation">
...
</head><!-- busca encerra aqui -->
...

A execuo da funo:

. strip_tags

string strip_tags(string str);

Retorna a string fornecida, retirando todas as tags html e/ou PHP encontradas.

Exemplo:

. urlencode

string urlencode(string str);

Retorna a string fornecida, convertida para o formato urlencode. Esta funo til para passar variveis
para uma prxima pgina.
27

. urldecode

string urldecode(string str);

Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato
urlencode para texto normal.

2) Funes relacionadas arrays

. implode e join

string implode(string separador, array partes);


string join(string separador, array partes);

As duas funes so idnticas. Retornam uma string contendo todos os elementos do array fornecido
separados pela string tambm fornecida.

Exemplo:

. split

array split(string padrao, string str, int [limite]);

Retorna um array contendo partes da string fornecida separadas pelo padro fornecido, podendo limitar
o nmero de elementos do array.

Exemplo:

. explode

array explode(string padrao, string str);

Funciona de maneira bastante semelhante funo split, com a diferena que no possvel estabelecer
28

um limite para o nmero de elementos do array.

Comparaes entre strings

. similar_text

int similar_text(string str1, string str2, double [porcentagem]);

Compara as duas strings fornecidas e retorna o nmero de caracteres coincidentes. Opcionalmente pode
ser fornecida uma varivel passada por referncia (ver tpico sobre funes), que receber o valor
percentual de igualdade entre as strings. Esta funo case sensitive, ou seja, maisculas e minsculas
so tratadas como diferentes.

Exemplo:

. strcasecmp

int strcasecmp(string str1, string str2);

Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um
valor menor que zero se str1 < str2. Esta funo case insensitive, ou seja, maisculas e minsculas
so tratadas como iguais.

. strcmp

int strcasecmp(string str1, string str2);

Funciona de maneira semelhante funo strcasecmp, com a diferena que esta case sensitive, ou
seja, maisculas e minsculas so tratadas como diferentes.

. strstr

string strstr(string str1, string str2);


string strchr(string str1, string str2);

As duas funes so idnticas. Procura a primeira ocorrncia de str2 em str1. Se no encontrar, retorna
uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto.

Exemplo:
29

. stristr

string stristr(string str1, string str2);

Funciona de maneira semelhante funo strstr, com a diferena que esta case insensitive, ou seja,
maisculas e minsculas so tratadas como iguais.

. strpos

int strpos(string str1, string str2, int [offset] );

Retorna a posio da primeira ocorrncia de str2 em str1, ou zero se no houver. O parmetro opcional
offset determina a partir de qual caractere de str1 ser efetuada a busca. Mesmo utilizando o offset, o
valor de retorno referente ao incio de str1.

. strrpos

int strrpos(string haystack, char needle);

Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se no houver.

3) Funes para edio de strings

. chop

string chop(string str);

Retira espaos e linhas em branco do final da string fornecida.

Exemplo:

. ltrim

string ltrim(string str);

Retira espaos e linhas em branco do final da string fornecida.


Exemplo:
. trim
30

string trim(string str);

Retira espaos e linhas em branco do incio e do final da string fornecida.

Exemplo:

. strrev

string strrev(string str);

Retorna a string fornecida invertida.

Exemplo:

. strtolower

string strtolower(string str);

Retorna a string fornecida com todas as letras minsculas.

Exemplo:

. strtoupper

string strtoupper(string str);

Retorna a string fornecida com todas as letras maisculas.

Exemplo:
31

. ucfirst

string ucfirst(string str);

Retorna a string fornecida com o primeiro caracter convertido para letra maiscula.

Exemplo:

. ucwords

string ucwords(string str);

Retorna a string fornecida com todas as palavras iniciadas por letras maisculas.

Exemplo:

. str_replace

string str_replace(string str1, string str2, string str3);

Altera todas as ocorrncias de str1 em str3 pela string str2.

4) Funes diversas

. chr

string chr(int ascii);

Retorna o caractere correspondente ao cdigo ASCII fornecido.

. ord
32

int ord(string string);

Retorna o cdigo ASCII correspondente ao caractere fornecido.


. echo

echo(string arg1, string [argn]... );

Imprime os argumentos fornecidos.

. print

print(string arg);

Imprime o argumento fornecido.

. strlen

int strlen(string str);

Retorna o tamanho da string fornecida.

Manipulao de Arrays

array

array array(...);

a funo que cria um array a partir dos parmetros fornecidos. possvel fornecer o ndice de cada
elemento. Esse ndice pode ser um valor de qualquer tipo, e no apenas de inteiro. Se o ndice no for
fornecido o PHP atribui um valor inteiro seqencial, a partir do 0 ou do ltimo ndice inteiro
explicitado. Vejamos alguns exemplos:

Exemplo 1:

Temos o seguinte mapeamento:

0 => "um" (0 o primeiro ndice, se no houver um explicito)


1 => "dois" (o inteiro seguinte)
"tr" => "tres"
5 => "quatro" (valor explicitado)
6 => "cinco" (o inteiro seguinte ao ltimo atribudo, e no o prximo valor, que seria 2)
33

Exemplo 2:

Temos o seguinte mapeamento:

0 => "um
6 => "dois
tr" => tres
5 => "quatro" (seria 7, se no fosse explicitado)
7 => "cinco" (seria 6, se no estivesse ocupado)

Em geral, no recomendvel utilizar arrays com vrios tipos de ndices, j que isso pode confundir o
programador. No caso de realmente haver a necessidade de utilizar esse recurso, deve-se ter bastante
ateno ao manipular os ndices do array.

. range

array range(int minimo, int maximo);

A funo range cria um array cujos elementos so os inteiros pertencentes ao intervalo fornecido,
inclusive. Se o valor do primeiro parmetro for maior do que o do segundo, a funo retorna false
(valor vazio).

. shuffle

void shuffle(array &arr);

Esta funo "embaralha" o array, ou seja, troca as posies dos elementos aleatoriamente e no retorna
valor algum.

. sizeof

int sizeof(array arr);

Retorna um valor inteiro contendo o nmero de elementos de um array. Se for utilizada com uma
varivel cujo valor no do tipo array, retorna 1. Se a varivel no estiver setada ou for um array vazio,
retorna 0.

1) Funes de "navegao

Toda varivel do tipo array possui um ponteiro interno indicando o prximo elemento a ser acessado no
34

caso de no ser especificado um ndice. As funes seguintes servem para modificar esse ponteiro,
permitindo assim percorrer um array para verificar seu contedo (chaves e elementos).
. reset

mixed reset(array arr);

Seta o ponteiro interno para o primeiro elemento do array, e retorna o contedo desse elemento.

. end

mixed end(array arr);

Seta o ponteiro interno para o ltimo elemento do array, e retorna o contedo desse elemento.

. next

mixed next(array arr);

Seta o ponteiro interno para o prximo elemento do array, e retorna o contedo desse elemento.

Obs.: Esta no uma boa funo para determinar se um elemento o ltimo do array, pois pode
retornar false tanto no final do array como no caso de haver um elemento vazio.

. prev

mixed prev(array arr);

Seta o ponteiro interno para o elemento anterior do array, e retorna o contedo desse elemento.
Funciona de maneira inversa a next.

. pos

mixed pos(array arr);

Retorna o contedo do elemento atual do array, indicado pelo ponteiro interno.

. key

mixed key(array arr);

Funciona de maneira bastante semelhante a pos, mas ao invs de retornar o elemento atual indicado
pelo ponteiro interno do array, retorna seu ndice.

. each

array each(array arr);


35

Retorna um array contendo o ndice e o elemento atual indicado pelo ponteiro interno do array. O valor
de retorno um array de quatro elementos, cujos ndices so 0, 1, "key" e "value". Os elementos de
ndices 0 e "key" armazenam o ndice do valor atual, e os elementos de ndices 1 e "value" contm o
valor do elemento atual indicado pelo ponteiro.

Esta funo pode ser utilizada para percorrer todos os elementos de um array e determinar se j foi
encontrado o ltimo elemento, pois no caso de haver um elemento vazio, a funo no retornar o valor
false. A funo each s retorna false depois q o ltimo elemento do array foi encontrado.

Exemplo:

2) Funes de ordenao

So funes que servem para arrumar os elementos de um array de acordo com determinados critrios.
Estes critrios so: manuteno ou no da associao entre ndices e elementos; ordenao por
elementos ou por ndices; funo de comparao entre dois elementos.

. sort

void sort(array &arr);

A funo mais simples de ordenao de arrays. Ordena os elementos de um array em ordem crescente,
sem manter os relacionamentos com os ndices.

. rsort

void rsort(array &arr);

Funciona de maneira inversa funo sort. Ordena os elementos de um array em ordem decrescente,
sem manter os relacionamentos com os ndices.

. asort

void asort(array &arr);

Tem o funcionamento bastante semelhante funo sort. Ordena os elementos de um array em ordem
crescente, porm mantm os relacionamentos com os ndices.
36

. arsort

void arsort(array &arr);

Funciona de maneira inversa funo asort. Ordena os elementos de um array em ordem decrescente e
mantm os relacionamentos dos elementos com os ndices.

. ksort

void ksort(array &arr);

Funo de ordenao baseada nos ndices. Ordena os elementos de um array de acordo com seus
ndices, em ordem crescente, mantendo os relacionamentos.

. usort

void usort(array &arr, function compara);

Esta uma funo que utiliza outra funo como parmetro. Ordena os elementos de um array sem
manter os relacionamentos com os ndices, e utiliza para efeito de comparao uma funo definida
pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer
critrio estabelecido pelo usurio.

. uasort

void uasort(array &arr, function compara);

Esta funo tambm utiliza outra funo como parmetro. Ordena os elementos de um array e mantm
os relacionamentos com os ndices, utilizando para efeito de comparao uma funo definida pelo
usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer
critrio estabelecido pelo usurio.

. uksort

void uksort(array &arr, function compara);

Esta funo ordena o array atravs dos ndices, mantendo os relacionamentos com os elementos., e
utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois ndices do
array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
37

Funes Matemticas

abs()
Retorna o valor absoluto de um nmero.

acos()
Retorna o arco co-seno de um nmero.

acosh()
Retorna o arco co-seno hiperblico de um nmero.

asin()
Retorna o arco seno de um nmero.

asinh()
Retorna o arco seno hiperblico de um nmero.

atan()
Retorna o arco tangente de um nmero como um valor numrico compreendido entre -PI/2 e PI/2
radianos.

atan2()
Retorna o ngulo teta de um ponto (x, y) como um valor numrico entre -PI e PI radianos.

atanh()
Retorna a tangente hiperblica inversa de um nmero.

base_convert()
Converte um nmero de uma base para outra.

bindec()
Converte um nmero binrio para um nmero decimal.

ceil()
Retorna o prximo maior valor inteiro arredondando para cima do valor, se fracionrio.

cos()
Retorna o co-seno de um nmero.

cosh()
Retorna o co-seno hiperblico de um nmero.
38

decbin()
Converte um nmero decimal para um nmero binrio.

dechex()
Converte um nmero decimal para um nmero hexadecimal.

decoct()
Converte um nmero decimal para um nmero octal.

deg2rad()
Converte grau para radiano.

exp()
Retorna o valor da exponencial de um nmero.

expm1()
Retorna o valor da exponencial de um nmero e subtrai uma unidade.

floor()
Retorna o prximo menor valor inteiro ao se arredondar para baixo do valor, se necessrio.

fmod()
Retorna o mdulo da diviso dos argumentos.

getrandmax()
Retorna o valor randmico mximo que pode ser retornado pela funo rand().

hexdec()
Converte um nmero hexadecimal em um nmero decimal.

hypot()
Retorna o comprimento da hipotenusa de um tringulo retngulo.

is_finite()
Retorna true se um valor um nmero finito.

is_infinite()
Retorna true se um valor um nmero infinito.

is_nan()
Retorna true se um valor no um nmero.

lcg_value()
Retorna um pseudo nmero randmico entre 0 e 1.
39

log()
Retorna o logaritmo natural de um nmero (base E).

log10()
Retorna o logaritmo na base 10 de um nmero.

log1p()
Retorna o logaritmo de 1 + um nmero.

max()
Retorna o nmero com o valor mais alto dentre dois especificados.

min()
Retorna o nmero com o valor mais baixo dentre dois especificados.

mt_getrandmax()
Retorna o valor mais comprido que pode ser retornado por mt_rand().

mt_rand()
Retorna um inteiro randmico usando o algoritmo de Mersenne Twister.

octdec()
Converte um nmero octal em um nmero decimal.

pi()
Retorna o valor de PI.

pow()
Retorna a base elevada ao expoente exp.

rad2deg()
Converte um nmero em radiano para graus.

rand()
Retorna um inteiro randomicamente.

round()
Arredonda um nmero.

sin()
Retorna o seno de um nmero.

sinh()
Retorna o seno hiperblico de um nmero.
sqrt()
Retorna a raiz quadrada de um nmero.
40

tan()
Retorna a tangente de um ngulo.

tanh()
Retorna a tangente hiperblica de um ngulo.
41

PHP Constantes Matemticas


Na ltima coluna est a verso do PHP que suporta a constante especificada.
Constante Descrio PHP
M_E Retorna e (aprox. 2.718) 4
M_EULER Retorna a constante de Euler (aprox. 0.577) 4
M_LNPI Retorna o logaritmo natural de PI (aprox. 1.144) 4
M_LN2 Retorna o logaritmo natural de 2 (aprox. 0.693) 4
M_LN10 Retorna o logaritmo natural de 10 (aprox. 2.302) 4
M_LOG2E Retorna o logaritmo de E na base 2 (aprox. 1.442) 4
M_LOG10E Retorna o logaritmo de E na base 10(aprox. 0.434) 4
M_PI Retorna PI (aprox. 3.14159) 3
M_PI_2 Retorna PI/2 (aprox. 1.570) 4
M_PI_4 Retorna PI/4 (aprox. 0.785) 4
M_1_PI Retorna 1/PI (aprox. 0.318) 4
M_2_PI Retorna 2/PI (aprox. 0.636) 4
M_SQRTPI Retorna a raiz quadrada de PI (aprox. 1.772) 4
M_2_SQRTPI Retorna 2/raiz quadrada de PI (aprox. 1.128) 4
M_SQRT1_2 Retorna raiz quadrada de 1/2 (aprox. 0.707) 4
M_SQRT2 Retorna a raiz quadrada de 2 (aprox. 1.414) 4
M_SQRT3 Retorna a raiz quadrada de 3 (aprox. 1.732) 4
42

Exerccios Propostos

1. Dado um vetor qualquer com 8 nmeros reais, faa um algoritmo que informa se h ou no nmeros
repetidos nesse vetor.

2. Crie um mdulo que imprime na tela os elementos de um vetor de 5 nmeros inteiros na ordem
inversa.

3. Calcular a quantidade de dinheiro gasta por um fumante. Dados: o nmero de anos que ele fuma; o
nmero de cigarros fumados por dia e o preo de uma carteira.

4. Ler dois nmeros inteiros, x e y, e imprimir o quociente e o resto da diviso inteira entre eles.

5. Dados dois nmeros inteiros (A e B), verificar e imprimir qual deles o maior, ou a mensagem
A=B caso sejam iguais.

6. Dados trs valores, dizer se eles formam um tringulo. Caso afirmativo, dizer seu tipo (eqiltero,
issceles ou escaleno).

7. Ler um nmero e verificar se ele par ou mpar.

8. Imprimir a srie de Fibonacci.

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,...

9. Calcular a soma dos primeiros termos da srie:

1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10 +

10. Faa um algoritmo para indicar o maior entre 3 nmeros.

11. Faa um algoritmo para escrever por extenso qualquer nmero de 1 algarismo digitado pelo
usurio.

12. Elabore um algoritmo para informar qual a idade do usurio (quantos anos tem, apenas), sendo
informado a data atual e sua data de nascimento.

13. Faa um algoritmo para calcular o fatorial de qualquer nmero inteiro.

14. Faa um algoritmo para ordenar um vetor de nmeros inteiros.

15. Construa um algoritmo que calcule o valor de um nmero n elevado a qualquer nmero x.

16. Calcule o dgito verificador de uma conta corrente segundo os seguintes critrios:
Some cada algarismo da conta
Se o resultado dessa soma for composto de apenas um algarismo, esse o dgito verificador
Se no resultado dessa soma houver mais de um algarismo, some-os at encontrar apenas um
43

algarismo que ser, ento, o dgito verificador.


O algoritmo deve mostrar na tela a conta corrente completa, com o dgito verificador.

Por exemplo:

Conta Corrente: 46793


Soma dos algarismos: 4+6+7+9+3= 29
Como 29 possui dois algarismos, deve-se somar novamente: 2+9 = 11
Como 11 tambm possui dois algarismos, deve-se somar novamente: 1+1 = 2
Como 2 possui apenas um algarismo, esse o dgito verificador procurado.
A resposta na tela deveria ser: 46793-2

17. Faa um algoritmo para calcular todos os nmeros primos entre 2 e 1000.

18. Uma empresa decidiu fazer um levantamento sobre o perfil dos candidatos que se apresentarem
para o preenchimento de vagas de seu quadro de funcionrios. Para cada candidato, ser solicitado o
sexo, a idade e se tem ou no experincia no servio. Esses dados sero guardados em vetores.
Escrever um algoritmo para ler os dados dos candidatos e, a seguir, calcular e imprimir as seguintes
informaes:
a) O nmero de candidatos do sexo feminino e masculino
b) A idade mdia das mulheres que j tm experincia no servio
c) A menor idade entre as mulheres que j tm experincia no servio
d) A porcentagem dos homens com mais de 45 anos, com relao ao total de homens.
e) O nmero de homens com idade inferior a 30 anos sem experincia no servio.

19. Escreva funes de soma, subtrao, multiplicao e diviso, passados dois valores por parmetro e
implemente-as.

20. Escreva uma nica funo que faa as quatro operaes matemticas elementares.
44

Formulrios e Interao com HTML

Comearemos agora a interagir com o HTML, HyperText Marker Language, ou ainda, Linguagem de
Marcao de Hipertexto.

Nosso primeiro passo nesta segunda etapa do guia receber valores passados atravs de formulrios
HTML, trabalharmos com eles e exibir o resultado no document.

Por fim, teremos scripts muito mais flexveis no sentido de interao com o usurio. Nos exemplos e
exerccios acima no vimos nenhuma interao entre o usurio e o script.

Veja a resoluo do exerccio 5 com os dados passados pelo usurio atravs do teclado:

Arquivo html (num.html):

No arquivo acima temos um formulrio com dois campos de texto onde sero digitados os valores e um
boto submit para enviar os dados. Veja que na linha form temos um action com o nome do arquivo que
receber os dados digitados (no nosso caso maior.php) e qual ser o method (no nosso caso POST).

necessrio que todos os campos que tero seus valores utilizados no script PHP tenham o parmetro
name.

O mtodo indica como os dados sero passados. No nosso caso, POST significa que os dados sero
passados sem serem exibidos na URL e possibilita o envio de longas informaes, ao contrrio do
mtodo GET.
45

Arquivo php (maior.php):

No exemplo acima poderamos ter usado simplesmente $valor1 e $valor2 ao invs de $_POST, que o
PHP entenderia que seriam os campos de formulrio com mesmo nome. Mas desde que a diretiva
register_globals no seu php.ini esteja ativada, caso contrrio, $valor1=$valor2=0.
Tambm existe uma outra soluo com o uso de import_request_variables que veremos mais adiante.
Ainda existem alguns problemas que precisamos tratar. No sabemos se o usurio digitou dois nmeros
de fato, ele pode ter digito um texto ou at mesmo no ter digitado nada. Precisamos validar os nossos
dados.

Veja como ficaria com as alteraes de validao:

A funo isset serve para verificar se uma varivel foi definida ou no. A funo is_nan verifica se o
parmetro passado de fato um nmero.

Pronto, nosso exerccio est resolvido.


46

Um pouco sobre Sesses

Basicamente, as sesses so mtodos que preservam determinados dados ativos enquanto o navegador
do cliente estiver aberto, ou enquanto a sesso no expirar.

Quando acessa um web site, um usurio recebe um identificador chamado id de sesso. Este salvo em
um cookie do lado do cliente ou propagado via URL. Voc pode armazenar vrias informaes em uma
sesso.

No site oficial do manual do PHP voc encontrar diversas funes para manipular as sesses:
http://www.php.net/manual/pt_BR/ref.session.php

Voc j deve ter tido contado com sesses ao comprar em uma loja virtual e ter adicionado seus
produtos ao carrinho de compras, ao fazer login de usurio em algum site, frum e etc.

Em nossa aplicao desenvolveremos uma rea de login para ilustrar o uso de sesses.

Veja este exemplo do uso de sesso:

No exemplo acima utilizamos a funo ob_start() que inicializa o buffer e impede qualquer sada para
o navegador at que voc o encerre. Em seguida, abrimos a sesso com a funo session_start() e
gravamos um nome e uma string com uma idade no array de sesso $_SESSION.

Tambm gravamos na sesso o user agent, isto , a identificao do navegador.


47

MySQL

O MySQL um Sistema de Gerenciamento de Banco de Dados (SGBD) da linguagem SQL


Structured Query Language, que significa linguagem de consulta estruturada.

Existem outros SGBD populares, mais o MySQL se destaca pela facilidade de integrao aos scripts
PHP.

Dentre suas caractersticas podemos destacar:


Portabilidade (suporta praticamente qualquer plataforma atual);
Compatibilidade com diversas linguagens de programao.
Excelente desempenho e estabilidade.
No exige muito recurso de hardware.
Fcil de usar.
um software livre com base na GPL.
Suporta Triggers.
Interfaces grficas ([MySQL Toolkit]) de fcil utilizao cedidos pela MySQL Inc.

Voc pode adquirir mais informaes sobre verses, documentao e downloads no site oficial do
MySQL: http://www.mysql.com

Criando Banco de Dados e Tabelas com PHPMyAdmin

Basicamente, um banco composto por tabelas que so formadas por campos. Cada tabela precisa ter
um campo chave primria que faz referncia a sua tabela em outras tabelas.

Agora utilizaremos o famoso PHPMyAdmin para criar nossos Banco de Dados e Tabelas. Se voc
utiliza o VertrigoServ pode acess-lo iniciando o programa, em seguida clicando sobre o cone na barra
de tarefas. Um menu vai aparece em cima da barra, agora v at Tools (ou ferramentas) e clique em
PHPMyAdmin.

Caso esteja utilizando o Xampp, inicie o programa e em seguida abra o seu navegador. Digite
http://localhost, voc ver a pgina principal do Xampp, no menu esquerdo procure por Tools (ou
ferramentas) e pelo PHPMyAdmin. Pronto.

Na pgina principal do PHPMyAdmin encontramos do lado esquerdo um menu superior com os


botes: Home (para voltar a pgina principal do PHPMyAdmin), SQL - Query Window (para escrever
um script SQL ou import-lo de algum arquivo texto), PHPMyAdmin Documentation (para visualizar a
48

documentao do seu PHPMyAdmin) e Documentation (para acessar a documentao do SQL).

Logo embaixo voc pode visualizar todos os bancos de dados criados. Clicando sobre eles pode
visualizar as tabelas de cada banco e clicando sobre elas pode visualizar os seus campos, com mais um
clique sobre Browser, poder visualizar os dados armazenados nela.

Agora vamos criar nosso primeiro banco de dados com PHPMyAdmin. Acesse-o pelo seu navegador e
em seguida, no lado direito voc ver escrito create new database e um campo text. Se o seu
PHPMyAdmin estiver configurado em portugus provavelmente estar criar novo banco de dados.

Neste campo text digitaremos o nome do banco que queremos criar, no nosso caso, digite infpessoais
sem as aspas. Agora clique no boto create.

Pronto, nosso banco de dados infpessoais est criado. Note que aparecer no seu navegador uma coluna
esquerda com o nome do seu banco e um zero entre parntesis indicando que ele no possue nenhuma
tabela. Do lado direito do document do navegador voc ver alm do menu superior do PHPMyAdmin,
a mensagem No tables found in database e logo abaixo Create new table on database infpessoais,
isto , crie uma nova tabela no banco de dados infpessoais.

Ento no campo text indicado como name digite informacoes que o nome da nossa tabela. Em
Number of fields digite 3, isso significa que nossa tabela ter 3 campos. Agora clique em go.

Agora temos a tela de insero dos 3 campos da nossa tabela informacoes. Na mesma coluna escreva
no primeiro text id_contato, tipo INT, escolha o extra auto_increment e o radio button Primary.
Com isso voc est dizendo que o campo id_contato uma chave primria, ou seja, o ndice da tabela
que pode fazer referncia dela em outras tabelas do mesmo banco. Nesse primeiro exemplo s temos
uma tabela. O argumento auto_increment diz que ao adicionar um registro na tabela esse campo
automaticamente incrementado de 1.

Nas duas ltimas colunas insira respectivamente nos campos text nome e telefone e escolha o tipo
dos campos como TEXT.

Agora clique em go e nossa tabela informacoes est pronta.

Clicando em informacoes no lado esquerdo podemos ver todos os campos da nossa tabela. Veja que
clicando em Insert no menu superior do PHPMyAdmin possvel inserir dados nos campos da nossa
tabela. Mas isso no tem muita graa aqui, pois queremos fazer isso atravs do PHP.
49

Alternativamente, podemos criar um banco de dados, criar tabelas neste banco e inserir seus campos
atravs do cdigo SQL correspondente. Perderamos a interface intuitiva do PHPMyAdmin, mas
ganharamos na praticidade.

Veja como ficaria o cdigo para criar o banco infpessoais e a tabela informacoes com seus campos:

O atributo NOT NULL significa que o campo no pode ser nulo. Isso especificado pelo programador.

Inserir, deletar e selecionar com MySQL


Agora que temos nosso banco infpessoais criado, podemos inserir, deletar e selecionar dados nele.
Afinal, para isso que ele serve.
Nesta parte da apostila veremos como fazer isso em cdigo SQL e posteriormente, como fazer atravs
do PHP.

Inserir
Suponha que voc queira adicionar um contato na sua tabela informacoes. Veja o exemplo abaixo de
como fazer:

O cdigo acima significa: Insira no banco 'infpessoais', na tabela 'informacoes' que possui os campos
'id_contato', 'nome' e 'telefone', os valores '1', 'Daniel Moreira dos Santos', '9999-0000'
respectivamente.
50

Deletar

Percebemos que o cdigo bem sugestivo. Delete de 'informacoes', onde 'id_contato' = 1. Lembre que
id_contato nossa chave primria.
Selecionar
Atravs do cdigo SQL podemos selecionar um registro ou grupo de registros que satisfazem uma
condio estabelecida. Como exemplo, suponha que temos os seguintes registros na tabela
informacoes:
1 Daniel Moreira dos Santos 9999-0000
2 Jos Carlos de Oliveira Jr. 0000-9999
3 Jairo Ludtke Jr. 8888-0000

E queremos selecionar para um fim, (mostrar em uma tabela, por exemplo), os registros que possuem 8
no nmero de telefone. Nosso cdigo ficaria assim:

O asterisco (*) no cdigo acima faz referncia a todos os campos da tabela informacoes. Ento temos,
Selecione todos os campos da tabela informacoes onde telefone parece com 8888-8888 e ordene por
id_contato.

Atualizar
Suponha que queremos atualizar o telefone de um dos contatos registrados. Para isso, usamos o
comando UPDATE. Veja o exemplo:

Note que s ser atualizado o telefone do registro com id_contato igual a 2, que por sua vez nico.

Destruir

O comando DROP exclui definitivamente a nossa tabela com todos os seus registros. bom tomar
certo cuidado com este comando.
51

Funes do MySQL
Assim como o PHP, o MySQL possui algumas funes muito teis para manipulao dos registros de
um banco de dados. Aqui registrei algumas:

avg(coluna)
Retorna a mdia dos valores da coluna.

count(item)
Se item for uma coluna, ser retornado o nmero de valores no nulos(NULL) nesta coluna.

Se a palavra-chave DISTINCT for colocada na frente do nome da coluna, ser retornado o nmero de
valores distintos nesta coluna.

Se for passado count(*), ser retornado o nmero total de registros independente de quantos tenham
valor NULL.

min(coluna)
Retorna o valor mnimo da coluna.

max(coluna)
Retorna o valor mximo da coluna.

sdt(coluna)
Retorna o desvio padro dos valores da coluna.

sdtdev(coluna)
O mesmo que SDT(coluna).

sum(coluna)
Retorna a soma dos valores da coluna.
52

PHP interagindo com o Banco de Dados MySQL

Chegou a hora de interagir com o banco de dados e preparar o terreno para a construo da nossa
aplicao PHP/MySQL.

Refaa a sua tabela 'informacoes' no banco de dados infpessoais. Iremos utilizar o PHP para inserir e
manipular alguns registros.

mysql_affected_rows()
Retorna o nmero de linhas atingidas na operao anterior do MySQL. Obtm o nmero de linhas
atingidas pela consulta INSERT, UPDATE, REPLACE ou DELETE mais recente associada ao
link_identifier.

mysql_close()
Fecha a conexo MySQL no persistente ao servidor MySQL que esta associado ao identificador de
conexo dado. Se link_identifier no for especificado, a ultima conexo aberta usada. Retorna true em
caso de xito e false caso contrrio.

mysql_connect()
Abre uma conexo com um servidor MySQL. Os parmetros so: Server, usurio e senha do banco de
dados.

mysql_fetch_array()
Obtm uma linha como uma matriz associativa, uma matriz numrica, ou ambas. Retorna uma matriz
que corresponde a linha obtida e move o ponteiro interno dos dados adiante.

mysql_fetch_row()
Retorna o resultado de uma linha numa matriz numrica. Retorna uma matriz numrica que
corresponde linha, ou false se no houver mais linhas.

mysql_field_len()
Retorna o tamanho do campo especificado.

mysql_field_name()
Retorna o nome do campo especificado no resultado de uma query.

mysql_field_table()
Retorna o nome da tabela onde esta o campo especificado.

mysql_field_type()
Retorna o tipo do campo especificado em um resultado de query.

mysql_get_client_info()
Retorna informao da verso do cliente MySQL, uma string que representa a verso da biblioteca do
cliente.
53

mysql_get_server_info()
Retorna informao do servidor MySQL.

mysql_num_rows()
Retorna o nmero de linhas em um resultado. Este comando valido apenas para obter o nmero de
linhas afetadas por um SELECT.

mysql_query()
Realiza uma query MySQL. Envia uma query para o banco de dados ativo no servidor da conexo
informada atravs do identificador.

Se o parmetro identificador no especificado, a ultima conexo aberta usada. Se nenhuma conexo


esta aberta, a funo tenta estabelecer uma conexo como mysql_connect() seja chamada sem
argumentos e usa-a. O resultado guardado em buffer.

Uma observao que a string da query no deve terminar com ponto e vrgula (;).

mysql_select_db()
Seleciona um banco de dados MySQL. Veremos como isso feito mais adiante.
54

Construindo uma Aplicao PHP+MySQL

Agora chegamos parte mais esperada, onde aplicaremos tudo que aprendemos nas pginas anteriores.
Vamos construir como exemplo de aplicao, uma agenda de contatos com: login, cadastro, excluso e
edio de contatos.

Iremos utilizar o banco de dados infpessoais criado anteriormente e a tabela informacoes para
armazenar os dados dos nossos contatos.

Em primeiro lugar vamos construir a tela de login de usurios. Como voc j est familiarizado com
HTML no ter dificuldades e poder fazer como quiser, modificando e melhorando este simples
exemplo.

Observe que os nomes dos campos so login e senha e no User e Pass. Ento, nossa tela inicial ficou
assim:
55

Agora, precisamos verificar se o usurio e a senha foram digitados corretamente. Essa verificao ns
faremos no arquivo apontado pelo action que est no cabealho do nosso formulrio, que neste caso
o arquivo logar.php. Veja:

Note que nosso exemplo de login ainda muito simples, sem interao com banco de dados e possui
apenas um usurio e senha.

Abrimos e gravamos em seo as variveis $login (que no nosso caso a string danielms) e
$data_login que a data em que foi acessada a agenda de contatos.

Logando com sucesso, veremos a tela principal da nossa aplicao. Esta bem simples e possui um
visual feito com HTML bem bsico.
56

Este o arquivo agenda.php:

A tela principal est dividida na parte superior com as boas-vindas e os links Inserir e SAIR e na
parte inferior onde os contatos so listados e podem ser editados ou excludos.

Abaixo segue o arquivo listar.php:


57

O prximo passo a insero de contatos no sistema. Segue os arquivos form_inserir.php e inserir.php


respectivamente. Quando clicamos em Inserir no menu superior da agenda, o arquivo
form_inserir.php chamado no frame principal, onde encontramos um formulrio a ser preenchido.
58

Agora vamos edio de contatos cadastrados no sistema. Segue os arquivos form_editar.php e


editar.php respectivamente. Quando clicamos em ++ ao lado do contato listado na agenda, o arquivo
form_editar.php chamado no frame principal, onde encontramos um formulrio preenchido com os
dados do contato e estes podem ser alterados.
59

Quando clicamos em XX ao lado do contato listado na agenda, o arquivo excluir.php chamado no


frame principal e o registro ento eliminado da tabela informacoes. Veja o arquivo excluir.php:

Ao clicarmos no link SAIR a sesso encerrada e voltamos a tela inicial de login da aplicao. Isso
acontece porque o link chama o arquivo deslogar.php abaixo:
60

Exerccios Propostos

Faa uma agenda de contatos com login e interao ao banco de dados, cadastro, excluso e edio de
contatos, envio de e-mail com formatao de texto e imagem, aviso de compromissos, upload de foto
no cadastro do contato, cadastro mltiplo de contatos atravs de leitura de arquivo texto.

Este exerccio ser resolvido na prxima verso do guia. Um abrao a todos.


61

Referncias Bibliogrficas

MANUAL do PHP. http://php.net/manual/pt_BR/index.php

PHP 5 AND MYSQL BIBLE. Tim Converse and Joyce Park with Clark Morgan. Wiley Publishing, Inc.

Beginning PHP 5, Apache, MySQL Web Development. Elizabeth Naramore, Jason Gerner, Yann Le
Scouarnec, Jeremy Stolz, Michael K. Glass. Wrox.

Cdigos na Web. http://www.codigosnaweb.com

HTML Staff. http://www.htmlstaff.org

Você também pode gostar