Você está na página 1de 53

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 ........................................................................................................... 1
Comunicao Cliente x Servidor web ................................................................ 2
Ambiente CGI .................................................................................................... 5
Configurao ...................................................................................................... 6
Sintaxe bsica do PHP ......................................................................................
Variveis .................................................................................................. 8
Operadores ............................................................................................. 13
Estruturas de controle ............................................................................. 16
Projeto
Criao da base de dados e tabelas ....................................................... 25
Criao da Home page do site ................................................................ 26
Mdulo de Incluso ................................................................................. 28
Mdulo de Consulta ................................................................................ 33
Mdulo de Excluso ................................................................................ 36
Mdulo de Alterao ............................................................................... 39
Mdulos Complementares
Usando If, elseif e else ... 45
Como obter data e hora do sistema ....................................................... 46
Listar vrias ocorrncias de uma tabela ................................................. 47
Referncia bibliogrfica ..................................................................................... 49
Programao para a Web utilizando PHP

ltima atualizao em 12/05/2003

Diviso de Servios Comunidade Centro de Computao Unicamp 4


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 com
o PHP-GTK.

Histria

O PHP foi criado por volta de 1994 por Rasmus Lerdorf, que inicialmente o utilizava 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 maro de 2002, o
PHP estava sendo utilizado em 9.000.000 de domnios.

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, e suporte nativo 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 1


Programao para a Web utilizando PHP

Comunicao cliente X servidor web

Quando digitado um endereo no navegador para acessar uma pgina na internet, o


que acontece 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 as 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 2


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 3


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 4


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.

Ambiente CGI

Muitas pessoas tm uma viso distorcida sobre o Common Gateway Interface, pensam
que 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 5


Programao para a Web utilizando PHP

Configurao

Usaremos como sistema operacional a distribuio do GNU/Linux Conectiva 7.0, e os


pacotes necessrios para o andamento do curso j se encontram instalados. Os pacotes
necesrios so:

apache-1.3.22
php4-4.1.1
mod_php4-4.1.1
php4-mysql-4.1.1
MySQL-3.23.36

Dividiremos em duas partes a configurao do PHP, a primeira referente a ligao entre o


servidor web e a linguagem, e a segunda entre a linguagem e o banco de dados.

Servidor web e a linguagem PHP (Apache+mod_php4+PHP4) : Para que o


servidor web Apache possa reconhecer as requisies para a execuo de scripts
PHP, preciso que o mdulo mod_php4-4.1.1 esteja instalado e configurado no
Apache.

Para efetuar esta configurao necessrio apenas descomentar algumas linhas no


arquivo de configurao do servidor web Apache. Este arquivo se chama httpd.conf e
se encontra em /etc/httpd/conf . No editor de texto, faa uma busca pelas linhas
listadas abaixo e retire o caracter # no incio de cada linha encontrada:

LoadModule php4_module modules/libphp4.so

AddModule mod_php4.c

AddType application/x-httpd-php .php


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

DirectoryIndex index.php index.html index.wml

Depois de finalizada a operao anterior necessrio reiniciar o servidor web Apache


com os seguintes comandos:

$ cds
$ ./httpd restart

Diviso de Servios Comunidade Centro de Computao Unicamp 6


Programao para a Web utilizando PHP

Banco de dados e a linguagem PHP (PHP4+php4-mysql+MySQL) : Como na


configurao anterior, o PHP necessita de um mdulo para conectar e executar
instrues SQL no banco de dados MySQL. Para isso necessrio estar instalado o
mdulo php4-mysql-4.1.1 e o banco de dados MySQL MySQL-3.23.36:

Para efetuar a configurao necessrio tirar o comentrio no arquivo de configurao


php.ini , que se encontra em /etc/php4/apache , a seguinte linha:

extension=mysql.so

Teste de funcionamento

Depois de configurados os aplicativos necessrios para a execuo dos scripts PHP,


precisaremos fazer um teste de funcionamento. No editor de textos, digite o cdigo a
seguir e salve como teste.php em /home/httpd/html :

