Anda di halaman 1dari 52

Licenciamento de Uso

Este documento propriedade intelectual 2002 do Centro de Computao da Unicamp


e distribudo sob os seguintes termos:
1. As apostilas publicadas pelo Centro de Computao da Unicamp podem ser
reproduzidas e distribudas no todo ou em parte, em qualquer meio fsico ou
eletrnico, desde que os termos desta licena sejam obedecidos, e que esta
licena ou referncia a ela seja exibida na reproduo.
2. Qualquer publicao na forma impressa deve obrigatoriamente citar, nas pginas
externas, sua origem e atribuies de direito autoral (o Centro de Computao da
Unicamp e seu(s) autor(es)).
3. Todas as tradues e trabalhos derivados ou agregados incorporando qualquer
informao contida neste documento devem ser regidas por estas mesmas
normas de distribuio e direitos autorais. Ou seja, no permitido produzir um
trabalho derivado desta obra e impor restries sua distribuio. O Centro de
Computao da Unicamp deve obrigatoriamente ser notificado
(treinamentos@ccuec.unicamp.br) de tais trabalhos com vista ao aperfeioamento
e incorporao de melhorias aos originais.
Adicionalmente, devem ser observadas as seguintes restries:
A verso modificada deve ser identificada como tal
O responsvel pelas modificaes deve ser identificado e as modificaes
datadas
Reconhecimento da fonte original do documento
A localizao do documento original deve ser citada
Verses modificadas no contam com o endosso dos autores originais a
menos que autorizao para tal seja fornecida por escrito.
A licena de uso e redistribuio deste material oferecida sem nenhuma garantia de
qualquer tipo, expressa ou implcita, quanto a sua adequao a qualquer finalidade. O
Centro de Computao da Unicamp no assume qualquer responsabilidade sobre o
uso das informaes contidas neste material.

ndice
Introduo ...........................................................................................................
Comunicao Cliente x Servidor web ................................................................
CGI - Common Gateway Interface .....................................................
Instalao e Configurao .................................................................................
Sintaxe bsica do PHP
Variveis ..................................................................................................
Operadores .............................................................................................
Estruturas de controle .............................................................................
Projeto
Criao da base de dados e tabelas .......................................................
Criao da Home page do site ................................................................
Mdulo de Incluso .................................................................................
Mdulo de Consulta ................................................................................
Mdulo de Excluso ................................................................................
Mdulo de Alterao ...............................................................................
Mdulos Complementares
Como obter data e hora do sistema .......................................................
Listar vrias ocorrncias de uma tabela .................................................
Referncia bibliogrfica .....................................................................................

ltima atualizao em 19/05/2004

1
2
5
6
8
13
16
26
28
29
34
37
40
46
47
49

Programao para a Web utilizando PHP

O que PHP?
A abreviao PHP vem de Hypertext PreProcessor, que uma linguagem de
programao de cdigo aberto muito utilizada para a criao de scripts que so
executados no servidor web para a manipulao de pginas HTML. Apesar de ser mais
utilizado em aplicativos para a web, o PHP tambm suporta programao na linha de
comando e aplicaes grficas cliente para serem executadas em interfaces grficas
atravs do PHP-GTK.

