You are on page 1of 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
Diviso de Servios Comunidade Centro de Computao Unicamp
4
ltima atualizao em 12/05/2003
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
1
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.




Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
2
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:



Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
3

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)




Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
4

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:

Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
5
Exemplo:

Date: Mon, 11
st
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.















Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
6
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

Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
7
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();

?>

















Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
8
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;





Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
9
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)








Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
10
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';


Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
11

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

Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
12
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




Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
13
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












Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
14
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




Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
15
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)



















Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
16
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:


Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
17

$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
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
18
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>;
}











Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
19

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






















Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
20
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>;
}
}







Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
21
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>;












Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
22
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;



Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
23
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();


Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
24
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();
}













Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
25
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.



Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
26
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).


Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
27
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>







Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
28
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.
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
29

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.
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
30
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:
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
31
<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
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
32
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
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
33
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
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
34
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)) {

Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
35
$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>
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
36

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>
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
37
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");
}
}
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
38
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
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
39
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.



Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
40
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>
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
41
<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;

Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
42
// 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; }
?>

Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
43
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");
}
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
44

// 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.
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
45
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>");
}
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
46
// 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
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
47
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>");
Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
48
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>













Programao para a Web utilizando PHP
Diviso de Servios Comunidade Centro de Computao Unicamp
49
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

You might also like