<?php

phpinfo();

?>

Diviso de Servios Comunidade Centro de Computao Unicamp 7


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:

1 2 3 4
<?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 8


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 = 1000;
$curso = -1000;
$curso = 0234; (inteiro base octal)
$curso = 0x34; (inteiro na base hexadecimal)

Ponto flutuante

Sintaxe:

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

Diviso de Servios Comunidade Centro de Computao Unicamp 9


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 nova linha;
\r retorno de carro (semelhante a \n)
\t 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 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 = 1 + 12.8; ($curso == 13.8)


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

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


typecast do PHP, como os exemplos a seguir:

$curso = 20; (integer(20))


$curso = (double)$curso; (double(20.0))
$curso = 3.9; (double(3.9))
$curso = (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 e lgico
or ou lgico
xor ou exclusivo
! No (inverso)
&& e lgico
|| ou lgico

Comparao:

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

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 = 2;

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

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

Diviso de Servios Comunidade Centro de Computao Unicamp 17


Programao para a Web utilizando PHP

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 o fluxo do bloco de cdigo:

$a = 20;

while ($a < 0)


{
if ($a == 5)
{
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)
{
continue;
}
else
{
echo Nmero .$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;
}

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:

$cont = 10;

function contador ($a)


{
$a++;
}

contador($cont);
echo $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:

$cont = 10;

function contador(&$a)
{
$a++;
}

contador($cont);
echo $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 MySQL. 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 diretrio de publicao/cursophp.

1 - Criao da base de dados e tabelas

Utilizando o servidor de banco de dados MySQL, o primeiro passo ser definir a base de
dados e as tabelas em que guardaremos as informaes.
Podemos criar nossa estrutura de dados diretamente no MySQL, da seguinte forma:

1. Abra uma janela de terminal


2. Digite o comando mysql u root p (ser solicitada a senha do administrador)
3. Crie uma base de dados no MySQL, que conter as tabelas a serem utilizadas no
projeto.
O comando create database unicamp;
Em que unicamp o nome da base de dados.
4. Depois de criada, acesse a base de dados com o seguinte comando:
use unicamp;

Agora j podemos pensar nas tabelas que sero necessrias para esse projeto. 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, utilizaremos 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
);

Dicas:

Para adicionar ou excluir campos da tabela, depois que ela foi


criada:

Supondo que quisssemos excluir o campo cargo da tabela


funcionarios:
alter table funcionarios drop column cargo;

Supondo que quisssemos adicionar novamente o campo


cargo na tabela funcionarios:
alter table funcionarios add column cargo varchar(40) not
null;

Para visualizar as bases de dados existentes:


show databases;

Para visualizar as tabelas pertencentes a uma base de dados:


use base de dados;
show tables;

Para visualizar os campos de uma tabela:


desc tabela;

Para visualizar todos os registros de uma tabela:


select * from tabela;

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 e ser criada utilizando-se
um editor de pginas (Netscape Composer, etc).

Diviso de Servios Comunidade Centro de Computao Unicamp 26


Programao para a Web utilizando PHP

Criar uma nova pgina, em branco.


Definir as propriedades da pgina
Centralizar o cursor
Inserir a imagem topo.gif (que est em
/cursophp)
Digite os tens do menu (em negrito):
Incluso de funcionrios, Consulta de
funcionrios, Alterao dos dados de
funcionrios e Excluso de funcionrios.
Pule uma linha entre um item e outro.
Transforme os tens do menu em links e
direcione para seus respectivos endereos:
inclusao.html
consulta.html
alteracao.html
exclusao.html
Salve a pgina como index.html e teste-a
digitando o endereo
http://localhost/cursophp/index.html

O cdigo gerado ficar assim:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1">
<meta name="Author" content="Alexandre Arroyo de Lima">
<meta name="GENERATOR" content="Mozilla/4.73 [en] (Win95; I)
[Netscape]">
<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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</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>

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.

Diviso de Servios Comunidade Centro de Computao Unicamp 28


Programao para a Web utilizando 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

O script inclusao.php vai tratar os dados recebidos atravs do formulrio, incluindo-os


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

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.

Diviso de Servios Comunidade Centro de Computao Unicamp 29


Programao para a Web utilizando PHP

A expresso or die pode ser usada como uma alternativa


para o if/else.

O script inclusao.php vai tratar os dados recebidos atravs do formulrio, incluindo-os


no banco de dados.

<?php

// Recebe variveis globais do formulrio


global $nome;
global $unidade;
global $telefone;
global $email;
global $cargo;

// Tirar espao em branco das variveis recebidas atravs do formulrio


$nome = trim($nome);
$unidade = trim($unidade);
$telefone = trim($telefone);
$email = trim($email);
$cargo = trim($cargo);

// Consiste as variveis recebidas


if (empty($nome) || empty($unidade) || empty($telefone) || empty($cargo)) {

/*
Comentar blocos de cdigo
*/

// se campos obrigatrios no 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:
<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:

Diviso de Servios Comunidade Centro de Computao Unicamp 30


Programao para a Web utilizando PHP

<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 {

// Inclui os dados na tabela funcionarios

// Cria uma conexo com o servidor MySQL passando host, username e senha
$conec = mysql_connect ("localhost","usuario","senha") or die ("Falha na
conexo com o 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 (mysql_db_query ("unicamp", $declar, $conec)) {
$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");
// header("Location:
exibe_mensagem.php?variavel1=$variavel1&variavel2=$variavel2");
}

// Fecha a conexo com o servidor MySQL (Opcional)


mysql_close ($conec);
}
?>
</body>
</html>

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

Diviso de Servios Comunidade Centro de Computao Unicamp 31


Programao para a Web utilizando PHP

processado novamente. Por isso, criaremos um script s para exibir as


mensagens finais. Esse script foi chamado em incluso.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

global $ok;
$ok = trim($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>");
}
}

?>

</body>
</html>

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

Diviso de Servios Comunidade Centro de Computao Unicamp 32


Programao para a Web utilizando PHP

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

Diviso de Servios Comunidade Centro de Computao Unicamp 33


Programao para a Web utilizando PHP

existe. Precisamos, ento, cri-lo. Notem que essa pgina no ser mais html e sim php,
pois o cdigo vai conter programao PHP.

4.2) Script consulta.php

O script consulta.php vai receber o dado do formulrio, pesquisar no banco de dados e


mostrar as informaes referentes ao dado.

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).
mysql_num_rows: obtem o nmero de registros que retornou
do select.
mysql_fetch_row: obtem os campos do registro que retornou
do select.