Histria
O PHP foi criado por volta de 1994 por Rasmus Lerdorf, que inicialmente utilizava-o em
sua home page pessoal (Personal Home Page). Em meados de 1995 ele passou a ser
utilizado por outras pessoas e foi reescrito com novos recursos, sendo renomeado para
Personal Home Page Tools/FI (Form Interpreter), e entre os novos recursos, passou a
contar com suporte ao mSQL. Dois anos mais tarde o PHP deixou de ser um projeto
pessoal de Rasmus Lerdorf e passou a ser desenvolvido por uma equipe de
colaboradores, e neste perodo, foi lanada a verso 3 da linguagem. A partir da verso
4 o PHP passou a utilizar a engine de scripting da Zend, para melhorar a performance e
suportar uma variedade maior de bibliotecas externas e extenses. At Agosto de 2003,
o PHP estava sendo utilizado em aproximadamente 13.000.000 de domnios (Pode-se
acompanhar esta estatstica em http://www.php.net/usage.php ).

Vantagens
O PHP tem inmeras vantagens, como veremos a seguir:

uma linguagem de fcil aprendizado;


Tem performance e estabilidade excelentes;
Seu cdigo aberto, no preciso pagar por sua utilizao, e possvel alter-lo
na medida da necessidade de cada usurio;
Tem suporte nos principais servidores web do mercado, principalmente no servidor
web Apache (o mais utilizado no mundo);
Suporta conexo com os bancos de dados mais utilizados do mercado, como por
exemplo, MySQL, PostgreSQL, Oracle e DB2;
multiplataforma, tem suporte nos sistemas operacionais mais utilizados no
mercado;
Suporta uma variedade grande de padres e protocolos, como o XML, DOM,
IMAP, POP3, LDAP, HTTP, entre outros;
No precisa ser compilado.

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Comunicao cliente X servidor web


Quando digitado um endereo no navegador para acessar uma pgina na internet,
ocorre uma requisio (request) do cliente (navegador) ao servidor web. O servidor
processa essa requisio e retorna uma resposta (response) ao cliente, que por sua vez
interpreta o cdigo retornado e formata a pgina para a sua visualizao. Esse
procedimento acontece em todas as requisies feitas pelo navegador.

TCP/IP e HTTP
O procedimento anterior s possvel atravs dos protocolos TCP/IP e HTTP. O TCP/IP
o protocolo bsico para a comunicao entre mquinas conectadas internet, que
gerencia toda a parte de transmisso e distribuio dos dados na rede. O HTTP
(Hypertext Tranfer Protocol) o protocolo que gerencia e formaliza as requisies e as
respostas trafegadas entre o cliente e o servidor web. Caso o servidor web encontre a
pgina, ela ser enviada em partes ao navegador, caso contrrio, o servidor enviar uma
mensagem de erro.

Formato das requisies e respostas HTTP


O formato das requisies e das respostas HTTP so idnticas, como mostramos a
seguir:

Linha de requisio/resposta

Cabealho

Corpo

A diferena entre as duas o contedo de cada parte descrita, as quais vamos falar
separadamente:

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Formato da requisio HTTP

Linha de requisio :

sempre a primeira linha da requisio, a qual precisa


conter um comando HTTP vlido, o caminho da pgina requerida e a verso do
protocolo HTTP:
Exemplo:

GET /artigos/artigos1.html HTTP/1.1

Os comandos HTTP mais usados so:


GET faz requisies especficas e sua funcionalidade limitada, porm o mtodo
mais usado.
POST este mtodo mais abrangente que o GET, e usado para passar informaes
para o servidor. Normalmente usado em formulrios, que enviam dados ao servidor para
serem manipulados.

Cabealho: trecho composto por vrias linhas, que carregam informaes sobre o
cliente, como por exemplo, o tipo e a verso do navegador, a data e as informaes
gerais dos clientes. Seu contedo pode ser variado, contendo outros tipos de linhas, e
para saber quando o cabealho termina e o corpo comea, utilizamos uma linha em
branco. No mnimo, uma requisio deve conter uma linha de requisio e um
cabealho HOST.
Exemplo:

Accept: */*
Accept-Language: pt-br
Connection: keep-alive
Host: www.phpteste.com.br
Referer: http://www.phpteste.com.br/index.php?id=1
User-Agent: Mozilla (X11; I ; Linux I686)

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Corpo: Caso o mtodo GET seja usado na requisio, o corpo estar vazio, mas se
o mtodo utilizado for o POST e a pgina em questo contiver um formulrio HTML
com alguns campos, esses valores sero passados pelo corpo da requisio.

Formato da resposta HTTP

Linha de resposta : Apenas uma linha indicando a verso do HTTP e o cdigo de


resposta do servidor:

Exemplo:

HTTP/1.1 200 OK

100-199 informativo, indica que a requisio est sendo processada


200-299 requisio bem-sucedida, o servidor enviar o cdigo HTML sem nenhum
problema

300-399 Redirecionamento

400-499 o cliente passou uma requisio incorreta ao servidor, no qual no pde ser
executada

500-599 a requisio foi enviada corretamente, porm o servidor no pde execut-la


por estar com problemas internos

Cabealho: Idem ao cabealho de requisio, porm este enviar as informaes


sobre os aplicativos utilizados no servidor:

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Exemplo:

Date: Mon, 11st Feb. 2001, 08:02:43 GMT


Server: Apache/1.3.22 (Unix) PHP/4.1.1
Last-modified: Fri, 08TH Feb 2001, 06:10:00 GMT

Corpo: Caso a requisio seja aceita e executada sem problemas pelo servidor web,
o cdigo HTML requerido ser enviado ao navegador.

CGI Common Gateway Interface


Muitas pessoas tm uma viso distorcida sobre o Common Gateway Interface, pensando
ser uma linguagem de programao, o que no correto. CGI um interface de
comunicao entre o servidor web e programas externos, que normalmente so utilizados
para gerar contextos dinmicos em pginas HTML. Estes tipos de programas podem ser
desenvolvidos em qualquer linguagem que o sistema operacional do servidor web usado
possa executar, como por exemplo, C, Perl, Python, PHP, Delphi entre outros. Apesar de
seu uso ainda ser muito utilizado, este recurso j est se tornando obsoleto, dando lugar
aos mdulos embutidos nos servidores web, que na verdade, podem conter o
interpretador inteiro da linguagem, ou somente parte dele. Linguagens como Perl, Python
e PHP j suportam esse recurso, que tem como vantagem, a maior velocidade de
processamento em relao aos programas CGI, por serem executados pelo prprio
servidor web e no por processos externos, que demandam mais tempo.

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Instalao e Configurao
Primeiramente precisaremos fazer o download dos pacotes de instalao do
servidor Web Apache em http://www.apache.org , e da linguagem PHP http://www.php.net
. O banco de dados que utilizaremos no curso ser o PostgreSQL, o qual j se encontra
instalado e pronto para a utilizao.
O servidor web Apache deve ser instalado primeiro. Abaixo encontra-se o
procedimentos de instalao:

$
$
$
$
$

tar xvzf http-2.0.47.tar.gz


cd http-2.0.47
./configure -prefix=/usr/local/apache
make
make install

--enable-so

Continuaremos a instalao do ambiente com os procedimentos de instalao do PHP:

$ tar xvzf php-4.3.3.tar.gz


$ cd php-4.3.3.tar.gz
$ ./configure -prefix=/usr/local/php
--with-gettext
--with-pgsql=/usr/local/pgsql
--with-apxs2=/usr/local/apache/bin/apxs
$ make
$ make install
$ cp php.ini-dist /usr/local/php/lib/php.ini

No comando ./configure existem diversas opes para a compilao, tanto


nos procedimentos de instalao do PHP quanto do Apache. Na documentao dos
pacotes ou na opo ./configure -help encontram-se mais opes para
utilizao.

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

A prxima etapa editar o arquivo de configurao do Apache, o httpd.conf,


que encontra-se em /usr/local/apache/conf/httpd.conf , com as seguintes
linhas de cdigo:

LoadModule

php4_module

AddType
AddType

application/x-httpd-php .php
application/x-httpd-php-source

DirectoryIndex

modules/libphp4.so

index.html

.phps

index.php

Para inicializar os servios do servidor web e conseqentemente do PHP,


digitaremos o seguinte comando:

$ /usr/local/apache/bin/apachetcl start

Em seguida, faremos um teste de funcionamento da instalao realizada. No


diretrio de publicao do Apache /usr/local/apache/htdocs , criaremos um script
chamado info.php, com o seguinte trecho de cdigo:

<?php
phpinfo();
?>

Uma pgina contendo todas as configuraes para o PHP deve aparecer, caso contrrio,
a instalao foi mal sucedida.

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Sintaxe Bsica
O PHP tem uma sintaxe muito simples e enxuta, o que facilita muito a organizao dos
scripts a serem desenvolvidos. Outro ponto interessante que veremos que os cdigos
em PHP so embutidos no HTML, ao invs de ger-lo por completo, facilitando muito a
anlise de possveis erros nos scripts desenvolvidos. A seguir, exemplos da sintaxe do
PHP:

<?php
...
...
..
?>

<?
....
....
....
?>

<%
....
....
....
%>

<script language=PHP>
....
.....
...
</script>

Variveis
Manipular variveis em PHP uma atividade simples, como veremos a seguir:

no necessrio declarar as variveis, isto feito quando atribumos algum valor para
elas;

para declar-las, necessrio apenas colocar como primeiro caracter o '$' ,


juntamente com a string referente ao nome da varivel, e esta string deve comear
com uma letra ou o caracter '_';

PHP case sensitive, isto , '$a' diferente de '$A'. aconselhvel utilizar os nomes
de variveis com letras minsculas, por causa das variveis pr-definidas da
linguagem, que so declaradas com maisculas;

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

PHP suporta os seguintes tipos de variveis:


inteiros (integer ou long);
ponto flutuante (double ou float);
strings
arrays
objetos *

* Como se trata de um curso bsico, no entraremos em detalhes sobre este tipo

Tipos suportados

Inteiros
Sintaxe:

$curso
$curso
$curso
$curso

=
=
=
=

1000;
-1000;
0234; (inteiro base octal)
0x34; (inteiro na base hexadecimal)

Ponto flutuante
Sintaxe:

$curso = 1.050;
$curso = 52e3; (equivale a 52000)

Diviso de Servios Comunidade Centro de Computao Unicamp

Programao para a Web utilizando PHP

Strings

Sintaxe:

$curso = 'PHP';
# desta maneira, o valor da varivel ser exatamente o texto
contido entre as aspas
$curso= PHP;
# desta maneira, qualquer varivel ou caracter de escape ser
expandido antes de ser atribudo

Caracteres de Escape

\n
\r
\t
\\
\$
\
\

nova linha;
retorno de carro (semelhante a \n)
tabulao horizontal
a prpria barra (\)
o smbolo $
aspas simples
aspas duplas

Arrays : Array um tipo de varivel que possui seu contedo agrupado por ndices,
como um vetor ou um dicionrio. Estes ndices podem ser de qualquer tipo suportado
pelo PHP, como mostrado a seguir:
Sintaxe:

$estilo_musical[0] = 'pagode';
$estilo_musical[1] = drum \'n\' bass;
$estilo_musical[MPB] = 'Gilberto Gil';
$estilo_musical[Rock] = 'Blind Guardian';

Diviso de Servios Comunidade Centro de Computao Unicamp

10

Programao para a Web utilizando PHP

Listas : Utilizadas em PHP para realizar atribuies mltiplas, como por exemplo,
atribuir valores de um array para variveis, como mostra a seguir:
Sintaxe:

list($a,$b,$c) = array(0=>a, 1=>b, 2=>c);

O trecho de cdigo acima atribuir simultnea e respectivamente os valores do array s


variveis passadas como parmetros para o comando list. muito importante lembrar
que s sero passadas ao comando list os elementos do array que possurem os
ndices com valores inteiros e no negativos.

Booleans : Em PHP, no existe um tipo especfico para as variveis do tipo boolean,


ele trata este tipo com valores inteiros: 0 (zero) para false e valores diferentes deste
como true.

Transformaes de tipos
possvel fazer transformaes de tipos de variveis atravs das seguintes formas:

Coeres : quando ocorrem determinadas operaes matemticas entre dois valores


de tipos diferentes, como por exemplo a adio, o PHP converte um deles
automaticamente. Um exemplo disso seria a converso de uma string para um valor
numrico (inteiro ou ponto flutuante), que segue as seguintes regras:
analisado o nicio da string, se contiver um nmero, ele ser
analisado, caso contrrio, o valor ser 0 (zero);
O nmero pode conter o sinal no incio (+ ou -);

Diviso de Servios Comunidade Centro de Computao Unicamp

11

Programao para a Web utilizando PHP

Se a string contiver um ponto em sua parte numrica a ser analisada,


ele ser considerado, e o valor obtido ser um ponto flutuante;

Se a string contiver as letras ''e'' ou ''E'' em sua parte numrica a ser


analisada, o valor seguinte ser considerado como expoente da base
10, e o valor obtido ser um ponto flutuante.

Exemplo de sintaxe:

$curso
$curso
$curso
$curso
$curso
$curso

1
1
1
1
1
1

+
+
+
+
+
+

12.8; ($curso == 13.8)


15; ($curso == 16)
1.5e3; ($curso == 1501)
10curso; ($curso == 11)
10curso; ($curso == 11)
+A10testes; ($curso == 1)

Transformaes explcitas de tipos : desta forma precisaremos utilizar a sintaxe de


typecast do PHP, como os exemplos a seguir:

$curso
$curso
$curso
$curso

=
=
=
=
=
=

=
=
=
=

20; (integer(20))
(double)$curso; (double(20.0))
3.9; (double(3.9))
(int)$curso (o valor truncado e fica como integer(3))

Tipos suportados nas transformaes explcitas:

(int), (integer) = muda para inteiro;


(real), (double), (float) = muda para ponto flutuante;
(string) = muda para string
(array) = muda para array
(object) = muda para objeto

Diviso de Servios Comunidade Centro de Computao Unicamp

12

Programao para a Web utilizando PHP

Funo settype : trabalha igualmente as tranformaes explcitas, porm com


sintaxe diferente, como o exemplo a seguir:

$curso = 20; (integer)


settype($curso, double);
# o valor da varivel $curso foi transformada em ponto flutuante

Operadores

Aritmticos:

+
*
/
%

Adio
Subtrao
Multiplicao
Diviso
Mdulo

Strings:

Concatenao

Diviso de Servios Comunidade Centro de Computao Unicamp

13

Programao para a Web utilizando PHP

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

Atribuio simples
Atribuio com adio
Atribuio com subtrao
Atribuio com Multiplicao
Atribuio com diviso
Atribuio com mdulo
Atribuio com concatenao

Exemplo:
$curso = 7;
$curso += 2;

($curso fica com o valor 9)

Lgicos:
and
or
xor
!
&&
||

e lgico
ou lgico
ou exclusivo
No (inverso)
e lgico
ou lgico

==
!=
<
>
<=
>=

igual a
diferente de
menor que
maior que
menor ou igual a
maior ou igual a

Comparao:

Diviso de Servios Comunidade Centro de Computao Unicamp

14

Programao para a Web utilizando PHP

Incremento e decremento:

++
--

incremento
decremento

Estes podem receber o valor antes ou depois da varivel:

Antes: retorna o valor da varivel antes de increment-la ou


decrement-la:
Exemplo:

$a = 1;
$b = ++a; ($b recebe 2, valor de $a j incrementado)

Depois: retorna o valor da varivel j incrementada ou


decrementada:
Exemplo:

$a = 1;
$b = a++; ($b recebe 1

e $a passa a ter 2)

Diviso de Servios Comunidade Centro de Computao Unicamp

15

Programao para a Web utilizando PHP

Estruturas de controle

If

: O comando if testa a condio passada e executa o bloco de cdigo caso o

valor retornado da condio seja verdadeiro:

$a = 1;
if ($a == 1)
{
....
....
...
}

Caso a condio passada retorne um valor falso, e seja necessrio executar um bloco de
cdigo diferente, utiliza-se a instruo else:

$a = 1;
$b = 2;
if ($a > $b)
{
....
...
}
else
{
.....
....
}

Ainda existe a instruo elseif, para situaes onde precisa-se verificar mais que uma
condio:

Diviso de Servios Comunidade Centro de Computao Unicamp

16

Programao para a Web utilizando PHP

$a = 1;
$b = 2;
$c = 3;
if ($a > $b)
{
echo $a maior que $b ;
}
elseif ($a > $c)
{
echo $a maior que $c ;
}
else
{
echo $a menor que $b e $c ;
}

Switch :

Comando utilizado para fazer mltiplos testes de condio. A idia deste


comando igual ao do elseif , porm com algumas diferenas:

$a = 1;
switch ($a)
{
case 0:
echo $a igual a 0 ;
break;
case 1:
echo $a igual a 1 ;
break;
case 2:
echo $a igual a 2 ;
break;
default:
echo \$a igual a $a ;
}

Diviso de Servios Comunidade Centro de Computao Unicamp

17

Programao para a Web utilizando PHP

A idia do comando switch achar a condio verdadeira e executar qualquer bloco


de cdigo que esteja abaixo dela, inclusive os que no forem do seu trecho, por esse
motivo, utilizamos o comando break logo abaixo da ltima linha do bloco de cdigo,
como o exemplo anterior. O comando switch tambm aceita testes de condio em
qualquer tipo de varivel suportado pelo PHP:

$a = curso;
switch ($a)
{
case PHP:
echo $a igual a PHP ;
break;
case curso:
echo $a igual a Curso ;
break;
case CCUEC:
echo \$a igual a CCUEC ;
break;
}

While : Este comando utilizado para realizar laos condicionais. Ele executa o
bloco de cdigo enquanto a condio passada for verdadeira, e caso a condio
inicial que foi passada se torne falsa, o bloco no ser executado:

$a = 1;
while ($a <= 10)
{
echo Nmero.$a++.<br>;
}

Diviso de Servios Comunidade Centro de Computao Unicamp

18

Programao para a Web utilizando PHP

Do..while : Este comando tem a mesma idia que o comando while, porm,
seu teste de condio feito no final do bloco de cdigo:

$c = 0;
do
{
echo Nmero.++$c. <br>;
} while ($c < 10);

For : Como nos outros comando que realizam laos condicionais, o comando for
tambm precisa de uma condio para ser testada a cada lao realizado, porm, este
comando necessita de mais dois parmetros, que seriam a declarao da varivel
contadora e a instruo de incremento:

for ($a=0; $a<=10; $a++)


{
echo Nmero.$a.<br>;
}

Diviso de Servios Comunidade Centro de Computao Unicamp

19

Programao para a Web utilizando PHP

Quebra de fluxo

Break

: O comando break pode ser utilizado em comandos de laos

condicionais e no comando switch, e sua funo parar imediatamente a


execuo do lao condicional, prosseguindo normalmente com a execuo do script:

$a = 20;
while ($a > 0)
{
if ($a == 3)
{
echo Nmero invlido!;
break;
}
echo Nmero .$a.<br>;
$a--;
}

Continue : O comando continue tambm funciona dentro dos laos


condicionais, porm, no pra o fluxo do bloco de cdigo, e sim, volta para o incio
dele:

for ($a=0;$a<=10;$a++)
{
if ($a == 5)
{
echo "<p>Pulou o Numero ==> $a</p>";
continue;
}
echo "Numero ==> $a<br>";
}

Diviso de Servios Comunidade Centro de Computao Unicamp

20

Programao para a Web utilizando PHP

Funes
Funes so pequenas sees independentes de cdigo que podem ser chamadas a
qualquer momento e em qualquer ordem, que servem para desempenhar tarefas
especficas dentro dos scripts. O exemplo a seguir mostra a sua sintaxe bsica:

function soma ($a,$b)


{
$c = $a + $b;
return $c;
}
echo "A funcao soma() retornou ==> ".soma(5,10);

A instruo return opcional, j que no obrigatrio retornar algum valor em funes


no PHP, outra regra a de no permitir que sejam retornados mltiplos valores atravs
desta instruo. Para resolver essa necessidade, pode-se retornar listas e arrays, como
mostra o exemplo a seguir:

function soma ($a, $b)


{
$c = $a + $b;
$d = $c - 5;
return array($c,$b,$d)
}
list ($f,$g,$h) = soma(10,10);
echo $f.<br>;
echo $g.<br>;
echo $h.<br>;

Diviso de Servios Comunidade Centro de Computao Unicamp

21

Programao para a Web utilizando PHP

Passagem de parmetros por referncia : Normalmente, a passagem de


parmetros em PHP feita atravs dos valores das variveis, no permitindo assim, a
alterao do valor na varivel original, como mostra o exemplo a seguir:

function contador($a)
{
++$a;
}
$cont = 10;
contador($cont);
echo "A variavel <b>$cont</b> contem ==> ".$cont;

No exemplo acima, a varivel original permanecer com o mesmo valor porque no foi
definida a passagem de parmetros por referncia, o que alteraria tambm o valor da
varivel original. Uma das maneiras de se utilizar esse recurso colocar o caracter ''&''
antes do nome da varivel na declarao da funo, como mostra o exemplo a seguir:

function contador(&$a)
{
++$a;
}
$cont = 10;
contador($cont);
echo "A variavel <b>$cont</b> contem ==> ".$cont;

Poderamos tambm utilizar a passagem de parmetros por referncia apenas quando


fossemos chamar a funo, e no em sua declarao:

contador(&$cont);
echo $cont;

Diviso de Servios Comunidade Centro de Computao Unicamp

22

Programao para a Web utilizando PHP

Escopo das variveis


Discutimos anteriormente sobre variveis e os tipos suportados pelo PHP. Agora,
discutiremos sobre os escopos destas variveis, que podem ser dos seguintes tipos:

globais;
locais;
estticas;
constantes.

Globais: As variveis globais so por definio, as variveis que podem ser


acessadas dentro de todo o script. Porm, quando cria-se escopos locais como nas
funes, precisaremos utilizar um tipo de chamada especial, como no exemplo a
seguir:

$curso = 'PHP';
function mostra()
{
global $curso;
echo $curso;
}
mostra();

O mesmo recurso pode ser acessado atravs da array GLOBALS, que nos permite acessar
todas as variveis globais do script. O exemplo acima pode ser reescrito da seguinte
maneira:

$curso = 'PHP';
function mostra()
{
echo $GLOBALS[curso];
echo $curso;
}
mostra();

Diviso de Servios Comunidade Centro de Computao Unicamp

23

Programao para a Web utilizando PHP

Locais : As variveis locais so o tipo mais restrito dentro do PHP. Elas funcionam
apenas dentro deste escopo, como mostra o exemplo a seguir:

$curso = 'PHP';
function mostra()
{
$var_local = 'varivel local';
echo $var_local;
}
echo <b>$var_local</b>;

Estticas: As variveis estticas so variveis que possuem o mesmo tempo de vida


das variveis globais, com a diferena de funcionarem apenas em escopos locais e
serem inicializadas uma s vez. A seguir, um exemplo deste recurso:

function contador()
{
static $i = 0;
echo $i++.<br>;
}

for ($a=0; $a<=5; $a++)


{
contador();
}

Diviso de Servios Comunidade Centro de Computao Unicamp

24

Programao para a Web utilizando PHP

Projeto
Desenvolveremos um site dinmico utilizando a linguagem PHP e o servidor de banco de
dados PostgreSQL. O objetivo desse site ser a localizao de funcionrios na Unicamp.
Fazendo-se uma busca pelo nome do funcionrio, sero disponibilizadas informaes
(unidade, telefone, fax, e-mail e cargo) que permitam localiz-lo na universidade.
O site permitir incluso, consulta, alterao e excluso de dados. Todas as pginas e
programas ficaro armazenados no diretrio de publicao do servidor web Apache, que
no nosso caso, encontra-se em: /usr/local/apache/htdocs/cursophp.

1 - Base de dados e tabelas


Podemos pensar nas tabelas que sero necessrias para esse projeto. A base de dados
se chamar cursophp. Para facilitar, vamos utilizar uma nica tabela, chamada
funcionarios.

Dicas:
Tipos de campos:
varchar(N) : um campo caractere varivel de no mximo N
caracteres;
integer : um inteiro padro;
char(N) : um campo caractere com exatamente N
caracteres;
text : um campo com um comprimento mximo de 65535
caracteres;
date : uma data no formato AAAA-MM-DD.
Not null: significa que o campo no pode ser nulo.
Primary key: significa que campo chave.

Diviso de Servios Comunidade Centro de Computao Unicamp

25

Programao para a Web utilizando PHP

Para criar essa tabela, podemos utilizar a seguinte sintaxe:

create table funcionarios (


nome varchar(50) not null primary key,
unidade varchar(40) not null,
telefone varchar(10) not null,
email varchar(40),
cargo varchar(40) not null
);

Diviso de Servios Comunidade Centro de Computao Unicamp

26

Programao para a Web utilizando PHP

2 - Criao da home page do site


A pgina principal (homepage) do site ser bastante simples e trar um menu com as
opes de incluso, consulta, alterao e excluso. As opes tero links para seus
respectivos mdulos. Essa pgina inicial ter a extenso .html .
O cdigo ficar assim:
<html>
<head>
<title>index</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#CC0000"
alink="#663399">
<center><img SRC="topo.gif" height=44 width=640>
<p><b><a href="inclusao.html">Incluso de funcionrios</a></b>
<p><b><a href="consulta.html">Consulta de funcionrios</a></b>
<p><b><a href="alteracao.html">Alterao dos dados dos
funcionrios</a></b>
<p><b><a href="exclusao.html">Excluso de funcionrios</a></b></center>
</body>
</html>

Diviso de Servios Comunidade Centro de Computao Unicamp

27

Programao para a Web utilizando PHP

3 - Mdulo de Incluso
Vamos criar a pgina para o formulrio de incluso. Os recursos do Netscape Composer
so muito limitados para a confeco de formulrios, sendo assim digitaremos o cdigo
utilizando um editor de texto. Esse arquivo ter extenso .html .

3.1) Formulrio inclusao.html


<html>
<head>
<title>Inclusao.html</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#CC0000"
alink="#663399">
<table width="640" border="0" cellspacing="0" align="center">
<tr>
<td>
<p><img src="topo.gif" width="640" height="44"></p>
<p><b>Formulrio de incluso: <br>
</b></p>
<form method="post" action="inclusao.php">
<p>Nome completo:
<input type="text" name="nome" size="25" maxlength="50">
</p>
<p>Unidade: <input type="text" name="unidade" size="40"
maxlength="40"> </p>
<p>Telefone:
<input type="text" name="telefone" maxlength="10" size="10">
</p>
<p>E-mail:
<input type="text" name="email" size="25" maxlength="40">
</p>
<p>Cargo: <input type="text" name="cargo" size="40"
maxlength="40"> </p>
<p>
<input type="submit" name="Submit" value="Enviar">
<center> <b> <a href="index.html">Home</a> </b> </center>
</p>
</form>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

Diviso de Servios Comunidade Centro de Computao Unicamp

28

Programao para a Web utilizando PHP

Aps digitar o cdigo, salve-o e teste-o. Quando o formulrio for submetido, dar um erro,
alertando que o script inclusao.php (para o qual estamos encaminhando os dados)
no existe. Precisamos, ento, cri-lo. Notem que a prxima pgina no ter mais a
extenso .html e sim .php, pois o cdigo vai conter programao PHP.

Relembrando:
Quando o servidor recebe a requisio de uma pgina HTML,
ele apenas envia a pgina requisitada. Por outro lado, quando
a requisio de uma pgina com extenso PHP, o servidor
processa o cdigo antes de envi-la.
Pode-se combinar os cdigos HTML e PHP.

3.2) Script incluso.php


Este script tratar os dados recebidos atravs do formulrio, e caso no falte nenhum
campo obrigatrio, ir inclu-los no banco de dados.
Relembrando:
As tags que identificam o incio e o fim da programao PHP so:
<?php
cdigo php
?>
A sintaxe do if/else:
if (condio)
{
echo (mensagem1);
echo ($variavel1);
}
else
{
echo (mensagem2);
echo ($variavel2);
}

Variveis: as variveis devem ser precedidas pelo caractere $.

Diviso de Servios Comunidade Centro de Computao Unicamp

29

Programao para a Web utilizando PHP

Dicas:
No cdigo referente ao script incluso.php, utilizaremos
algumas funes do PHP:
trim: tira espaos em branco de uma varivel.

header: chama outro script, passando parmetros e no


retorna ao script chamador. Obs: Nenhum comando de
exibio (echo, include, tags html) pode ser usado antes
dessa rotina.
A expresso or die pode ser usada como uma alternativa
para o if/else.

<?php
// Tirar espao em branco das variveis recebidas atravs do formulrio
$nome = trim($_POST["nome"]);
$unidade = trim($_POST["unidade"]);
$telefone = trim($_POST["telefone"]);
$email = trim($_POST["email"]);
$cargo = trim($_POST["cargo"]);
// Consiste as variveis recebidas
if (empty($nome) || empty($unidade) || empty($telefone) || empty($cargo)) {
/*
Comentar blocos de cdigo
*/
// se os campos obrigatrios no esto preenchidos, recria o formulrio e
exibe mensagem de erro
echo ('
<html>
<head>
<title>Inclusao.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#CC0000"
alink="#663399">
');
echo ("<p><center><img src=\"topo.gif\" width=\"640\"
height=\"44\"></center></p>");
echo ("<font color=\"#FF0000\"><b>Campo(s) obrigatrio(s) no
preenchido(s)</b></font>");
echo ("
<table width=\"640\" border=\"0\" cellspacing=\"0\" align=\"center\">
<tr>
<td>
<p><b>Formulrio de incluso: <br></b></p>
<form method=\"post\" action=\"inclusao.php\">
<p>Nome completo:

Diviso de Servios Comunidade Centro de Computao Unicamp

30

Programao para a Web utilizando PHP

<input type=\"text\" name=\"nome\" value=\"$nome\" size=\"25\"


maxlength=\"50\">
</p>
<p>Unidade: <input type=\"text\" name=\"unidade\" value=\"$unidade\"
size=\"40\"
maxlength=\"40\"> </p>
<p>Telefone:
<input type=\"text\" name=\"telefone\" value=\"$telefone\"
maxlength=\"10\" size=\"10\">
</p>
<p>E-mail:
<input type=\"text\" name=\"email\" value=\"$email\" size=\"25\"
maxlength=\"40\">
</p>
<p>Cargo:
<input type=\"text\" name=\"cargo\" value=\"$cargo\" size=\"40\"
maxlength=\"40\">
</p>
<p>
<input type=\"submit\" name=\"Submit\" value=\"Enviar\">
<center> <b> <a href=\"index.html\">Home</a> </b> </center>
</p>
</form>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
");
}
else
{
// Cria uma conexo com o servidor PostgreSQL passando host, db, username e
senha
pg_connect("host=localhost dbname=cursophp user=user_curso password=cursophp")
or die("Erro ao conectar ao banco de dados");
// Declarao SQL
$declar = "INSERT into funcionarios values ('$nome', '$unidade', '$telefone',
'$email', '$cargo')";
// Roda a query e trata o resultado
$tipo_msg = 'I';
if (pg_query($declar))
{
$ok = 1;
header("Location: exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}
else
{
$ok = 2;
header("Location: exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}
}
?>
</body>
</html>

Diviso de Servios Comunidade Centro de Computao Unicamp

31

Programao para a Web utilizando PHP

3.3) Criando o script que exibe mensagens: exibe_mensagem.php


No devemos exibir as mensagens finais em um script que acessa banco de
dados, pois, se o usurio clicar no boto atualizar do navegador, o script ser
processado novamente. Por isso, criaremos um script s para exibir as
mensagens finais. Esse script foi chamado em inclusao.php atravs da
funo header.
<html>
<head>
<title>Exibe Mensagem</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#CC0000"
alink="#663399">
<?php
$tipo_msg = $_GET["tipo_msg"];
$ok = trim($_GET["ok"]);
echo ("<p><center><img src=\"topo.gif\" width=\"640\"
height=\"44\"></center></p>");
if ($tipo_msg == 'I')
{
//se incluso OK
if ($ok == 1)
{
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Incluso Efetuada
</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"inclusao.html\">Voltar</a>
</b></center>");
}
// se deu erro na incluso
if ($ok == 2)
{
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Erro - Incluso no Efetuada
</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"inclusao.html\">Voltar</a>
</b></center>");
}
}
elseif ($tipo_msg == 'E')
{
//se excluso OK
if ($ok == 1)
{
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Excluso Efetuada

Diviso de Servios Comunidade Centro de Computao Unicamp

32

Programao para a Web utilizando PHP

</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"exclusao.html\">Voltar</a>
</b></center>");
}
// se deu erro na excluso
if ($ok == 2)
{
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Erro - Excluso no Efetuada
</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"exclusao.html\">Voltar</a>
</b></center>");
}
// se funcionrio no cadastrado
if ($ok == 3)
{
echo ("<BR><BR>");
echo ("<center><b> Funcionrio no cadastrado </b></center>");
echo ("<BR><BR>");
echo ("<center><b> <a href=\"exclusao.html\">Voltar</a>
</b></center>");
}
}
else
{
//se alterao OK
if ($ok == 1)
{
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Alterao Efetuada
</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"alteracao.html\">Voltar</a>
</b></center>");
}
// se deu erro na alterao
if ($ok == 2)
{
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Erro - Alterao no Efetuada
</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"alteracao.html\">Voltar</a>
</b></center>");
}
}
?>
</body>
</html>

Diviso de Servios Comunidade Centro de Computao Unicamp

33

Programao para a Web utilizando PHP

3.4) Testando o mdulo de incluso


Abra o navegador (Netscape) e digite o endereo do site:

http://localhost/cursophp/index.html
No menu da pgina principal, clique na opo incluso.
Deixe os campos do formulrio em branco. Clique em enviar. Dever mostrar uma
mensagem de erro.
O nico campo que no obrigatrio o e-mail.
Preencha o formulrio com os dados do funcionrio: nome completo, unidade, telefone,
e-mail e cargo. Clique em enviar. Dever mostrar a mensagem Incluso Efetuada.
Volte para a pgina do formulrio e entre com outros dados, s que desta vez entre com
um nome que j existe no banco de dados. Clique em enviar. Dever mostrar a
mensagem Incluso no efetuada, pois o campo nome chave e no aceita valores
duplicados.
Insira pelo menos 5 funcionrios.

4 - Mdulo de Consulta
Vamos criar a pgina com o formulrio de consulta.

4.1) Formulrio consulta.html


<html>
<head>
<title>Consulta.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<table width="640" border="0" cellspacing="0" align="center">
<tr valign="top">
<td>
<p><img src="topo.gif" width="640" height="44"></p>
<!mensagem>
<p><b>Formulrio de consulta<br>
</b></p>
<form method="post" action="consulta.php">
<p>Nome completo:
<input type="text" name="nome" size="25" maxlength="50">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>
<center> <b> <a href="index.html">Home</a> </b> </center>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>

Diviso de Servios Comunidade Centro de Computao Unicamp

34

Programao para a Web utilizando PHP

</table>
</body>
</html>

Aps digitar o cdigo, salve-o e teste-o. Quando o formulrio for submetido, dar um erro,
alertando que o script consulta.php (para o qual estamos encaminhando os dados)
no existe. Precisamos, ento, cri-lo. Notem que essa pgina no ser mais HTML e sim
PHP, pois conter blocos de cdigo em PHP.

4.2) Script consulta.php


Este script receber o dado do formulrio, realizar uma pesquisa no banco de dados, e
exibir as informaes caso o funcionrio esteja cadastrado.

Dicas:
No cdigo referente ao programa consulta.php
utilizaremos mais algumas funes do PHP:
file: l um arquivo, retornando o seu contedo como um
array; cada linha do arquivo ser representada por um
elemento do array.
implode: armazena todo o contedo de um array como uma
string, concatena os contedos de cada elemento do array em
uma string, utilizando ou no um delimitador entre eles.
str_replace: vai ler uma string e substituir um determinado
valor por outro. No nosso caso, essa funo substituir a
expresso <!mensagem>, contida no cdigo do
consulta.html, por uma mensagem de erro. Portanto,
no se esquea de colocar no html a expresso a ser
substituda (como comentrio).
pg_num_rows: obtem o nmero de registros que retornou do
select.
pg_fetch_row: obtem os campos do registro que retornou
do select.

Diviso de Servios Comunidade Centro de Computao Unicamp

35

Programao para a Web utilizando PHP

<html>
<head>
<title>Consulta.php Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#CC0000"
alink="#663399">
<?php
// Tirar espao em branco da varivel recebida atravs do formulrio
$nome = trim($_POST["nome"]);
// Consiste Nome
if (empty($nome))
{
$html = file("consulta.html");
$html = implode(" ",$html);
$erro = "<center><font color=\"#FF0000\"> Preencha o campo <b>Nome</b>
</font></center>";
$html = str_replace("<!mensagem>",$erro,$html);
echo ($html);
}
else
{
echo ("<p><center><img src=\"topo.gif\" width=\"640\"
height=\"44\"></center></p>");
// Cria uma conexo com o servidor PostgreSQL
// Parmetros: host, username, senha
pg_connect("host=localhost dbname=cursophp user=user_curso
password=cursophp") or die("Erro ao conectar ao banco de dados");
// Declarao do SQL
$declar = "SELECT nome, unidade, telefone, email, cargo from
funcionarios where nome = '$nome'";
// Roda a query e verifica se encontrou registro
$query = pg_query($declar) or die ("Erro no acesso ao banco");
$achou = pg_num_rows($query);
// Se encontrou, guarda as variveis
if ($achou > 0)
{
$row = pg_fetch_row ($query);
$nome = $row[0];
$unidade = $row[1];
$telefone = $row[2];
$email = $row[3];
$cargo = $row[4];
echo ("<BR>");
echo ("<table width=\"640\" border=\"0\" cellspacing=\"0\"
align=\"center\"> <tr> <td>");
echo ("<b> Resultado da Consulta </b>");
echo ("<BR><BR>");

Diviso de Servios Comunidade Centro de Computao Unicamp

36

Programao para a Web utilizando PHP

echo ("<b> Nome: </b> $nome <BR>");


echo ("<b> Unidade: </b> $unidade <BR>");
echo ("<b> Telefone: </b> $telefone <BR>");
echo ("<b> E-mail: </b> $email <BR>");
echo ("<b> Cargo: </b> $cargo <BR>");
echo ("</td> </tr> </table>");
echo ("<center> <b> <a href=\"consulta.html\">Voltar</a> </b>
</center>");
}
else
{
echo ("<BR>");
echo ("<center> <b> Funcionrio no cadastrado </b> </center>");
echo ("<BR>");
echo ("<center> <b> <a href=\"consulta.html\">Voltar</a> </b>
</center>");
}
}
?>
</body>
</html>

4.3) Testando o mdulo de consulta


Abra o navegador (Netscape) e digite o endereo do site:

http://localhost/cursophp/index.html
No menu da pgina principal, clique na opo consulta.
Deixe o campo nome do funcionrio em branco e clique em enviar. Dever mostrar uma
mensagem de erro.
Preencha o formulrio com um nome de funcionrio inexistente e clique em enviar.
Dever mostrar a mensagem Funcionrio no cadastrado.
Preencha o formulrio com um nome de funcionrio vlido e clique em enviar. Dever
mostrar os dados do funcionrio.

Diviso de Servios Comunidade Centro de Computao Unicamp

37

Programao para a Web utilizando PHP

5 - Mdulo de Excluso
Vamos criar a pgina com o formulrio de excluso.

5.1) Formulrio exclusao.html


<html>
<head>
<title>Exclusao.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<table width="640" border="0" cellspacing="0" align="center">
<tr valign="top">
<td>
<p><img src="topo.gif" width="640" height="44"></p>
<!mensagem>
<p><b>Formulrio de excluso: <br>
</b></p>
<form method="post" action="exclusao.php">
<p>Nome Completo:
<input type="text" name="nome" size="25" maxlength="50">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>
<center> <b> <a href="index.html">Home</a> </b> </center>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

Aps digitar o cdigo, salve-o e teste-o. Quando o formulrio for submetido, dar um erro,
alertando que o script exclusao.php (para o qual estamos encaminhando os dados)
no existe. Precisamos, ento, cri-lo. Notem que esta pgina no ser mais HTML e sim
PHP, pois conter blocos de cdigo em PHP.

5.2) Script exclusao.php


Este script receber o dado do formulrio, validar o nome digitado atravs de consulta ao
banco de dados, e excluir o registro caso o funcionrio estiver cadastrado.

Diviso de Servios Comunidade Centro de Computao Unicamp

38

Programao para a Web utilizando PHP

<?php
// Tirar espao em branco das variveis recebidas do formulrio
$nome = trim($_POST["nome"]);
// Consiste Nome
if (empty($nome))
{
$html = file("exclusao.html");
$html = implode(" ",$html);
$erro = "<center><font color=\"#FF0000\"> Preencha o campo
<b>Nome</b></font></center>";
$html = str_replace("<!mensagem>",$erro,$html);
echo ($html);
}
else
{
// Cria uma conexo com o servidor PostgreSQL
pg_connect("host=localhost dbname=cursophp user=user_curso
password=cursophp") or die("Erro ao conectar ao banco de dados");
// Declarao do SQL
$declar = "SELECT nome from funcionarios where nome = '$nome'";
// Roda a query, verifica se funcionrio cadastrado
$query = pg_query($declar) or die ("Erro no acesso ao banco");
$achou = pg_num_rows($query);
// Se encontrou exclui, seno mostra mensagem
$tipo_msg = 'E';
if ($achou > 0)
{
// Exclui registro na tabela funcionarios
$declar2 = "DELETE from funcionarios where nome = '$nome'";
if (pg_query($declar2))
{
$ok = 1;
header("Location:
exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}
else
{
$ok = 2;
header("Location:
exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}
}
else
{
$ok = 3;
header("Location: exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}
}
?>
</body></html>

Diviso de Servios Comunidade Centro de Computao Unicamp

39

Programao para a Web utilizando PHP

5.3) Testando o mdulo de excluso


Abra o navegador (Netscape) e digite o endereo do site:

http://localhost/cursophp/index.html
No menu da pgina principal, clique em excluso.
Deixe o campo nome do funcionrio em branco e clique em enviar. Dever mostrar uma
mensagem de erro.
Preencha o formulrio com o nome completo do funcionrio e clique em enviar. Dever
mostrar a mensagem Excluso efetuada.
Preencha o formulrio com o nome do funcionrio que voc acabou de excluir e clique em
enviar. Dever mostrar a mensagem Funcionrio no cadastrado.

6 - Mdulo de Alterao
Vamos criar a pgina com o formulrio de alterao.

6.1) Formulrio alteracao.html


<html>
<head>
<title>Alteracao.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<table width="640" border="0" cellspacing="0" align="center">
<tr valign="top">
<td>
<p><img src="topo.gif" width="640" height="44"></p>
<!mensagem>
<p><b>Formulrio de alterao </b></p>
<form method="post" action="alteracao.php">
<p>Nome completo:
<input type="text" name="nome" size="25" maxlength="50">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>
<center> <b> <a href="index.html">Home</a> </b> </center>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

Aps digitar o cdigo, salve-o e teste-o. Quando o formulrio for submetido, dar um erro,
alertando que o script alteracao.php (para o qual estamos encaminhando os

Diviso de Servios Comunidade Centro de Computao Unicamp

40

Programao para a Web utilizando PHP

dados) no existe. Precisamos, ento, cri-lo. Notem que esta pgina no ser mais
HTML e sim PHP, pois conter blocos de cdigo em PHP.

6.2) Script alteracao.php


Este script receber o dado do formulrio, recuperar as informaes do banco de dados
e ir mostr-las num formulrio para que elas sejam alteradas. Para montar o formulrio,
criaremos uma funo em PHP.

<?php
include ("funcoes.php");
// Tirar espao em branco das variveis recebidas do formulrio
$nome = trim($_POST["nome"]);
// Consiste Nome
if (empty($nome))
{
$html = file("alteracao.html");
$html = implode(" ",$html);
$erro = "<center><font color=\"#FF0000\"> Preencha o campo
<b>Nome</b></font></center>";
$html = str_replace("<!mensagem>",$erro,$html);
echo ($html);
}
else
{
// Cria uma conexo com o servidor PostgreSQL
// Parmetros: host, db, username, senha
pg_connect("host=localhost dbname=cursophp user=user_curso
password=cursophp") or die("Erro ao conectar ao banco de dados");
// Declarao do SQL
$declar = "SELECT nome, unidade, telefone, email, cargo from
funcionarios where nome = '$nome'";
// Roda a query e verifica se encontrou registro
$query = pg_query ($declar) or die ("Erro no acesso ao banco");
$achou = pg_num_rows($query);
// Se encontrou, guarda as variveis
if ($achou > 0)
{
$row = pg_fetch_row ($query);
$nome = $row[0];
$unidade = $row[1];
$telefone = $row[2];
$email = $row[3];
$cargo = $row[4];
$script_chamador = 'A';

Diviso de Servios Comunidade Centro de Computao Unicamp

41

Programao para a Web utilizando PHP

monta_pagina($nome,$unidade,$telefone,$email,$cargo,$script_chamador);
}
else
{
echo ('
<html>
<head>
<title>Alteracao.php</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399"
vlink="#CC0000" alink="#663399">
');
echo ("<p><center><img src=\"topo.gif\" width=\"640\"
height=\"44\"></center></p>");
echo ("<BR><BR>");
echo ("<center> <b> Funcionrio no cadastrado </b> </center>");
echo ("<BR>");
echo ("<center> <b> <a href=\"alteracao.html\">Voltar</a> </b>
</center>");
}
}
?>
</body>
</html>

Notem que, no cdigo que acabamos de digitar, estamos chamando a funo


monta_pagina, passando como parmetros as variveis nome, unidade,
telefone, email e cargo.
As funes so teis porque podem ser reutilizadas em vrios programas, alm disso, o
tamanho do cdigo do programa chamador diminui consideravelmente.
Podemos criar um nico script (exemplo: funcoes.php ) que conter todas as
funes. Um detalhe importante que no podemos esquecer que precisamos incluir
esse programa de funes em nosso programa chamador. No cdigo visto anteriormente
temos o comando include ("funcoes.php") logo no incio do cdigo PHP.

6.3) Script funcoes.php


Este script pode armazenar todas as funes que sero utilizadas no site. Neste curso
usaremos apenas a funo monta_pagina. Essa funo serve para montar o formulrio

Diviso de Servios Comunidade Centro de Computao Unicamp

42

Programao para a Web utilizando PHP

j preenchido, com as informaes que foram passadas como parmetros no programa


anterior.
Observao: essa funo tambm chamada pelo script alteracao2.php, e com
algumas alteraes, poderia ser usada para recriar o formulrio do mdulo de incluso.

<?php
function
monta_pagina($nome,$unidade,$telefone,$email,$cargo,$script_chamador)
{
echo ('
<html>
<head>
<title>Inclusao.php</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#CC0000"
alink="#663399">
');
echo ("<p><center><img src=\"topo.gif\" width=\"640\"
height=\"44\"></center></p>");
if ($script_chamador == 'A2')
{
echo ("<font color=\"#FF0000\"><b>Campo(s) obrigatrio(s) no
preenchido(s)</b></font>");
}
echo "
<table width=\"640\" border=\"0\" cellspacing=\"0\"
align=\"center\">
<tr>
<td>
<p><b>Formulrio de alterao: <br></b></p>
<form method=\"post\" action=\"alteracao2.php\">
<p>Nome: $nome </p>
<p>Unidade: <input type=\"text\" name=\"unidade\"
value=\"$unidade\" size=\"40\" maxlength=\"40\"> </p>
<p>Telefone: <input type=\"text\" name=\"telefone\"
value=\"$telefone\" maxlength=\"10\" size=\"10\"> </p>
<p>E-mail: <input type=\"text\" name=\"email\"
value=\"$email\" size=\"25\" maxlength=\"25\"> </p>
<p>Cargo: <input type=\"text\" name=\"cargo\"
value=\"$cargo\" size=\"40\" maxlength=\"40\"> </p>
<p> <input type=\"submit\" name=\"Submit\"
value=\"Enviar\"><p>
<p> <input type=\"hidden\" name=\"nome\"
value=\"$nome\"></p>
</form>
</td>
</tr>
</table>
<center> <b> <a href=\"alteracao.html\">Voltar</a> </b> </center>

Diviso de Servios Comunidade Centro de Computao Unicamp

43

Programao para a Web utilizando PHP

";
}
?>

Notem que o formulrio criado pela funo monta_pagina chama o programa


alteracao2.php. Isso porque, para completarmos o mdulo de alterao
precisamos de mais um script que pegue as informaes que foram alteradas e as inclua
no banco de dados.
Observao: como o campo nome no passado para o script alteracao2.php ,
por no se tratar de uma varivel do formulrio, temos que pass-lo como um campo
escondido <input type="hidden">.

6.4) Script alteracao2.php


Este script receber as informaes alteradas, ir consist-las e gravar no banco de
dados.
<?php
// Tirar espao em branco das variveis recebidas do formulrio
$nome = trim($_POST["nome"]);
$unidade = trim($_POST["unidade"]);
$telefone = trim($_POST["telefone"]);
$email = trim($_POST["email"]);
$cargo = trim($_POST["cargo"]);
if (empty($nome) || empty($unidade) || empty($telefone) || empty($cargo))
{
include ("funcoes.php");
$script_chamador = 'A2';
monta_pagina($nome, $unidade, $telefone, $email, $cargo,
$script_chamador);
}
else
{
// Cria uma conexo com o servidor PostgreSQL passando host, db,
username e senha
pg_connect("host=localhost dbname=cursophp user=user_curso
password=cursophp") or die("Erro ao conectar ao banco de dados");
$declar = "UPDATE funcionarios SET unidade='$unidade',
telefone='$telefone', email='$email', cargo='$cargo' WHERE nome='$nome'";
// Roda a query e trata o resultado
$tipo_msg = 'A';
if (pg_query($declar))
{
$ok = 1;
header("Location: exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");

Diviso de Servios Comunidade Centro de Computao Unicamp

44

Programao para a Web utilizando PHP

}
else
{
$ok = 2;
header("Location: exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}
}
?>
</body>
</html>

6.5) Testando o mdulo de alterao


Abra o navegador (Netscape) e digite o endereo do site:

http://localhost/cursophp/index.html
No menu da pgina principal, clique em alterao.
Deixe o campo nome do funcionrio em branco e clique em enviar. Dever mostrar uma
mensagem de erro.
Preencha o formulrio com um nome de funcionrio que no existe e clique em enviar.
Dever mostrar a mensagem Funcionrio no cadastrado.
Preencha o formulrio com um nome de funcionrio vlido e clique em enviar. Ser
mostrado um formulrio com os dados desse funcionrio. Altere alguns campos e clique
em enviar. Dever mostrar a mensagem Alterao efetuada.
Entre no mdulo de consulta e confira se os dados foram realmente alterados.

Diviso de Servios Comunidade Centro de Computao Unicamp

45

Programao para a Web utilizando PHP

7 Mdulos Complementares
7.1) Como obter data e hora do sistema
No exemplo a seguir obtemos data e hora usando a funo date, jogamos o contedo
em variveis e mostramos essas variveis na tela.
Parmetros utilizados na funo date:

j: dia
m: ms
Y: ano
H: hora
i: minutos
s: segundos
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<?php
$data = date("j/m/Y");
$hora = date("H:i:s");
echo ("Data: $data");
echo ("<br><br>");
echo ("Hora: $hora");
?>
</body>
</html>

Observao: se fssemos gravar a data num banco de dados (aaaa/mm/dd), ao invs


de exibi-la, a sintaxe seria a seguinte:

$data = date("Y/m/j");

Diviso de Servios Comunidade Centro de Computao Unicamp

46

Programao para a Web utilizando PHP

7.2) Como listar vrias linhas de uma tabela, usando o comando while.
No exemplo a seguir listaremos todas as linhas da tabela funcionarios, permitindo
que se altere os dados de um funcionrio.

<html>
<head>
<title>Consulta.php Document</title>
</head>
<body bgcolor="#FFFFFF">
<?php
pg_connect("host=localhost dbname=cursophp user=user_curso
password=cursophp") or die("Erro ao conectar ao banco de dados");
$declar = "SELECT nome, unidade, telefone, email, cargo from
funcionarios";
$query = pg_query ('unicamp', $declar, $conec) or die ("Erro no acesso ao
banco");
$achou = pg_num_rows($query);
echo ("<BR>");
echo ("<table border=\"1\" width=\"640\" border=\"0\" cellspacing=\"0\"
align=\"center\">
<tr>
<td><b>Nome</b></td>
<td><b>Unidade</b></td>
<td><b>Telefone</b></td>
<td><b>E-mail</b></td>
<td><b>Cargo</b></td>
<td><b>Ao</b></td>
</tr>");
while($linhas = pg_fetch_row ($query))
{
$nome
= $linhas[0];
$unidade = $linhas[1];
$telefone = $linhas[2];
$email
= $linhas[3];
$cargo
= $linhas[4];
echo
echo
echo
echo
echo
echo
echo

("<tr>\n");
("
<td>$nome</td>");
("
<td>$unidade</td>");
("
<td>$telefone</td>");
("
<td>$email</td>");
("
<td>$cargo</td>");
("
<td>
<form method=\"post\" action=\"alteracao.php\">
<input type=\"hidden\" name=\"nome\" value=\"$nome\">
<input type=\"submit\" name=\"submit\"

Diviso de Servios Comunidade Centro de Computao Unicamp

47

Programao para a Web utilizando PHP

value=\"Alterar\">
</form>
</td>");
echo ("</tr>\n");
}
echo ("</table>\n");
?>
</body></html>

Diviso de Servios Comunidade Centro de Computao Unicamp

48

Programao para a Web utilizando PHP

Referncia Bibliogrfica

Beginning PHP4 - Programando


Autores: Wankyu Choi, Allan Kent, Chris Lea, ganesh Prasad, Chris Ullman,
Jon Blank e Sea Cazzell
Editora: Makron Books

Curso de Aplicacoes Web em PHP


Autor: Mauricio Vivas ( mauricio@cipsga.org.br )

Colaboradores: Carlos Froldi e Marcelo G. Malheiros

Onde obter ajuda


Para ajud-lo a solucionar dvidas de informtica, utilize o sistema Rau-Tu de perguntas e
respostas, que foi desenvolvido pelo Centro de Computao da Unicamp em conjunto
com o Instituto Vale do Futuro. Tem por objetivo possibilitar que um time de colaboradores
possa responder a perguntas colocadas por qualquer pessoa no site, cobrindo diversas
reas de conhecimento.
Acesse: www.rau-tu.unicamp.br

Diviso de Servios Comunidade Centro de Computao Unicamp

49