Você está na página 1de 62

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.
PHP ntermedirio
Sumrio
O que PHP?.........................................................................................................................6
Vantagens............................................................................................................................... 6
Sintaxe Bsica........................................................................................................................ 7
Variveis.............................................................................................................................7
Inteiros...........................................................................................................................7
Ponto-Flutuante.............................................................................................................8
Strings............................................................................................................................8
Caracteres de Escape.................................................................................................... 8
Arrays............................................................................................................................ 8
Unio de arrays ............................................................................................................9
Objetos...........................................................................................................................9
Listas............................................................................................................................. 9
Booleans........................................................................................................................ 9
Transformaes de tipo...................................................................................................... 9
Coeres...................................................................................................................... 10
Transformaes explcitas de tipo...............................................................................10
Tipo suportados nas transformaes explcitas.......................................................... 10
Funo settype.............................................................................................................11
Operadores........................................................................................................................11
Aritmticos...................................................................................................................11
Strings..........................................................................................................................11
Atribuio.................................................................................................................... 11
Lgicos........................................................................................................................ 12
Comparao................................................................................................................ 12
Incremento e decremento............................................................................................ 12
Estruturas de controle....................................................................................................... 13
If e Else........................................................................................................................ 13
Switch.......................................................................................................................... 14
While............................................................................................................................14
Do..while..................................................................................................................... 15
For............................................................................................................................... 15
Obs.: os comandos while, do while e for , quando utilizados sem um parmetro de
controle, tem como valor padro o true, ou seja, vai ser executado como se fosse um
loop infinito................................................................................................................. 15
Nesse caso a sada seria: 1,2,3 ...............................................................................16
Break........................................................................................................................... 16
Continue...................................................................................................................... 16
Sada: echo()..................................................................................................................... 16
Sada: print()..................................................................................................................... 17
Funes............................................................................................................................. 17
Passagem de parmetros por referncia.....................................................................18
Escopo das variveis.........................................................................................................18
Globais........................................................................................................................ 19
Diviso de Servios Comunidade Centro de Computao Unicamp
3
PHP ntermedirio
Locais.......................................................................................................................... 19
Estticas...................................................................................................................... 20
Sesses.................................................................................................................................. 21
Superglobal $_SESSION..................................................................................................21
Upload de Arquivos.............................................................................................................23
A varivel $_FILES..........................................................................................................23
A funo move_uploaded_file()....................................................................................... 24
Manipulao de Data e Hora............................................................................................. 26
Funes............................................................................................................................. 26
mktime().......................................................................................................................26
strftime()...................................................................................................................... 26
date()........................................................................................................................... 27
checkdate().................................................................................................................. 31
getdate().......................................................................................................................31
Enviando e-mails................................................................................................................. 33
Projeto.................................................................................................................................. 34
Banco de dados e tabelas.................................................................................................. 34
chamados.....................................................................................................................34
atendimentos................................................................................................................34
usuarios....................................................................................................................... 34
Funes chamadas frequentemente por outros scripts..................................................... 35
funcoes.php..................................................................................................................35
misc.php.......................................................................................................................36
Scripts de autenticao e pgina inicial do sistema.......................................................... 37
Index.php..................................................................................................................... 37
autentica_src.php........................................................................................................ 38
pagina_principal.php.................................................................................................. 39
Mdulo de incluso de chamados.....................................................................................40
form_chamado.php......................................................................................................40
incluir_chamado.php...................................................................................................41
exibe_mensagem.php...................................................................................................44
Testando o mdulo de incluso de chamados............................................................. 45
Mdulo de registro de atendimentos................................................................................ 46
form_atendimento.php.................................................................................................46
registrar_atendimento.php.......................................................................................... 47
registrar_atendimento2.php........................................................................................ 49
registrar_atendimento3.php........................................................................................ 52
exibe_mensagem.php...................................................................................................54
Testando o mdulo de registro de atendimentos.........................................................54
Mdulo de consulta.......................................................................................................... 55
consulta_chamados_periodo.php................................................................................55
consulta_chamados_periodo2.php..............................................................................56
Testando o mdulo de consulta................................................................................... 60
Expirao de sesso.......................................................................................................... 61
Diviso de Servios Comunidade Centro de Computao Unicamp
4
PHP ntermedirio
logout.php....................................................................................................................61
Exerccios complementares................................................................................................ 61
Dicas..................................................................................................................................... 62
ltima atualizao em 06/05/2011
Diviso de Servios Comunidade Centro de Computao Unicamp
5
PHP ntermedirio
O que PHP?
O PHP foi criado por volta de 1994 por Rasmus Lerdorf, com o nome de Personal
Home Page Tools.
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.
Vantagens
O PHP apresenta inmeras vantagens:
uma linguagem de fcil aprendizado;
Tem performance e estabilidade excelentes;
Seu cdigo aberto, no preciso pagar por sua utilizao, e possvel alter-lo
na medida da necessidade de cada usurio;
Tem suporte nos principais servidores web do mercado, principalmente no servidor
web Apache;
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,
MAP, POP3, LDAP, HTTP, entre outros;
No precisa ser compilado;
A partir da verso 5 do PHP, foi introduzindo um novo modelo de orientao a
objetos. Nessa verso o tratamento de objetos foi completamente reescrito,
permitindo um desempenho melhor e mais vantagens.
Diviso de Servios Comunidade Centro de Computao Unicamp
6
PHP ntermedirio
Sintaxe Bsica
O PHP tem uma sintaxe simples e enxuta, o que facilita a organizao dos scripts a
serem desenvolvidos. Outra caracterstica interessante que os cdigos em PHP so
embutidos no HTML. 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;
PHP suporta os seguintes tipos de variveis:
inteiros (integer ou long);
ponto flutuante (double ou float);
strings
arrays
objetos
Inteiros
Este tipo de varivel contm dados inteiros.
Sintaxe:
$curso = 123; //inteiro positivo
$curso = -123; //inteiro negativo
Diviso de Servios Comunidade Centro de Computao Unicamp
7
PHP ntermedirio
Ponto-Flutuante
Tambm chamada Float ou Double, esse tipo de varivel pode conter valores com ponto-
flutuante.
Sintaxe:
$curso = 1.234;
Strings
Este tipo de varivel pode ter seu contedo entre (') aspas simples ou (") aspas duplas.
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
processado antes da impresso da variavel
Exemplos de strings:
$string1 = "Programando em PHP;
echo $string1; //este exemplo ira imprimir 'Programando em PHP'
$string2 = '$string1'; // este exemplo ir imprimir '$string1'
$string3 = "$string1; //este exemplo ir imprimir 'Programando em PHP'
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,
com mostrado a seguir:
Sintaxe:
$estilo_musical[0] = 'pagode';
Diviso de Servios Comunidade Centro de Computao Unicamp
8
PHP ntermedirio
$estilo_musical[1] = drum 'n' bass;
$estilo_musical[MPB] = 'Gilberto Gil';
$estilo_musical[Rock] = 'Blind Guardian';
Unio de arrays
$a = array("a" => "ma", "b" => "banana");
$b = array("a" =>"pra", "b" => "framboesa", "c" => "morango");
$c = $a + $b; // Uniao de $a e $b
echo "Unio de \$a e \$b: \n";
var_dump($c);
Objetos
Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe
para uma varivel.
Obs.: esse tpico faz parte do treinamento de PHP Avanado.
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 com parmetros para o comando list. muito importante lembrar que
s sero passadas ao comando list os elementos do array que possurem os ndices com
valores inteiros e no negativos.
Booleans
Em PHP, no existe um tipo especfico para as variveis do tipo boolean, ele trata este
tipo com valores inteiros: 0 (zero) para false e valores diferentes deste como true.
Transorma!"es de ti#o
possvel fazer transformaes de tipos de variveis atravs das seguintes formas:
Diviso de Servios Comunidade Centro de Computao Unicamp
9
PHP ntermedirio
Coer!es
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 -);
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.
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
"rans#or$a!es e%pl&citas de tipo
Desta forma precisaremos utilizar a sintaxe de typecast do PHP, como os exemplos a
seguir:
Sintaxe:
$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)
"ipo suportados nas trans#or$a!es e%pl&citas
Sintaxe:
(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
10
PHP ntermedirio
Funo settype
Trabalha igualmente as transformaes explcitas, porm com sintaxe diferente, como o
exemplo a seguir:
Sintaxe:
$curso = 20; // (integer)
settype($curso, double);
O valor da varivel $curso foi transformada em ponto flutuante.
O#eradores
Arit$'ticos
+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Mdulo
Strings
.
Concatenao
Atribuio
= Atribuio simples
+= Atribuio com adio
-= Atribuio com subtrao
*= Atribuio com Multiplicao
/= Atribuio com diviso
%= Atribuio com mdulo
.= Atribuio com concatenao
Sintaxe:
$curso = 8;
$curso += 2; // $curso fica com o valor 10
Diviso de Servios Comunidade Centro de Computao Unicamp
11
PHP ntermedirio
L(gicos
and "e lgico
or "ou lgico
xor "ou exclusivo
! No (inverso)
&& "e lgico
|| "ou lgico
Co$parao
== igual a
!= diferente de
< menor que
> maior que
<= menor ou igual a
>= maior ou igual a
=== dntico a
!=== No idntico a
Incre$ento e decre$ento
++ 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:
Sintaxe:
$a = 1;
$b = ++$a; // $b recebe 2, valor de $a j incrementado)
Depois: retorna o valor da varivel j incrementada ou decrementada:
Sintaxe:
$a = 1;
$b = $a++; // $b recebe 1 e $a passa a ter 2)
Diviso de Servios Comunidade Centro de Computao Unicamp
12
PHP ntermedirio
$struturas de controle
I# e Else
O comando i testa a condio passada e executa o bloco de cdigo caso o valor
retornado da condio seja verdadeiro:
Sintaxe:
$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)
Sintaxe:
$a = 1;
$b = 2;
if ($a > $b) {
...
...
} else {
...
...
}
Ainda existe a instruo elsei* para situaes onde precisa-se verificar mais que uma
condio:
Sintaxe:
$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 ';
}
Diviso de Servios Comunidade Centro de Computao Unicamp
13
PHP ntermedirio
S+itc,
Comando utilizado para fazer mltiplos testes de condio. A idia deste comando
igual ao do elsei , porm com algumas diferenas:
Sintaxe:
$a = 1;
switch ($a) {
case 0:
echo ' $a igual a 0 ';
break;
case 1:
echo ' $a igual a 1 ';
break;
case 2:
echo ' $a igual a 2 ';
break;
default:
echo " \$a igual a $a ";
}
A idia do comando s%itc& 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 brea' logo abaixo da ltima linha do bloco de cdigo, como o
exemplo anterior. O comando s%itc& tambm aceita testes de condio em qualquer tipo
de varivel suportado pelo PHP:
Sintaxe:
$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;
}
-,ile
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:
Sintaxe:
Diviso de Servios Comunidade Centro de Computao Unicamp
14
PHP ntermedirio
$a = 1;
while ($a <= 10) {
echo "Nmero".$a++."<br>";
}
.o//+,ile
Este comando tem a mesma idia que o comando %&ile, porm, seu teste de condio
feito no final do bloco de cdigo:
Sintaxe:
$c = 0;
do {
echo "Nmero".++$c."<br>";
} while ($c < 10);
For
Como nos outros comando que realizam laos condicionais, o comando or 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:
Sintaxe:
for ($a=1; $a<=10; $a++) {
echo Nmero.$a.<br>;
}
Obs/) os comandos while, do while e for , quando
utilizados sem um parmetro de controle, tem como valor
padro o true, ou seja, vai ser executado como se fosse
um loop infinito.
$a = 1;
while (true) {
echo "Nmero".$a++."<br>";
}
$a = 1;
for (;;) {
echo "Nmero".$a++."<br>";
Diviso de Servios Comunidade Centro de Computao Unicamp
15
PHP ntermedirio
}
Nesse caso a sada seria: 1,2,3 .
Brea0
O comando brea' pode ser utilizado em comandos de laos condicionais e no
comando s%itc&, e sua funo parar imediatamente a execuo do lao condicional,
prosseguindo normalmente com a execuo do script:
Sintaxe:
$a = 20;
while ($a > 0) {
if ($a == 3) {
echo Nmero invlido!;
break;
}
echo Nmero .$a.<br>;
$a--;
}
Continue
O comando continue tambm funciona dentro dos laos condicionais, porm, no para
o fluxo do bloco de cdigo, e sim, volta para o incio dele:
Sintaxe:
for ($a=0;$a<=10;$a++) {
if ($a == 5) {
echo "<p>Pulou o Numero ==> $a</p>";
continue;
}
echo "Numero ==> $a<br>";
}
Sa(da) ec&o*+
A funo ec&o faz a impresso de um ou mais argumentos na janela do navegador.
Sintaxe:
Echo Essa instruo ir imprimir no navegador.;
Echo (Tambm pode-se usar parnteses.);
Diviso de Servios Comunidade Centro de Computao Unicamp
16
PHP ntermedirio
Para a construo sem o uso de parnteses, possvel passar mais de um argumento
para a funo:
Sintaxe:
Echo Primeiro argumento, Segundo argumento ;
Tambm existe uma construo abreviada do ec&o que possibilita alternar entre PHP e
HTML rapidamente.
Sintaxe:
<P>Aqui HTML <?=Aqui PHP?></P>
Essa forma mais utilizada em formulrios.
Sa(da) #rint*+
A funo #rint bem semelhante a ec&o, com duas diferenas: print aceita apenas 1
argumento e alm da impresso no navegador, print retorna 1 em caso de sucesso e 0
em caso de falha na tentativa de impresso.
Exemplos:
Print Funciona igual a funo echo. ;
Print (Tambm pode-se usar parnteses.) ;
Print (`Tambm pode-se usar aspas simples.') ;
,un!"es
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.
Sintaxe:
function soma ($a,$b) {
$c = $a + $b;
return $c;
}
echo "A funcao soma() retornou ==> ".soma(5,10);
A instruo return opcional, j que no obrigatrio retornar algum valor em funes
no PHP, outra regra a de no permitir que sejam retornados mltiplos valores atravs
desta instruo. Para resolver essa necessidade, pode-se retornar listas e arrays.
Sintaxe:
function soma ($a, $b) {
Diviso de Servios Comunidade Centro de Computao Unicamp
17
PHP ntermedirio
$c = $a + $b;
$d = $c - 5;
return array($c,$b,$d)
}
Passage$ de par1$etros por re#er2ncia
Normalmente, a passagem de parmetros em PHP feita atravs dos valores das
variveis, no permitindo assim, a alterao do valor na varivel original.
Sintaxe:
function contador($a) {
++$a;
}
$cont = 10;
contador($cont);
echo "A variavel <b>$cont</b> contem ==> ".$cont;
No exemplo acima, a varivel original permanecer com o mesmo valor porque no foi
definida a passagem de parmetros por referncia, o que alteraria tambm o valor da
varivel original. Uma das maneiras de se utilizar esse recurso colocar o carcter '' &''
antes do nome da varivel na declarao da funo.
Sintaxe:
function contador(&$a) {
++$a;
}
$cont = 10;
contador($cont);
echo "A variavel <b>$cont</b> contem ==> ".$cont;
Poderamos tambm utilizar a passagem de parmetros por referncia apenas quando
fssemos chamar a funo, e no em sua declarao.
Sintaxe:
contador(&$cont);
echo $cont;
$sco#o 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;
Diviso de Servios Comunidade Centro de Computao Unicamp
18
PHP ntermedirio
Locais;
Estticas;
Constantes.
3lobais
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, utilizando o global-
Sintaxe:
$curso = 'PHP';
function mostra() {
global $curso;
echo $curso;
}
mostra();
O mesmo recurso pode ser acessado atravs da array .LOB/LS, que nos permite
acessar todas as variveis globais do script. O exemplo acima pode ser reescrito da
seguinte maneira:
Sintaxe:
$curso = 'PHP';
function mostra() {
echo $GLOBALS[0curso0];
}
mostra();
Locais
As variveis locais so o tipo mais restrito dentro do PHP. Elas funcionam apenas
dentro do escopo onde foram definidas.
Sintaxe:
function mostra() {
$var_local = 'varivel local';
echo Var_local= $var_local;
}
echo Var_local= $var_local;
Diviso de Servios Comunidade Centro de Computao Unicamp
19
PHP ntermedirio
Est4ticas
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.
Sintaxe:
function contador() {
static $i = 0;
echo $i++.<br>;
}
for ($a=0; $a<=5; $a++) {
contador();
}
Diviso de Servios Comunidade Centro de Computao Unicamp
20
PHP ntermedirio
Sess"es
Este recurso, que foi implementado na verso 4 do PHP, muito til para quem
trabalha com scripts que necessitam passar dados em acessos subseqentes para outros
scripts. Sesses tambm so utilizadas para:
Customizao de elementos de uma pgina, como cores, fontes, textos, etc;
Gerenciamento de autenticao em sistemas para a web;
Armazenamento de informaes sigilosas dentro do servidor, evitando a
passagem destas informaes por meio de campos do tipo hidden do HTML ou
cookies, aumentando assim a segurana destes dados.
Esse recurso j vem habilitado na instalao padro do PHP, no havendo a
necessidade de nenhuma configurao adicional, e antes de inicializar uma sesso,
devemos lembrar das seguintes regras bsicas de utilizao:
Nenhum contedo deve ser exibido antes de inicializar uma sesso;
Em todas as pginas que forem utilizar este recurso, a sesso deve ser
inicializada;
Para inicializar uma sesso, basta executar o seguinte comando:
Sintaxe:
<?php
session_start();
?>
Quando esta pgina for carregada, a sesso ser inicializada e a D da sesso ficar
gravada em um cookie chamado PHPSESSD dentro do navegador. Esta sesso ser
vlida enquanto o navegador estiver aberto ou enquanto a funo session_destroy() no
for executada.
Para visualizarmos a D da sesso corrente, utilizamos a funo session_id().
Sintaxe:
<?php
session_start();
$id_sess = session_id();
echo "A ID da sesso corrente ====> <b>$id_sess</b>";
?>
Su#erglobal $_SESSON
Adicionar valores em uma sesso uma tarefa muito simples, e para isso, utilizaremos
a superglobal 12S$SS3O4-
Sintaxe:
Diviso de Servios Comunidade Centro de Computao Unicamp
21
PHP ntermedirio
<?php
session_start();
$_SESSION["curso"] = "PHP Intermedirio";
$teste = "Teste de Sesses!"
$_SESSION["teste"] = $teste;
?>
Atribuir os valores de uma sesso para variveis globais ou locais tambm uma tarefa
simples:
Sintaxe:
<?php
session_start();
$curso = $_SESSION["curso"];
$teste = $_SESSION["teste"];
?>
Os ltimos dois recursos que sero apresentados para manipular sesses so:
session2unset*+ - Limpa todas as variveis da sesso corrente.
session2destro5*+ 6 Finaliza a sesso corrente.
Utiliza-se estas duas funes no final do uso da sesso, que conseqentemente expira
o cookie PHPSESSD no navegador, finalizando a sesso corrente. O cdigo PHP para
este fim apresentado no exemplo abaixo.
Sintaxe:
<?php
session_unset();
session_destroy();
?>
Diviso de Servios Comunidade Centro de Computao Unicamp
22
PHP ntermedirio
U#load de /rquivos
O PHP capaz de receber o upload de qualquer navegador que siga a norma RFC-
1867. sto permite que se faa upload de arquivos de texto de binrios.
Com as funes de autenticao e manipulao de arquivos do PHP, voc tem o
controle completo de quem pode fazer o upload de arquivo e o que fazer com o arquivo
aps seu upload. Abaixo, um exemplo de um formulrio HTML para realizar esta tarefa.
Sintaxe (teste_upload.html):
<html>
<head>
<title>Documento sem t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1">
</head>
<body>
<form enctype="multipart/form-data" action="teste_upload.php"
method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
Send this file: <input name="arquivo" type="file">
<input type="submit" value="Enviar Arquivo">
</form>
S permitido o envio de arquivos .jpg e .gif
</body>
</html>
O atributo enctype da tag <form> o mais importante para a realizao de um upload,
sem ele, este recurso no ir funcionar. O campo do tipo file, MAX_FLE_SZE, indica ao
navegador o tamanho mximo do arquivo a ser enviado. Agora veremos mais sobre como
o PHP processa o upload de arquivo dentro do servidor.
/ varivel $_FLES
Este array nos fornece as informaes sobre o arquivo que o navegador enviou ao
servidor. Abaixo, a lista dos valores que este array nos disponibiliza.
$_FILES['arquivo']['name'] o nome original do arquivo no computador do usurio!
$_FILES['arquivo']['t"pe']
o #I#E t"pe do arquivo$ se o navegador deu esta
in%orma&'o: e(! image)gi%
$_FILES['arquivo']['si*e'] o taman+o em ,"tes do arquivo
$_FILES['arquivo']['tmp_name']
o nome temporrio do arquivo$ como %oi guardado no
servidor!
$_FILES['arquivo']['error'] o c-digo de erro associado a este upload de arquivo!
Diviso de Servios Comunidade Centro de Computao Unicamp
23
PHP ntermedirio
Adicionado no ./. 0!1!2
Os cdigos de erro que o item $_FLES['arquivo']['error'] pode retornar so:
3.L4AD_E55_46 2 n'o ouve erro$ o upload %oi ,em sucedido
3.LA4D_E55_I7I_SI8E 9
4 arquivo no upload : maior do que o limite de%inido em
upload_ma(_%ilesi*e no p+p!ini
3.L4AD_E55_F45#_SI8E 1
4 arquivo ultrapassa o limite de #A;_FILE_SI8E que %oi
especi%icado no %ormulrio /<#L
3.L4AD_E55_.A5<IAL = 4 upload do arquivo %oi %eito parcialmente
3.L4AD_E55_74_FILE 0 7'o %oi %eito upload do arquivo
/ un!7o move_uploaded_file()
Quando realizado um upload de arquivo para o servidor web, este arquivo fica em um
diretrio temporrio, normalmente em /tmp (podemos alterar este diretrio no php.ini), e
caso no seja inicializada nenhuma ao para manipular este arquivo, ele ser apagado
deste diretrio ao fim da execuo do script. Para esta tarefa, o PHP disponibiliza a
funo move2u#loaded2ile. Esta funo responsvel por mover um arquivo carregado
pelo mecanismo do PHP de HTTP POST para uma nova localizao.
Sintaxe:
move_uploaded_file(string nome do arquivo, string destino);
OBS) O diret(rio de destino de5e ter per$isso de escrita para o P6P/
A seguir, um exemplo de um script PHP que receber os dados do mtodo POST para
realizar o upload:
Sintaxe (teste_upload.php):
Diviso de Servios Comunidade Centro de Computao Unicamp
24
PHP ntermedirio
<?php
$uploaddir = 'C:\WAPP\apache2\htdocs\cursophp\upload_arquivos\\';
$uploadfile = $uploaddir. $_FILES['arquivo']['name'];
print "<pre>";
if ($_FILES['arquivo']['size'] != 0){
if (move_uploaded_file($_FILES['arquivo']['tmp_name'],
$uploaddir . $_FILES['arquivo']['name']))
{
print "O arquivo valido e foi carregado com sucesso. Mais
informaes:\n";
print_r($_FILES);
}
else
{
print "Erro no processamento! Mais informaes:\n";
print_r($_FILES);
}}
else
{ print "Erro no processamento! Mais informaes:\n";
print_r($_FILES);
}
print "</pre>";
?>
Diviso de Servios Comunidade Centro de Computao Unicamp
25
PHP ntermedirio
8ani#ula!7o de 9ata e Hora
Neste captulo iremos mostrar algumas funes interessantes que o PHP nos
disponibiliza para manipulao de data e hora. As mais utilizadas e importantes so as
seguintes:
mktime()
strftime()
date()
checkdate()
getdate()
,un!"es
$0ti$e78
Retorna uma data com o formato Unix/timestamp. Esse formato baseado em um
contador que teve seu valor zero associado com a data 01/01/1970 00:00:00UTC, e que
incrementado a cada segundo. Uma vez representadas no formato UNX timestamp as
datas se tornam um pouco complicadas para o raciocnio humano mas so manipuladas
mais facilmente pelos computadores. til para se fazer operaes com datas.
Se os argumentos forem invlidos, a funo retornar FALSE (antes do PHP 5.1
retornava -1).
Exemplo:
01/01/1970 00:00:00 UTC -> 0
01/01/1970 00:01:00 UTC -> 60
01/01/1999 00:00:01 UTC -> 915 148 801
16/09/2004 23:59:58 UTC -> 1 095 379 198
Sintaxe:
mktime(int hora, int minuto, int segundo, int ms, int dia, int
ano);
O valor de retorno precisa passar por uma formatao para poder ser apresentado,
para isso, usamos a funo strftime().
str#ti$e78
Formata uma data do tipo Unix/timestamp para uma string de apresentao
Sintaxe:
Diviso de Servios Comunidade Centro de Computao Unicamp
26
PHP ntermedirio
strftime(string formatao, int timestamp);
Exemplo:
$data = mktime(10,20,30,10,20,2009);
echo $data;
echo strftime("<br> %d/%m/%Y - %H:%M:%S", $data);
Sada:
1192886430 (formato Unix/timestamp)
20/10/2007 - 10:20:30
Uma lista das principais opes para esta funo encontra-se na listagem abaixo:
%d
dia do m>s ?29 a =9@
%m m>s ?29 a 91@
%y
ano com 1 dAgitos ?e(! B2$ 2=@
%Y ano com 0 dAgitos ?e(! 9CB2$ 122=@
%H
+ora atual no %ormato 10 +oras ?22 a 1=@
%I +ora atual no %ormato 91 +oras ?29 a 91@
%M
minuto atual ?22 a DC@
%S segundo atual ?22 a DC@
%R
+ora no %ormato 10 +oras ?11:0D@
%x data sem mostrar a +ora do %ormato 3ni()timestamp ?e(! 19)91)122=@
%X
+orrio sem mostrar a data do %ormato 3ni()timestamp ?e(! 9C:==@
date78
Retorna uma data formatada como uma string ou inteiro de acordo com as opes
passadas como parmetro.
Veja as opes de formatao abaixo.
Diviso de Servios Comunidade Centro de Computao Unicamp
27
PHP ntermedirio
Caractere
de format
Descrio
Exemplo de
valores
retornados
Dia --- ---
d
Dia do ms, 2 digitos com preenchimento
de zero
01 at 31
D
Uma representao textual de um dia, trs
letras
Mon at Sun
Dia do ms sem preenchimento de zero 1 at 31
! ('L'
minsculo)
A representao textual completa do dia
da semana
Sunday at
Saturday
"
Representao numrica ISO-8601 do dia da
semana (adicionado no PHP 5.1.0)
1 (para Segunda)
at # (para
Domingo)
S
Sufixo ordinal ingls para o dia do ms,
2 caracteres
st, nd, rd ou t$.
Funciona bem com

% Representao numrica do dia da semana
0 (para domingo)
at & (para
sbado)
' O dia do ano (comeando do 0) 0 through 3&(
Semana --- ---
)
Nmero do ano da semana ISO-8601, semanas
comeam na Segunda (adicionado no PHP
4.1.0)
Exemplo: *+ (the
42nd week in the
year)
M,s --- ---
-
Um representao completa de um ms, como
January ou March
.anuary at
De/em0er
m
Representao numrica de um ms, com
leading zeros
01 a 1+
M Uma representao textual curta de um .an a De/
Diviso de Servios Comunidade Centro de Computao Unicamp
28
PHP ntermedirio
Caractere
de format
Descrio
Exemplo de
valores
retornados
Dia --- ---
ms, trs letras
n
Representao numrica de um ms, sem
leading zeros
1 a 1+
t Nmero de dias de um dado ms +1 through 31
2no --- ---
3 Se est em um ano bissexto
1 se est em ano
bissexto, 0 caso
contrrio.
o
Nmero do ano ISO-8601. Este tem o mesmo
valor como Y, exceto que se o nmero da
semana ISO ()) pertence ao anterior ou
prximo ano, o ano usado ao invs.
(adicionado no PHP 5.1.0)
Exemplos: 1444 ou
+003
Y
Uma representao de ano completa, 4
dgitos
Exemplos: 1444 ou
+003
y Uma representao do ano com dois dgitos
Exemplos: 44 ou
03
5empo --- ---
a Antes/Depois de meio-dia em minsculo am or pm
2 Antes/Depois de meio-dia em maisculo 2M or 6M
7 Swatch Internet time 000 at 444
g
Formato 12-horas de uma hora sem
preenchimento de zero
1 at 1+
8
Formato 24-horas de uma hora sem
preenchimento de zero
0 at +3
$ Formato 12-horas de uma hora com zero 01 at 1+
Diviso de Servios Comunidade Centro de Computao Unicamp
29
PHP ntermedirio
Caractere
de format
Descrio
Exemplo de
valores
retornados
Dia --- ---
preenchendo esquerda
H
Formato 24-horas de uma hora com zero
preenchendo esquerda
00 at +3
i Minutos com zero preenchendo esquerda 00 at (4
s Segundos, com zero preenchendo esquerda 00 at (4
u Milisegundos (adicionado no PHP 5.2.2) Exemplo: (*3+1
5ime'one --- ---
e
Identificador de Timezone (adicionado no
PHP 5.1.0)
Exemplos: 95:,
8M5,
2t!anti/;2'ores
I (capital i) Se a data est ou no no horrio de vero
1 se horrio de
vero, 0 caso
contrrio.
<
Diferena para Greenwich time (GMT) em
horas
Exemplo: =0+00
6
Diferena para Greenwich time (GMT) com
dois pontos entre horas e minutos
(adicionado no PHP 5.1.3)
Exemplo: =0+>00
5 Abreviao de Timezone
Exemplos: ?S5,
MD5 ...
@
Timezone offset in seconds. The offset
for timezones west of UTC is always
negative, and for those east of UTC is
always positive.
A*3+00 at (0*00
-u!!
Date;5ime
--- ---
/ ISO 8601 date (adicionado no PHP 5) 2004-02-
Diviso de Servios Comunidade Centro de Computao Unicamp
30
PHP ntermedirio
Caractere
de format
Descrio
Exemplo de
valores
retornados
Dia --- ---
12T15:19:21+00:00
c,ec0date78
Verifica se a data passada vlida, retorna verdadeiro ou falso:
Sintaxe:
checkdate(int mes, int dia, int ano);
$a = checkdate(11,02,1980);
if ($a) {
echo "Data Correta<p>";
} else {
echo "<font color=\"red\">Data Incorreta</font><p>";
}
getdate78
Retorna um array com as informaes de uma data no formato Unix/timestamp
Sintaxe:
array getdate(int timestamp);
$data_array = getdate();
print_r($data_array);
A lista dos itens mais importantes deste array retornado encontra-se abaixo:
EsecondsE retorna os segundos ?2 a DC@
EminutesE retorna os minutos ?2 a DC@
E+ourE retorna as +oras ?2 a 1=@
Emda"E retorna o dia do m>s ?9 a =9@
EFda"E retorna a representa&'o num:rica do dia da semana ?2 para Domingo e G
Diviso de Servios Comunidade Centro de Computao Unicamp
31
PHP ntermedirio
para S,ado@
EmonE retorna a representa&'o num:rica do m>s atual ?9 a 91@
E"earE retorna a representa&'o num:rica do anual atual ?122=@
E"da"E retorna a representa&'o num:rica do dia do ano ?9 a =GD@
EFeeHda"E representa&'o te(tual do dia da semana ?Domingo a S,ado@
Emont+E representa&'o te(tual do m>s atual ?Ianeiro a De*em,ro@
Diviso de Servios Comunidade Centro de Computao Unicamp
32
PHP ntermedirio
$nviando e6mails
Para enviar e-mails a partir de scripts PHP, necessrio instalar um programa para
processamento de correio eletrnico, nesse treinamento utilizaremos o SendMail.
Esse programa far a interface entre o php e o servidor de e-mails. No treinamento
utilizaremos como servidor de e-mails o BOL.
Para utilizarmos o programa sendmail precisamos alterar o arquivo de configurao do
PHP, o php.ini. necessrio alterar o valor da diretiva sendmail_path, incluindo o PATH
(caminho) do executvel do aplicativo servidor de correio eletrnico como segue:
sendmail_a!" = $%&'sendmail'sendmail(e)e *!$
J no arquivo sendmail.ini necessrio configurar as informaes referentes ao
servidor de e-mail.
Mais informaes sobre instalao e configurao esto disponveis na documentao
complementar.
A seguir, temos dois exemplos de como podemos utilizar a funo mail do PHP para
enviar mensagens. No exemplo 1, os parmetros so passados de uma forma mais
simplificada, entre aspas e separados por vrgulas. No exemplo 2, temos uma verso
mais completa, indicada para quando se quer enviar a mensagem para mais de um
endereo eletrnico ou com cpia para outro e-mail.
Exemplo 1:
mail("e-mail", "Assunto", "Contedo da mensagem Linha 1 Linha 2
Linha 3", "Ttulo da mensagem");
Exemplo 2:
<?php
// A funo mail utilizada dessa forma possibilita o envio de
// mensagens para mais de um destinatrio e tambm
// possibilita trabalharmos com parmetros adicionais
$assunto = "Curso de PHP";
$para = "Bol1 <cursophp1@bol.com.br>, Bol2
<cursophp2@bol.com.br>";
$remetente = "Alexandre <arroyo.alexandre@gmail.com>";
$Cc = "Bol3 <cursophp-serv@bol.com.br>";
$mensagem = "Testando a funo mail do PHP!!!";
$headers = "From: ".$remetente."\r\n";
$headers .= "Cc: ".$Cc."\r\n";
$headers .= "Bcc: ".$remetente."\r\n";
mail($para,$assunto,$mensagem,$headers);
echo 'Mensagem enviada!';
?>
Mais informaes sobre essa funo podem ser obtidas em:
http://br2.php.net/manual/pt_BR/function.mail.php
Diviso de Servios Comunidade Centro de Computao Unicamp
33
PHP ntermedirio
Pro:eto
O projeto consiste no desenvolvimento de um sistema (SRC Sistema de Registro de
Chamados) cujo objetivo registrar chamados de usurios para uma equipe de suporte,
solicitando algum tipo de atendimento tcnico. O sistema tambm vai disponibilizar uma
consulta geral a partir dos dados armazenados.
O desenvolvimento se dar no ambiente WAPP (Windows/Apache/Postgres/PHP). Mais
informaes sobre a instalao e a configurao desse ambiente esto disponveis na
documentao complementar.
Os arquivos e pastas referentes ao sistema ficaro armazenados no diretrio de
publicao do servidor web Apache, na pasta - cursophp - criada para o treinamento:
C:\WAPP\apache2\htdocs\cursophp
Banco de dados e tabelas
Para o desenvolvimento do sistema utilizaremos o servidor de banco de dados
PostgreS;L. Foi criada a base de dados curso#&#, contendo as seguintes tabelas:
c,a$ados
num2c&amado integer primary key not null auto_increment,
data2c&amado date not null,
&ora2c&amado time not null,
usuario varc+ar?02) not null,
email varc+ar?02@ not null,
#roblema te(t not null,
equi#e2acionada varc+ar?02@ not null
atendi$entos
num2c&amado integer not null,
data2atendimento date not null,
res#onsavel varc+ar?02@ not null,
equi#e2res#onsavel varc+ar?02@ not null,
solucao te(t not null
usuarios
login varc+ar?12@ not null,
sen&a varc+ar?92@ not null,
Diviso de Servios Comunidade Centro de Computao Unicamp
34
PHP ntermedirio
nome varc+ar?02@ not null,
email varc+ar?02@ not null,
ti#o2usuario varc+ar?12@ not null
Mais informaes sobre a criao do banco de dados e das tabelas podem ser
obtidas na documentao complementar.
,un!"es c&amadas requentemente #or outros scri#ts
Os scripts uncoes-#&# e misc-#&# contm funes chamadas frequentemente por
outros scripts. Essas chamadas so realizadas por meio do comando include, no incio de
cada script.
Include e Require
O include uma funo que permite a incluso do contedo de um
arquivo em outro arquivo. Esse contedo pode ser qualquer tipo de
cdigo PHP, HTML ou simplesmente texto. Os arquivos a serem
includos podem conter uma biblioteca de funes ou classes.
A funo require tem o mesmo objetivo da funo include, no
entanto, em caso de erro, o include apenas mostra uma mensagem
de warning e o script continuar executando, j o require causa um
Fatal Error, encerrando a execuo do script.
#uncoes/p,p
<?php
//Funo que monta o cabealho das pginas
function monta_cabecalho()
{
echo "<html>
<head>
<title>SRC</title>
<meta http-equiv=\"Content-Type\"
content=\"text/html; charset=UTF-8\">
<!-- Link to Style External Sheet -->
<link href='css/style.css' type='text/css'
rel='stylesheet' />
</head>
<body>
<div id='cabecalho'>
<br><h2>Sistema de Registro de Chamados</h2>
</div>
";
}
//Funo que monta o menu lateral das pginas, recebe parmetros
Diviso de Servios Comunidade Centro de Computao Unicamp
35
PHP ntermedirio
function monta_menu($login,$tip_us)
{
echo "<div id='menu_lateral'>
Login: <b>$login</b> <br><br>
<br><br>
<a href=\"form_chamado.php\">Incluir Chamado</a><br>
<br>";
if ($tip_us == 'user_atend')
{
echo "<br><a
href=\"form_atendimento.php\">Registrar Atendimento</a><br><br>";
}

echo "<br>
<a href=\"consulta_chamados_periodo.php\">Consultar
Chamados por Periodo </a><br>
<br>
<br>
<a href=\"pagina_principal.php\">Pagina Inicial
</a><br>
<br><br><br>
<a href=\"logout.php\">Logout </a><br>
</div>
<div id='conteudo'> ";
}
//Funo que monta o rodap das pginas
function monta_rodape()
{
echo "</div><div id='rodape'> <img src=\"imagens/rodape.jpg\"
width=\"760\" height=\"18\"></div>
</body>
</html>
";
}
?>
$isc/p,p
<?php
// Declarao da funo que verifica se o usurio se autenticou
antes de acessar essa pgina
function ver_session()
{
if (!$_SESSION["usuario_sys"])
{
// Funo definida no script funcoes.php responsvel por
montar o cabealho da pgina
monta_cabecalho();
Diviso de Servios Comunidade Centro de Computao Unicamp
36
PHP ntermedirio
echo "<br><br><p><font size=\"1\" face=\"Verdana, Arial,
Helvetica,
sans-serif\">No permitido acessar esta rea antes de
prvia
autenticao!!<p><b><a href=\"index.php\">Pgina
Principal</a></b></font>";
// Funo definida no script funcoes.php responsvel por
montar o rodap da pgina
monta_rodape();
die();
}
}
// Comando que faz a conexo com o banco de dados PostgreSQL
pg_connect("host=localhost dbname=cursophp user=postgres
password=adminpgs") or die ("Erro ao conectar o banco de dados");
?>
Scri#ts de autentica!7o e #gina inicial do sistema
Inde%/p,p
O script index.php vai exibir o formulrio de autenticao para acesso ao sistema e ter
o seguinte cdigo:
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o arquivo especificado
include ("funcoes.php");
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
?>
<div id='conteudo'>
<form action="autentica_src.php" method="post">
<b>Autentica&ccedil;&atilde;o</b><br><br>
<?php
// Exibe mensagem de erro caso o formulrio j tenha sido validado e
tenha sido constatado campos invlidos
if ($_SESSION["erro_aut"])
{
echo "
<table align=center>
<tr>
<td><font color=\"red\">Usu&aacute;rio ou senha
inv&aacute;lidos!</font><br><br></td>
</tr>
</table>
";
}
Diviso de Servios Comunidade Centro de Computao Unicamp
37
PHP ntermedirio
// Limpar a varivel "erro_aut" de $_SESSION
unset($_SESSION["erro_aut"]);
?>
<!-- Monta os campos do formulrio -->
<table>
<tr>
<td>Usu&aacute;rio: </td><td><input type="text" name="usuario"
size="20"></td>
</tr>
<tr valign="top">
<td>Senha: </td><td><input type="password" name="senha"
size="20"><br><br></td>
</tr>
<tr valign="top">
<td><input type="submit" name="submit" size="20" value="
Autenticar "></td><td>&nbsp;</td>
</tr>
</table>
</form>
<?php
// Funo definida no script funcoes.php responsvel por montar o rodap
da pgina
monta_rodape();
?>
autentica9src/p,p
Este script faz a autenticao do usurio junto ao banco de dados:
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o arquivo especificado
include("misc.php");
include("funcoes.php");
// Recebe os dados do formulrio e guarda em variveis locais
$log_user = $_POST["usuario"];
$sen_user = $_POST["senha"];
// Monta a instruo sql
$instr_sql = "select email, tipo_usuario from usuarios where
login='$log_user' and senha='$sen_user'";
// Executa a instruo sql
$exec_sql = pg_query($instr_sql);
// Utiliza a funo pg_fetch_assoc() para buscar o resultado de
uma linha e coloc-lo numa matriz associativa
$reg_user_aut = pg_fetch_assoc($exec_sql);
if ($reg_user_aut)
Diviso de Servios Comunidade Centro de Computao Unicamp
38
PHP ntermedirio
{
// Se encontrou registro, guarda os dados obtidos em variveis
de sesso e chama o prximo script
$_SESSION["usuario_sys"] = $log_user;
$_SESSION["email_usuario_sys"] = $reg_user_aut["email"];
$_SESSION["tipo_usuario_sys"] =
$reg_user_aut["tipo_usuario"];
//print_r($_SESSION);
// Funo header chama outro script sem retornar para o
script chamador
header("Location: pagina_principal.php");
}
else
{
// Se no encontrou registro, ativa a varivel de erro e chama
o script anterior
$_SESSION["erro_aut"] = "1";
// Funo header chama outro script sem retornar para o
script chamador
header("Location: index.php");
}
?>
pagina9principal/p,p
Esse script exibe a pgina inicial do sistema aps a autenticao do usurio:
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("misc.php");
include ("funcoes.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por montar o
menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
?>
Diviso de Servios Comunidade Centro de Computao Unicamp
39
PHP ntermedirio
<b>Objetivo</b><br><br>
Esse sistema registra e armazena informa&ccedil;&otilde;es
referentes aos chamados feitos pelos usu&aacute;rios e aos
atendimentos realizados pela equipe t&eacute;cnica. Tamb&eacute;m
disponibiliza a consulta dos dados armazenados.<br><br></td>
<?php
// Funo definida no script funcoes.php responsvel por montar o
rodap da pgina
monta_rodape();
?>
8<dulo de inclus7o de c&amados
%orm_c+amado!p+p
Esse script exibe o formulrio que receber os dados do chamado.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("funcoes.php");
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por montar o
menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
?>
<strong><font color="#264989">Incluir Chamado</font></strong>
<?php
// Exibe mensagem de erro caso o formulrio j tenha sido
validado e tenha sido constatado campos em branco
if ($_SESSION["erro"])
{
echo ('<BR><BR><font color="#CC0033"><b>Campos
Diviso de Servios Comunidade Centro de Computao Unicamp
40
PHP ntermedirio
Obrigat&oacute;rios n&atilde;o Preenchidos</b></font><BR>');
$problema = trim($_SESSION["problema"]);
$equipe_acionada =
trim($_SESSION["equipe_acionada"]);
unset($_SESSION["erro"]);
unset($_SESSION["problema"]);
unset($_SESSION["equipe_acionada"]);
}
?>
<!-- Monta os campos do formulrio -->
<FORM method="post" action="incluir_chamado.php">
<P><b>Usu&aacute;rio: </b><?php echo $_SESSION["usuario_sys"]; ?>
<br><br>
<b>E-mail: </b> <?php echo $_SESSION["email_usuario_sys"]; ?>

<?php
echo "<P>
<b>Descri&ccedil;&atilde;o do Problema: </b>$problema<br>
<textarea name=\"problema\" rows=3
cols=40>$problema</textarea>";

if (!$equipe_acionada)
{
echo '<P><b>Equipe Acionada: </b>&nbsp;
<select name="equipe_acionada">
<option value="suporte">Suporte</option>
<option
value="conectividade">Conectividade</option>
<option
value="desenvolvimento">Desenvolvimento</option>
<option
value="producao">Produ&ccedil;&atilde;o</option>
</select><BR>';
}
else
{
echo "<P>
<b>Equipe Acionada: </b>$equipe_acionada
<input type=\"hidden\" name=\"equipe_acionada\"
value=\"$equipe_acionada\"><BR>";
}
?>

&nbsp;<BR> &nbsp;
<INPUT name="sub" type="SUBMIT" value="Enviar Dados"> </form>
<?php
// Funo definida no script funcoes.php responsvel por montar o
rodap da pgina
monta_rodape();
?>
Diviso de Servios Comunidade Centro de Computao Unicamp
41
PHP ntermedirio
incluir9c,a$ado/p,p
Esse script vai receber os dados do formulrio, fazer as devidas consistncias e gravar
esses dados na tabela 'chamados'.
Se o processamento for Ok ser enviada uma mensagem utilizando a funo mail,
passando como parmetros o destinatrio, o assunto, o corpo da mensagem e
cabealhos adicionais.
Saiba mais sobre algumas funes que sero utilizadas no
script a seguir
trim: tira espaos em branco no incio e no final de uma varivel.
header: chama outro script, podendo passar parmetros e no
retorna ao script chamador. Nenhum comando de exibio (echo,
include, tags html) pode ser executado antes dessa funo.
mail: envia mensagens por e-mail de acordo com os parmetros
utilizados.
or die: expresso que pode ser usada como uma alternativa para o
if/else. Finaliza a execuo do script.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o arquivo especificado
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Recebe variveis globais e campos do formulrio e armazena em
variveis locais
$usuario = $_SESSION["usuario_sys"];
$email = $_SESSION["email_usuario_sys"];
$problema = trim($_POST["problema"]);
$equipe_acionada = trim($_POST["equipe_acionada"]);
//echo 'problema = '.$problema;
// Consiste se o campo do formulrio est em branco
if (!$problema)
{
$_SESSION["problema"] = $problema;
$_SESSION["equipe_acionada"] = $equipe_acionada;
$_SESSION["erro"] = 1;
header("location: form_chamado.php");
}
else
{
// A instruo include () inclui e avalia o arquivo especificado
Diviso de Servios Comunidade Centro de Computao Unicamp
42
PHP ntermedirio
include ("funcoes.php");

// Obtm a data da ocorrncia
// data no formato dd/mm/aaaa para exibio
$data_exib = date("d/m/Y");
// data no formato aaaa/mm/dd para ser gravada no banco
$data_chamado = date("Y").'-'.date("m").'-'.date("d");
// Obtm a hora da ocorrncia
$hora_chamado = date("H:i:s");
// Inclui os dados na tabela chamados - Monta a primeira
instruo sql
$instr_sql = "INSERT into chamados (data_chamado, hora_chamado,
usuario, email, problema, equipe_acionada) values
('$data_chamado', '$hora_chamado', '$usuario', '$email',
'$problema', '$equipe_acionada')";
// se a execuo da instruo sql foi OK, recupera os dados para
exibio e para enviar por e-mail
if (pg_query($instr_sql))
{
// Monta a segunda instruo sql
$instr_sql2 = "SELECT num_chamado from chamados where email =
'$email' and data_chamado = '$data_chamado' and hora_chamado =
'$hora_chamado'";
// Executa a segunda instruo sql
$exec_sql2 = pg_query ($instr_sql2) or die ("Erro no acesso
ao banco");
// Utiliza a funo pg_fetch_assoc() para buscar o resultado
de uma linha e coloc-lo numa matriz associativa
$row = pg_fetch_assoc($exec_sql2);
$num_chamado = $row["num_chamado"];
// envia um e-mail para o responsvel pelo atendimento com os
dados do chamado
$var_mail = mail ("cursophp2@bol.com.br", "SRC - Um Novo
Chamado foi Incluido",
"Mais Informaes
Nmero do Chamado: $num_chamado
Data do Chamado: $data_exib
Hora do Chamado: $hora_chamado
Usurio: $usuario
E-mail: $email
Problema: $problema
Equipe Acionada: $equipe_acionada","SRC - Sistema de
Registro de Chamados");
// var_dump ($var_mail);
// exit;
$_SESSION["msg_exib"] = "incluir_chamado_ok";
$_SESSION["data_exib"] = $data_exib;
$_SESSION["hora_chamado"] = $hora_chamado;
$_SESSION["num_chamado"] = $num_chamado;
header("Location: exibe_mensagem.php");
}
// se a execuo da instruo sql deu erro
else
{
$_SESSION["msg_exib"] = "incluir_chamado_erro";
Diviso de Servios Comunidade Centro de Computao Unicamp
43
PHP ntermedirio
header("Location: exibe_mensagem.php");
}
}
?>
e%ibe9$ensage$/p,p
No indicado exibirmos as mensagens finais em um script que acessa banco de
dados, pois se o usurio clicar no boto "atualizar do navegador, o script ser
processado novamente. Por isso, criaremos um script somente para exibir as mensagens
finais. Esse script ser chamado por intermedio da funo header.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("funcoes.php");
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por montar o
menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
/
******************************************************************
**********
Exibe mensagens referentes aos mdulos Incluir Chamado e Incluir
Atendimento
*****************************************************************
***********/
switch ($_SESSION["msg_exib"])
{
case "incluir_chamado_ok":
$data_exib = trim($_SESSION["data_exib"]);
$hora_chamado = trim($_SESSION["hora_chamado"]);
$num_chamado = trim($_SESSION["num_chamado"]);
echo "<BR><BR>
<center> <b><font color=\"#CC0033\"> Processado com
Diviso de Servios Comunidade Centro de Computao Unicamp
44
PHP ntermedirio
Sucesso </font></b></center><BR>
<center>Data: $data_exib</center><BR>
<center>Hora: $hora_chamado</center><BR>
<center>N&uacute;mero do Chamado: $num_chamado
</center><br><br>
<center> <b> <a href=\"form_chamado.php\">Voltar</a>
</b> </center>";
unset($_SESSION["data_exib"]);
unset($_SESSION["hora_chamado"]);
unset($_SESSION["num_chamado"]);
unset($_SESSION["msg_exib"]);
break;
case "incluir_chamado_erro":
echo "<BR><BR>
<center><b><font color=\"#CC0033\"> Erro no
Processamento </font></b></b> </center>
<BR><BR><center> <b> <a
href=\"form_chamado.php\">Voltar</a> </b> </center>";
unset($_SESSION["msg_exib"]);
break;
case "incluir_atendimento_ok":
echo "<BR><BR>
<center><b><font color=\"#CC0033\"> Processado com
Sucesso </font></b></b> </center>
<BR><BR><center> <b> <a
href=\"form_atendimento.php\">Voltar</a> </b> </center>";
unset($_SESSION["msg_exib"]);
break;
case "incluir_atendimento_erro":
echo "<BR><BR>
<center><b><font color=\"#CC0033\"> Erro no
Processamento</font></b></b> </center>
<BR><BR><center> <b> <a
href=\"form_atendimento.php\">Voltar</a> </b> </center>";
unset($_SESSION["msg_exib"]);
break;
}
// Funo definida no script funcoes.php responsvel por montar o
rodap da pgina
monta_rodape();
?>
"estando o $(dulo de incluso de c,a$ados
Dei(e os campos do %ormulrio em ,ranco! Jlique em enviar! Dever e(i,ir uma mensagem de
erro!
.reenc+a os campos do %ormulrio e clique no ,ot'o enviar! Dever e(i,ir a mensagem
K.rocessado com SucessoL$Munto com a data)+ora da inclus'o e o nNmero do c+amado!
Diviso de Servios Comunidade Centro de Computao Unicamp
45
PHP ntermedirio
8<dulo de registro de atendimentos
#or$9atendi$ento/p,p
Este script exibe o formulrio inicial de atendimento, utilizado para obter o nmero do
chamado.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("funcoes.php");
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por montar o
menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
?>

<p><strong><font color="#264989">Registrar
Atendimento</font></strong><br></p>

<?php
// Exibe mensagem de erro caso o formulrio j tenha sido validado
e tenha sido constatado campo em branco
if ($_SESSION["erro_atend"])
{
echo '<BR><strong><font color="#CC0033">
Preencha o n&uacute;mero do
chamado</font></strong><BR><BR>';
unset($_SESSION["erro_atend"]);
}

?>
<!-- Monta os campos do formulrio -->
<form method="post" action="registrar_atendimento.php">
<p><strong>N&uacute;mero do Chamado</strong>:
<input type="text" name="num_chamado" size="10"
maxlength="20"></p><p>
<input type="submit" name="Submit" value="Enviar"></p>
</form>
Diviso de Servios Comunidade Centro de Computao Unicamp
46
PHP ntermedirio
<center> <strong> <a href="pagina_principal.php">Home</a>
</strong> </center></font>
<?php
// Funo definida no script funcoes.php responsvel por montar o
rodap da pgina
monta_rodape();
?>
registrar9atendi$ento/p,p
Esse script recebe o dado do formulrio, faz a consistncia, obtm dados do chamado e
chama o script registrar_atendimento2.php, que vai exibir o formulrio completo de
atendimento.
Saiba mais sobre algumas funes que sero utilizadas no
script a seguir
pg_num_rows: obtem o nmero de registros que retornou do select.
pg_fetch_assoc: obtem os campos do registro que retornou do
select, usando como ndice o nome do campo.
pg_fetch_row: obtem os campos do registro que retornou do select,
da mesma forma que o comando anterior, mas utiliza um ndice
seqencial, comeando do valor zero.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o arquivo especificado
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Recebe os dados do formulrio e guarda em variveis locais
$num_chamado = trim($_POST["num_chamado"]);
// Consiste se nmero do chamado est em branco
if (!$num_chamado)
{
$_SESSION["erro_atend"] = 1;
header("location: form_atendimento.php");
}
else
{
// Monta a instruo sql
Diviso de Servios Comunidade Centro de Computao Unicamp
47
PHP ntermedirio
$instr_sql = "SELECT usuario, email, data_chamado, hora_chamado,
problema, equipe_acionada from chamados where num_chamado =
'$num_chamado'";
// Executa a instruo sql
$exec_sql = pg_query($instr_sql) or die ("Erro no acesso ao
banco");
$achou = pg_num_rows($exec_sql);
// Se encontrou registro, guarda os dados em variveis de sesso
que sero utilizadas no prximo script
if ($achou > 0)
{
$reg = pg_fetch_assoc($exec_sql);
$data_chamado = $reg["data_chamado"];
$_SESSION["hora_chamado"] = $reg["hora_chamado"];
$_SESSION["problema"] = $reg["problema"];
$_SESSION["equipe_acionada"] = $reg["equipe_acionada"];
$_SESSION["usuario"] = $reg["usuario"];
$_SESSION["email"] = $reg["email"];

//Coloca a data do chamado em formato de exibio (de
aaaa-mm-dd para dd/mm/aaaa)
$dt = explode("-",$data_chamado);
$dt2 = mktime(0,0,0,$dt[1],$dt[2],$dt[0]);
$data_exib = date("d/m/Y",$dt2);
$_SESSION["num_chamado"] = $num_chamado;
$_SESSION["data_exib"] = $data_exib;
header("location: registrar_atendimento2.php");
}
// Se no encontrou registro, exibe mensagem
else
{
// A instruo include () inclui e avalia o arquivo
especificado
include ("funcoes.php");
// Funo definida no script funcoes.php responsvel por
montar o cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por
montar o menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
echo '
<BR><BR>
<center> <strong><font
color="#CC0033">N&uacute;mero de chamado n&atilde;o
cadastrado</font></strong></center><BR><BR>
<center> <strong> <a
href="form_atendimento.php">Voltar</a> </strong> </center>
<BR><BR><BR><BR>
</td>
</tr>
</table>';
// Funo definida no script funcoes.php
Diviso de Servios Comunidade Centro de Computao Unicamp
48
PHP ntermedirio
responsvel por montar o rodap da pgina
monta_rodape();
}
}
?>
registrar9atendi$ento:/p,p
Esse script vai exibir os dados do chamado juntamente com o formulrio de
atendimento.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("funcoes.php");
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Guarda dados das variveis de sesso em variveis locais
$num_chamado = $_SESSION["num_chamado"];
$usuario = $_SESSION["usuario"];
$email = $_SESSION["email"];
$data_exib = $_SESSION["data_exib"];
$hora_chamado = $_SESSION["hora_chamado"];
$problema = $_SESSION["problema"];
$equipe_acionada = $_SESSION["equipe_acionada"];
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por montar o
menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
echo '<b><font color="#264989">Registrar
Atendimento</font></b><BR><BR>';

// O bloco condicional a seguir vlido para quando esse script
for chamado pelo registrar_atendimento3.php
if ($_SESSION ["consist"] == 1 || $_SESSION ["consist"] == 2)
{
$dia = trim($_SESSION["dia"]);
$mes = trim($_SESSION["mes"]);
$ano = trim($_SESSION["ano"]);
$responsavel = trim($_SESSION["responsavel"]);
$equipe_responsavel =
Diviso de Servios Comunidade Centro de Computao Unicamp
49
PHP ntermedirio
trim($_SESSION["equipe_responsavel"]);
$solucao = trim($_SESSION["solucao"]);
if ($_SESSION["consist"] == 1)
{
echo ('<BR><b><font color="#CC0033">Campo(s)
obrigatorio(s) nao preenchido(s)</font></b><p>');
unset($_SESSION["consist"]);
}
if ($_SESSION["consist"] == 2)
{
echo ('<BR><BR><b><font color="#CC0033">Data
invalida</font></b><p>');
unset($_SESSION["consist"]);
}
}
// Exibe dados do chamado e monta o formulrio para registrar
atendimento
echo "
<b> Numero do chamado: </b>$num_chamado<BR>
<b> Usuario: </b> $usuario <BR>
<b> E-mail: </b> $email <BR>
<b> Data: </b> $data_exib &nbsp;&nbsp; <BR>
<b> Hora: </b> $hora_chamado <BR>
<b> Problema: </b> $problema <BR>
<b> Equipe acionada: </b> $equipe_acionada <BR><BR><HR>
<form method=post action=registrar_atendimento3.php>
<p><b>Data do Atendimento </b> <BR>(formato dd/mm/aaaa)
<table BORDER width=\"580\" >
<tr>
<td><font face=\"Verdana, Arial, Helvetica, sans-serif\"
size=\"2\">Data :&nbsp;
<input name=\"dia\" type=\"TEXT\" value=\"$dia\"
size=\"2\" maxlength=2 > &nbsp;&nbsp;
<input name=\"mes\" type=\"TEXT\" value=\"$mes\"
size=\"2\" maxlength=2 > &nbsp;&nbsp;
<input name=\"ano\" type=\"TEXT\" value=\"$ano\"
size=\"4\" maxlength=4 >
</font>
</td></tr></table><br>";
// Se a primeira vez que executa o script inicializa o campo,
caso contrrio exibe o contedo do campo
if (!$responsavel)
{
echo '<table width="400">
<tr>
<td>
<b><font face="Verdana, Arial, Helvetica, sans-
serif" size="2">Respons&aacute;vel :</font></b>
<select NAME="responsavel" >
<option value="Paulo">Paulo</option>
<option value="Carlos">Carlos</option>
<option value="Eduardo">Eduardo</option>
<option value="Cristina">Cristina</option>
<option value="Jose">Jose</option>
<option value="Marcos">Marcos</option>
Diviso de Servios Comunidade Centro de Computao Unicamp
50
PHP ntermedirio
<option value="Ricardo">Ricardo</option>
</select>
</td>
</tr>
</table>';
}
else
{
echo "<table width=\"400\">
<tr>
<td>
<b><font face=\"Verdana, Arial, Helvetica, sans-
serif\" size=\"2\">Respons&aacute;vel :</b> $responsavel
</font><br><br>
<input type=\"hidden\" name=\"responsavel\"
value=\"$responsavel\">
</td>
</tr>
</table>";
}
// Se a primeira vez que executa o script inicializa o campo,
caso contrrio exibe o contedo do campo
if (!$equipe_responsavel)
{
echo '<table width="400">
<tr>
<td><b><font face="Verdana, Arial, Helvetica,
sans-serif" size="2">Equipe Respons&aacute;vel:</font></b>
<select NAME="equipe_responsavel">
<option
value="suporte">Suporte</option>
<option
value="conectividade">Conectividade</option>
<option
value="desenvolvimento">Desenvolvimento</option>
<option
value="producao">Producao</option>
</select>
</td>
</tr>
</table>';
}
else
{
echo "<table width=\"400\">
<tr>
<td><b><font face=\"Verdana, Arial,
Helvetica, sans-serif\" size=\"2\">Equipe Respons&aacute;vel:
</b>$equipe_responsavel</font>
<input type=\"hidden\"
name=\"equipe_responsavel\" value=\"$equipe_responsavel\">
</td>
</tr>
</table>";
Diviso de Servios Comunidade Centro de Computao Unicamp
51
PHP ntermedirio
}
// Se a primeira vez que executa o script inicializa o campo,
caso contrrio exibe o contedo do campo
if (!$solucao)
{
echo '<p><b>Solu&ccedil;&atilde;o:</b> <br>
<textarea name="solucao" type=text rows=5
cols=50></textarea>';
}
else
{
echo "<p><b>Solu&ccedil;&atilde;o :</b> $solucao<br>
<input type=\"hidden\" name=\"solucao\"
value=\"$solucao\">";
}
// Passa alguns dados do chamado para o script seguinte por meio
de campos escondidos
echo "<input type=\"hidden\" name=\"num_chamado\"
value=\"$num_chamado\">
<input type=\"hidden\" name=\"email\" value=\"$email\">
<center>
<p>
<input name=\"sub\" type=\"SUBMIT\" value=\"Enviar
Dados\">
<br></font></center>
</form>
";
// Funo definida no script funcoes.php responsvel por montar o
rodap da pgina
monta_rodape();
?>
Saiba mais sobre algumas funes que sero utilizadas no
script a seguir
checkdate: faz consistncia de datas, inclusive checa anos bissextos.
Recebe como parmetros: ms, dia e ano (nessa ordem). Os valores
dos parmetros tem que ser inteiros.
registrar9atendi$ento;/p,p
Esse script vai consistir os campos do formulrio de atendimento, gravar os dados na
tabela 'atendimentos' e enviar uma mensagem com as informaes do atendimento para
o usurio que abriu o chamado.
<?php
// Inicializar a sesso
session_start();
Diviso de Servios Comunidade Centro de Computao Unicamp
52
PHP ntermedirio
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("funcoes.php");
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Recebe os dados do formulrio e guarda em variveis locais
$num_chamado = trim($_POST["num_chamado"]);
$email = trim($_POST["email"]);
$dia = trim($_POST["dia"]);
$mes = trim($_POST["mes"]);
$ano = trim($_POST["ano"]);
$responsavel = trim($_POST["responsavel"]);
$equipe_responsavel = trim($_POST["equipe_responsavel"]);
$solucao = trim($_POST["solucao"]);
// Prepara a data para consistncia
$var_data = checkdate((int)$mes, (int)$dia, (int)$ano);
// Consiste se campos obrigatrios foram preenchidos
if (!$dia || !$mes || !$ano || !$responsavel || !
$equipe_responsavel || !$solucao)
{
$_SESSION["consist"] = 1;
$_SESSION["num_chamado"] = $num_chamado;
$_SESSION["email"] = $email;
$_SESSION["dia"] = $dia;
$_SESSION["mes"] = $mes;
$_SESSION["ano"] = $ano;
$_SESSION["responsavel"] = $responsavel;
$_SESSION["equipe_responsavel"] = $equipe_responsavel;
$_SESSION["solucao"] = $solucao;
header("location: registrar_atendimento2.php");
}
// Consiste data
elseif (!$var_data)
{
$_SESSION["consist"] = 2;
$_SESSION["num_chamado"] = $num_chamado;
$_SESSION["email"] = $email;
$_SESSION["dia"] = $dia;
$_SESSION["mes"] = $mes;
$_SESSION["ano"] = $ano;
$_SESSION["responsavel"] = $responsavel;
$_SESSION["equipe_responsavel"] = $equipe_responsavel;
$_SESSION["solucao"] = $solucao;
header("location: registrar_atendimento2.php");
}
// Se os dados recebidos esto OK
else
{
// Formata a data para ser gravada no banco (aaaa-mm-dd)
Diviso de Servios Comunidade Centro de Computao Unicamp
53
PHP ntermedirio
$data_atendimento = $ano."-".$mes."-".$dia;
// Monta a instruo sql
$instr_sql = "INSERT into atendimentos (num_chamado,
data_atendimento, responsavel, equipe_responsavel, solucao) values
('$num_chamado', '$data_atendimento', '$responsavel',
'$equipe_responsavel', '$solucao')";
// Executa a instruo sql
if (pg_query($instr_sql))
{
// formata a data para exibio (dd/mm/aaaa)
$data_atendimento = $dia."/".$mes."/".$ano;
// Retorna um e-mail para quem abriu o chamado
mail ("$email", "SRC - O chamado $num_chamado foi
atendido",
"Aviso: O chamado $num_chamado foi atendido.
Mais Informaes:
Data do atendimento: $data_atendimento
Responsel: $responsavel
Equipe Responsvel: $equipe_responsavel
Soluo: $solucao","SRC - Sistema de Registro
de Chamados");
$_SESSION["msg_exib"] =
"incluir_atendimento_ok";
header("Location: exibe_mensagem.php");
}
else
{
$_SESSION["msg_exib"] = "incluir_atendimento_erro";
header("Location: exibe_mensagem.php");
}
}
?>
e%ibe9$ensage$/p,p
Para completar o processamento necessrio chamar o script que exibe as
mensagens finais: exibe_mensagem.php (cujo cdigo est descrito nas pginas 42 e 43 ).
"estando o $(dulo de registro de atendi$entos
Dei(e o campo O7Nmero do J+amadoP do %ormulrio em ,ranco! Dever e(i,ir uma mensagem de
erro!
7o campo O7Nmero do J+amadoP do %ormulrio$ digite um nNmero ine(istente! Dever e(i,ir uma
mensagem de erro!
7o campo O7Nmero do J+amadoP do %ormulrio$ digite um nNmero vlido! Dever e(i,ir o
%ormulrio completo para o registro do atendimento!
Diviso de Servios Comunidade Centro de Computao Unicamp
54
PHP ntermedirio
7o %ormulrio completo dei(e os campos o,rigat-rios em ,ranco! Dever e(i,ir uma mensagem
de erro!
7o %ormulrio completo digite datas invlidas no campo OData do atendimentoP! Dever e(i,ir uma
mensagem de erro!
.reenc+a o %ormulrio completo com dados vlidos! Dever e(i,ir a mensagem O.rocessado com
sucessoP!
8<dulo de consulta
consulta9c,a$ados9periodo/p,p
Este script exibe o formulrio de consulta, que pede um intervalo de datas.
<?php
// Inicializar a sesso
session_start();
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("funcoes.php");
include ("misc.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Funo definida no script funcoes.php responsvel por montar o
cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por montar o
menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
?>

<b>Consulta chamados ocorridos num determinado per&iacute;odo</b>

<?php
// Exibe mensagem de erro caso o formulrio j tenha sido
validado e tenha sido constatado alguma data invlida
if ($_SESSION["consist"] == 1)
{
$dia_ini = trim($_SESSION["dia_ini"]);
$mes_ini = trim($_SESSION["mes_ini"]);
$ano_ini = trim($_SESSION["ano_ini"]);
$dia_fim = trim($_SESSION["dia_fim"]);
Diviso de Servios Comunidade Centro de Computao Unicamp
55
PHP ntermedirio
$mes_fim = trim($_SESSION["mes_fim"]);
$ano_fim = trim($_SESSION["ano_fim"]);
echo ('<BR><BR><b><font color="#CC0033">Data(s)
inv&aacute;lidas(s)</font></b>');
unset($_SESSION["consist"]);
}
?>
<form method="post" action="consulta_chamados_periodo2.php">
<p>
<b> Entre com o per&iacute;odo: </b><BR><BR>
<b>De:</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dia

<?php
// Monta os campos do formulrio
echo ("
<input name=\"dia_ini\" type=\"TEXT\" size=2 maxlength=2
value=\"$dia_ini\"> &nbsp;&nbsp;&nbsp;m&ecirc;s
<input name=\"mes_ini\" type=\"TEXT\" size=2 maxlength=2
value=\"$mes_ini\"> &nbsp;&nbsp;&nbsp;ano
<input name=\"ano_ini\" type=\"TEXT\" size=4 maxlength=4
value=\"$ano_ini\"><BR><BR>
<b>At&eacute;:</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dia
<input name=\"dia_fim\" type=\"TEXT\" size=2 maxlength=2
value=\"$dia_fim\"> &nbsp;&nbsp;&nbsp;m&ecirc;s
<input name=\"mes_fim\" type=\"TEXT\" size=2 maxlength=2
value=\"$mes_fim\"> &nbsp;&nbsp;&nbsp;ano
<input name=\"ano_fim\" type=\"TEXT\" size=4 maxlength=4
value=\"$ano_fim\">
");
?>

</p>
<center><p>
<input name="sub" type="SUBMIT" value="Enviar Dados">
<br>
</center>
<?php
// Funo definida no script funcoes.php responsvel por montar o
rodap da pgina
monta_rodape();
?>
consulta9c,a$ados9periodo:/p,p
Este script consiste os campos recebidos do formulrio, faz uma consulta s tabelas
'chamados' e 'atendimentos' e exibe os dados obtidos.
<?php
// Inicializar a sesso
session_start();
Diviso de Servios Comunidade Centro de Computao Unicamp
56
PHP ntermedirio
// A instruo include () inclui e avalia o(s) arquivo(s)
especificado(s)
include ("misc.php");
include ("funcoes.php");
// Funo que verifica se o usurio se autenticou antes de acessar
essa pgina
ver_session();
// Recebe os dados do formulrio e guarda em variveis locais
$dia_ini = trim($_POST["dia_ini"]);
$mes_ini = trim($_POST["mes_ini"]);
$ano_ini = trim($_POST["ano_ini"]);
$dia_fim = trim($_POST["dia_fim"]);
$mes_fim = trim($_POST["mes_fim"]);
$ano_fim = trim($_POST["ano_fim"]);
// Checa se a data de inicio e data de fim so vlidas
$var_data_ini = checkdate((int)$mes_ini, (int)$dia_ini, (int)
$ano_ini);
$var_data_fim = checkdate((int)$mes_fim, (int)$dia_fim, (int)
$ano_fim);
// Consiste as datas de incio e de fim
if (!$var_data_ini || !$var_data_fim)
{
$_SESSION["consist"] = 1;
$_SESSION["dia_ini"] = $dia_ini;
$_SESSION["mes_ini"] = $mes_ini;
$_SESSION["ano_ini"] = $ano_ini;
$_SESSION["dia_fim"] = $dia_fim;
$_SESSION["mes_fim"] = $mes_fim;
$_SESSION["ano_fim"] = $ano_fim;
// Funo header chama outro script sem retornar para o script
chamador
header("location: consulta_chamados_periodo.php");
}
// converte as datas para o formato Unix/timestamp para compar-
las entre si
$data_ini = mktime(0,0,0,$mes_ini,$dia_ini,$ano_ini);
$data_fim = mktime(0,0,0,$mes_fim,$dia_fim,$ano_fim);
// Compara as datas de incio e de fim
if ($data_ini > $data_fim)
{
$_SESSION["consist"] = 1;
$_SESSION["dia_ini"] = $dia_ini;
$_SESSION["mes_ini"] = $mes_ini;
$_SESSION["ano_ini"] = $ano_ini;
$_SESSION["dia_fim"] = $dia_fim;
$_SESSION["mes_fim"] = $mes_fim;
$_SESSION["ano_fim"] = $ano_fim;
// Funo header chama outro script sem retornar para o
script chamador
header("location: consulta_chamados_periodo.php");
Diviso de Servios Comunidade Centro de Computao Unicamp
57
PHP ntermedirio
}
else
{
//adiciona um zero a esquerda nos valores de 1 a 9
//se for digitado 1 nos campos dia ou ms,transforma para 01
$dia_ini = strftime("%d",$data_ini);
$mes_ini = strftime("%m",$data_ini);
$ano_ini = strftime("%Y",$data_ini);
$dia_fim = strftime("%d",$data_fim);
$mes_fim = strftime("%m",$data_fim);
$ano_fim = strftime("%Y",$data_fim);
//Converte as datas para o formato aaaa-mm-dd
$data_ini = $ano_ini."-".$mes_ini."-".$dia_ini;
$data_fim = $ano_fim."-".$mes_fim."-".$dia_fim;

//Converte as datas para o formato dd/mm/aaaa
$data_ini_exib = $dia_ini."/".$mes_ini."/".$ano_ini;
$data_fim_exib = $dia_fim."/".$mes_fim."/".$ano_fim;
// Monta a primeira instruo sql
$instr_sql = "SELECT num_chamado, data_chamado,
hora_chamado, usuario, email, problema, equipe_acionada from
chamados where data_chamado >= '$data_ini' and
data_chamado <= '$data_fim' order by
num_chamado";

// Executa a instruo sql e verifica se encontrou algum
registro
$exec_sql = pg_query($instr_sql) or die ("Erro no acesso ao
banco");
$achou = pg_num_rows($exec_sql);
// Se encontrou, guarda as variaveis
if ($achou > 0)
{
// Funo definida no script funcoes.php responsvel por
montar o cabealho da pgina
monta_cabecalho();
echo "<div id='conteudo'><BR>
<font color=\"#264989\"><b>Consulta chamados
ocorridos no per&iacute;odo de $data_ini_exib a
$data_fim_exib</b></font>
<br><a
href=\"consulta_chamados_periodo.php\"><b>Voltar</b></a>
";
// Executa enquanto houverem chamados
while ($reg = pg_fetch_assoc($exec_sql))
{
$num_chamado = $reg["num_chamado"];
$data_chamado = $reg["data_chamado"];
$hora_chamado = $reg["hora_chamado"];
$usuario = $reg["usuario"];
$email = $reg["email"];
$problema = $reg["problema"];
$equipe_acionada = $reg["equipe_acionada"];
Diviso de Servios Comunidade Centro de Computao Unicamp
58
PHP ntermedirio
//Transforma a data do chamado obtida do banco
para formato de exibio (de aaaa-mm-dd para dd/mm/aaaa)
//utiliza as funces explode (retorna uma matriz
de strings), mktime (converte a data para o formato
Unix/timestamp)
//e date (formata a data)
$dt = explode("-",$data_chamado);
$dt2 = mktime(0,0,0,$dt[1],$dt[2],$dt[0]);
$data_chamado_exib = date("d/m/Y",$dt2);
//Exibe os dados do chamado
echo "<BR>
<HR><BR>
<b>N&uacute;mero do chamado: </b>
$num_chamado <BR><BR>
<b> Data do chamado: </b> $data_chamado_exib
<BR>
<b> Hora do chamado: </b> $hora_chamado <BR>
<b> Usu&aacute;rio: </b> $usuario <BR>
<b> E-mail: </b> $email <BR>
<b> Problema: </b> $problema <BR>
<b> Equipe acionada: </b> $equipe_acionada
<BR>
";
// Monta a segunda instruo sql
$instr_sql2 = "SELECT data_atendimento, responsavel,
equipe_responsavel, solucao from atendimentos where num_chamado =
'$num_chamado'";
// Executa a instruo sql e verifica se encontrou
algum registro
$exec_sql2 = pg_query($instr_sql2) or die ("Erro no
acesso ao banco");
$achou2 = pg_num_rows($exec_sql2);
// Se encontrou, guarda as variaveis
if ($achou2 > 0)
{
echo "
<BR> <b>Atendimento</b> <BR><BR>
";
//Executa enquanto houverem atendimentos
// Utiliza a funo pg_fetch_row que retorna
uma linha como um array enumerado
while ($row2 = pg_fetch_row ($exec_sql2))
{
$data_atendimento = $row2[0];
$responsavel = $row2[1];
$equipe_responsavel = $row2[2];
$solucao = $row2[3];
$dt_at = explode("-",
$data_atendimento);
$dt_at2 =
mktime(0,0,0,$dt_at[1],$dt_at[2],$dt_at[0]);
Diviso de Servios Comunidade Centro de Computao Unicamp
59
PHP ntermedirio
$data_atendimento_exib =
date("d/m/Y",$dt_at2);
//Exibe os dados do atendimento
echo "<b> Data do Atendimento:
</b> $data_atendimento_exib <BR>
<b> Respons&aacute;vel:
</b> $responsavel <BR>
<b> Equipe respons&aacute;vel:
</b> $equipe_responsavel <BR>
<b> Solu&ccedil;&atilde;o: </b>
$solucao <BR><BR>";
}
}
// Se no encontrou nenhum atendimento para esse
chamado exibe mensagem
else
{
echo '<BR> Obs: At&eacute; o momento, nenhum
atendimento foi registrado para esse chamado. ';
}
}
echo "<b><a
href=\"consulta_chamados_periodo.php\"><BR><BR> Voltar</a></b>";
}
// Se no encontrou nenhum chamado para esse perodo
else
{
// Funo definida no script funcoes.php responsvel por
montar o cabealho da pgina
monta_cabecalho();
// Funo definida no script funcoes.php responsvel por
montar o menu lateral da pgina, recebe parmetros
monta_menu($_SESSION["usuario_sys"],
$_SESSION["tipo_usuario_sys"]);
// Exibe mensagem
echo ' <BR><BR>
<center> <font color="#CC0033"> <b> N&atilde;o
existem chamados para esse per&iacute;odo. </b> </font>
</center><BR><BR>
<center> <b> <a
href="consulta_chamados_periodo.php">Voltar</a> </b> </center>
<BR><BR><BR><BR>';
}
// Funo definida no script funcoes.php responsvel por
montar o rodap da pgina
monta_rodape();
}
?>
"estando o $(dulo de consulta
Dei(e os campos o,rigat-rios do %ormulrio em ,ranco! Dever e(i,ir uma mensagem
Diviso de Servios Comunidade Centro de Computao Unicamp
60
PHP ntermedirio
de erro!
Digite datas invlidas! Dever e(i,ir uma mensagem de erro!
Digite um intervalo de datas vlido! Dever e(i,ir os dados resultantes da consulta!
$x#ira!7o de sess7o
logout/p,p
Este script far a expirao da sesso quando o usurio sair do sistema:
<?php
// Inicializar a sesso
session_start();
//Libera todas as variveis de sesso
session_unset();
//Destri todos os dados registrados em uma sesso
session_destroy();
//Retorna para a pgina de autenticao
header("Location: index.php");
?>
$xerc(cios com#lementares
1) Fazer um script que altere o campo tipo_usuario do usuario3 na tabela de
usurios: alterar de user2normal para user2atend. A sintaxe do comando sql
para fazer a alterao de registros na tabela a seguinte:
"UPDATE usuarios SET tipo_usuario='$variavel' WHERE login='usuario3'"
2) Fazer um script que exclua o registro referente ao usuario3 da tabela de usurios.
A sintaxe do comando sql para fazer a excluso a seguinte:
"DELETE from usuarios where login = '$variavel'"
Diviso de Servios Comunidade Centro de Computao Unicamp
61
PHP ntermedirio
9icas
9ocumenta!7o Oicial do PHP
http://www.php.net
=onsulta a dicas e artigos do site PHP Brasil
http://www.phpbrasil.com
Para mais inorma!"es sobre o PostgreS;L> consulte o site)
http://www.commandprompt.com/ppbook/
Diviso de Servios Comunidade Centro de Computao Unicamp
62

Você também pode gostar