<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

// Recebe varivel global do formulrio


global $nome;

// Tirar espao em branco da varivel recebida atravs do formulrio


$nome = trim($nome);

// Consiste Nome
if (empty($nome)) {

Diviso de Servios Comunidade Centro de Computao Unicamp 34


Programao para a Web utilizando PHP

$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 MySQL


// Parmetros: host, username, senha
$conec = mysql_connect ("localhost","usuario","senha");

// Declarao do SQL
$declar = "SELECT nome, unidade, telefone, email, cargo from
funcionarios where nome = '$nome'";

// Roda a query e verifica se encontrou registro


$query = mysql_db_query ('unicamp', $declar, $conec) or die ("Erro no
acesso ao banco");
$achou = mysql_num_rows($query);
// echo ($achou);
// Se encontrou, guarda as variveis
if ($achou > 0) {
$row = mysql_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>");
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>

Diviso de Servios Comunidade Centro de Computao Unicamp 35


Programao para a Web utilizando PHP

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.

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="get" 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>

Diviso de Servios Comunidade Centro de Computao Unicamp 36


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 "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 o cdigo vai conter programao PHP.

5.2) Script exclusao.php

O script exclusao.php vai receber o dado do formulrio, confirmar atravs de consulta ao


banco de dados se o funcionrio est cadastrado, e excluir o registro.

<?php

// Recebe variveis globais do formulrio


global $nome;

// Tirar espao em branco das variveis recebidas do formulrio


$nome = trim($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 MySQL
$conec = mysql_connect ("localhost","usuario","senha");

// Declarao do SQL
$declar = "SELECT nome from funcionarios where nome = '$nome'";

// Roda a query, verifica se funcionrio cadastrado


$query = mysql_db_query ('unicamp', $declar, $conec) or die ("Erro no
acesso ao banco");
$achou = mysql_num_rows($query);
//echo ($achou);
// 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 (mysql_db_query ('unicamp', $declar2, $conec)) {
$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");
}
}

Diviso de Servios Comunidade Centro de Computao Unicamp 37


Programao para a Web utilizando PHP

else {
$ok = 3;
header("Location: exibe_mensagem.php?ok=$ok&tipo_msg=$tipo_msg");
}

mysql_close ($conec);
}
?>
</body>
</html>

5.3) Adicionando o cdigo referente as mensagens da excluso no script


exibe_mensagem.php

Para exibir as mensagens finais da excluso vamos aproveitar o mesmo script utilizado na
incluso. Abra o script exibe_mensagem.php e adicione o seguinte cdigo entre o bloco
de cdigo referente a incluso e o comando que fecha a programao PHP (?> ):

if ($tipo_msg == 'E') {
//se excluso OK
if ($ok == 1) {
echo ("<BR><BR>");
echo ("<center><b><font size = 4> Excluso Efetuada
</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>");
}
}

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

Diviso de Servios Comunidade Centro de Computao Unicamp 38


Programao para a Web utilizando PHP

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 dados) no
existe. Precisamos, ento, cri-lo. Notem que esta pgina no ser mais html e sim php,
pois o cdigo vai conter programao PHP.

Diviso de Servios Comunidade Centro de Computao Unicamp 39


Programao para a Web utilizando PHP

6.2) Script alteracao.php

O script alteracao.php vai receber o dado do formulrio, recuperar as informaes do


banco de dados e mostr-las num formulrio para que elas sejam alteradas. Para montar
o formulrio, criaremos uma funo php.

<?php

include ("funcoes.php");

// Recebe variveis globais do formulrio


global $nome;

// Tirar espao em branco das variveis recebidas do formulrio


$nome = trim($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 MySQL


// Parmetros: host, username, senha
$conec = mysql_connect ("localhost","usuario","senha");

// Declarao do SQL
$declar = "SELECT nome, unidade, telefone, email, cargo from
funcionarios where nome = '$nome'";

// Roda a query e verifica se encontrou registro


$query = mysql_db_query ('unicamp', $declar, $conec) or die ("Erro no
acesso ao banco");
$achou = mysql_num_rows($query);
// echo ($achou);

// Se encontrou, guarda as variveis


if ($achou > 0) {
$row = mysql_fetch_row ($query);
$nome = $row[0];
$unidade = $row[1];
$telefone = $row[2];
$email = $row[3];
$cargo = $row[4];
$script_chamador = 'A';

monta_pagina($nome,$unidade,$telefone,$email,$cargo,$script_chamador);
}
else {
echo ('
<html>

Diviso de Servios Comunidade Centro de Computao Unicamp 40


Programao para a Web utilizando PHP

<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 ("<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

O script funcoes.php 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 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)
{

// Recebe variveis globais


global $nome;
global $unidade;
global $telefone;
global $email;
global $cargo;
global $script_chamador;

Diviso de Servios Comunidade Centro de Computao Unicamp 41


Programao para a Web utilizando PHP

// Tirar espao em branco das variveis recebidas atravs do formulrio


$nome = trim($nome);
$unidade = trim($unidade);
$telefone = trim($telefone);
$email = trim($email);
$cargo = trim($cargo);
$script_chamador = trim($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\">";
echo "<tr>";
echo "<td>";
echo "<p><b>Formulrio de alterao: <br></b></p>";
echo "<form method=\"post\" action=\"alteracao2.php\">";
echo "<p>Nome: $nome </p>";
echo "<p>Unidade: <input type=\"text\" name=\"unidade\"
value=\"$unidade\"
size=\"40\" maxlength=\"40\"> </p>";
echo "<p>Telefone: <input type=\"text\" name=\"telefone\"
value=\"$telefone\"
maxlength=\"10\" size=\"10\"> </p>";
echo "<p>E-mail: <input type=\"text\" name=\"email\" value=\"$email\"
size=\"25\" maxlength=\"25\"> </p>";
echo "<p>Cargo: <input type=\"text\" name=\"cargo\" value=\"$cargo\"
size=\"40\" maxlength=\"40\"> </p>";
echo "<p> <input type=\"submit\" name=\"Submit\" value=\"Enviar\">
</p>";
echo "<p> <input type=\"hidden\" name=\"nome\" value=\"$nome\"></p>";
echo "</form>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "</tr>";
echo "</table>";
echo ("<center> <b> <a href=\"alteracao.html\">Voltar</a> </b>
</center>");

return; }
?>

Diviso de Servios Comunidade Centro de Computao Unicamp 42


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

O script alteracao2.php vai pegar as informaes alteradas, consist-las e fazer um


update no banco de dados.

<?php

// Recebe variveis globais do formulrio


global $nome;
global $unidade;
global $telefone;
global $email;
global $cargo;

// Tirar espao em branco das variveis recebidas do formulrio


$nome = trim($nome);
$unidade = trim($unidade);
$telefone = trim($telefone);
$email = trim($email);
$cargo = trim($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 MySQL
$conec = mysql_connect ("localhost","usuario","senha") or die ("Falha
na conexo com o 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 (mysql_db_query ("unicamp", $declar, $conec)) {
$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");
}

Diviso de Servios Comunidade Centro de Computao Unicamp 43


Programao para a Web utilizando PHP

// Fecha a conexo com o servidor MySQL (Opcional)


mysql_close ($conec);
}
?>
</body>
</html>

6.5) Adicionando o cdigo referente as mensagens da alterao no script


exibe_mensagem.php

Para exibir as mensagens finais da alterao vamos aproveitar o mesmo script utilizado
anteriormente na incluso e na excluso. Abra o script exibe_mensagem.php e adicione o
seguinte cdigo entre o trmino do bloco de cdigo referente a excluso e o comando que
fecha a programao PHP (?> ):

if ($tipo_msg == 'A') {
//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>");
}
}

6.6) 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 44


Programao para a Web utilizando PHP

7 Mdulos Complementares

7.1) Usando If, elseif e else

Altere o script exibe_mensagem.php, ao invs de usar o comando If 3 vezes, mude


para If, elseif e else.
O cdigo ficar assim:

<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

global $ok;
$ok = trim($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
</font></b></center>");
echo ("<BR>");
echo ("<center><b> <a href=\"exclusao.html\">Voltar</a>
</b></center>");
}

Diviso de Servios Comunidade Centro de Computao Unicamp 45


Programao para a Web utilizando PHP

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

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

Diviso de Servios Comunidade Centro de Computao Unicamp 46


Programao para a Web utilizando PHP

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

7.3) 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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<?php

$conec = mysql_connect ("localhost","usuario","senha");

$declar = "SELECT nome, unidade, telefone, email, cargo from


funcionarios";

$query = mysql_db_query ('unicamp', $declar, $conec) or die ("Erro no


acesso ao banco");

$achou = mysql_num_rows($query);
echo ("<BR>");

Diviso de Servios Comunidade Centro de Computao Unicamp 47


Programao para a Web utilizando PHP

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 = mysql_fetch_row ($query))
{
$nome = $linhas[0];
$unidade = $linhas[1];
$telefone = $linhas[2];
$email = $linhas[3];
$cargo = $linhas[4];

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

Você também pode gostar