Sunteți pe pagina 1din 47

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
Sesses ........................................................................................................... Upload de Arquivos ........................ ................................................................ Manipulao de Data e Hora ............................................................. Enviando E-mails ............................................................................................. Projeto Base de dados e tabelas ....................................................... Funes utilizadas no sistema ................................................................ Pgina inicial/autenticao do sistema ............................ O script autentica_src.php e a homepage do sistema Mdulo de Incluso de Chamados .......................................................... Mdulo de Registro de Atendimentos ...................................................... Mdulo de Consulta ................................................................................ Expirao de sesso ............................................................................... Referncia bibliogrfica ..................................................................................... 4 7 10 16 17 18 20 22 24 30 40 46 47

ltima atualizao em 29/07/2004

PHP Intermedirio

Sesses
Este recurso, que foi implementado na verso 4 do PHP, muito til para quem trabalha com scripts que necessitam passar dados em acessos subsequentes 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:

<?php session_start(); ?>

Quando esta pgina for carregada, a sesso ser inicializada e a ID da sesso ficar gravada em um cookie chamado PHPSESSID dentro do navegador. Esta sesso ser vlida enquanto o navegador estiver aberto ou enquanto a funo session_destroy() no for executada.

Diviso de Servios Comunidade Centro de Computao Unicamp

PHP Intermedirio

Para visualizarmos a ID da sesso corrente, utilizamos a funo session_id(), como mostra o exemplo abaixo:

<?php session_start(); $id_sess = session_id(); echo "A ID da sesso corrente ====> <b>$id_sess</b>"; ?>

Superglobal $_SESSION

Adicionar valores em uma sesso uma tarefa muito simples, e para isso, utilizaremos a superglobal $_SESSION, como mostra o exemplo abaixo:

<?php session_start(); $_SESSION["curso"] = "PHP Intermedirio"; $teste = "Teste de Sesses!" $_SESSION["teste"] = $teste; ?>

OBS: Em verses anteriores ao PHP 4.2.x, ou se a flag register_globals estiver habilitada (desabilitada por padro), necessrio adicionar variveis em verses atravs da funo session_register(), mas por questes de segurana, indicado permanecer com a configurao padro, que utiliza a superglobal $_SESSION.

Diviso de Servios Comunidade Centro de Computao Unicamp

PHP Intermedirio

Atribuir os valores de uma sesso para variveis globais ou locais tambm uma tarefa simples:

<?php session_start(); $curso = $_SESSION["curso"]; $teste = $_SESSION["teste"]; ?>

Os ltimos dois recursos que sero apresentados para manipular sesses so: session_unset() - Limpa todas as variveis da sesso corrente. session_destroy() - Finaliza a sesso corrente.

Utiliza-se estas duas funes no final do uso da sesso, que consequentemente expira o cookie PHPSESSID no navegador, finalizando a sesso corrente. O cdigo PHP para este fim apresentado no exemplo abaixo:

session_unset(); session_destroy();

Diviso de Servios Comunidade Centro de Computao Unicamp

PHP Intermedirio

Upload de Arquivos
O PHP capaz de receber o upload de qualquer navegador que siga a norma RFC-1867. Isto 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:

<form enctype="multipart/form-data" action="_URL_" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> Send this file: <input name="arquivo" type="file"> <input type="submit" value="Enviar Arquivo"> </form>

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_FILE_SIZE, 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:

A varivel $_FILES

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'] $_FILES['arquivo']['type']

o nome original do arquivo no computador do usurio. o MIME type do arquivo, se o navegador deu esta informao: ex. image/gif o tamanho em bytes do arquivo

$_FILES['arquivo']['size']

$_FILES['arquivo']['tmp_name'] guardado no servidor.

o nome temporrio do arquivo, como foi

Diviso de Servios Comunidade Centro de Computao Unicamp

PHP Intermedirio

$_FILES['arquivo']['error']

o cdigo de erro associado a este upload de arquivo. Adicionado no PHP 4.2.0

Os cdigos de erro que o item $_FILES['arquivo']['error'] pode retornar so:

UPLOAD_ERR_OK

no ouve erro, o upload foi bem sucedido O arquivo no upload maior do que o limite definido em upload_max_filesize no php.ini O arquivo ultrapassa o limite de MAX_FILE_SIZE que foi especificado no formulrio HTML O upload do arquivo foi feito parcialmente No foi feito upload do arquivo

UPLAOD_ERR_INI_SIZE

UPLOAD_ERR_FORM_SIZE

UPLOAD_ERR_PARTIAL UPLOAD_ERR_NO_FILE

3 4

A funo 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 move_uploaded_file, a qual descreveremos a seguir:

Diviso de Servios Comunidade Centro de Computao Unicamp

PHP Intermedirio

move_uploaded_file() - Esta funo ir mover um arquivo carregado pelo mecanismo do PHP de HTTP POST para uma nova localizao. Sua sintaxe :

move_uploaded_file(string nome do arquivo, string destino);

OBS: O diretrio de destino deve ter permisso de escrita para o PHP.

Abaixo, um exemplo de um script PHP que receber os dados do mtodo POST para realizar o upload:

<?php $uploaddir = '/usr/local/apache/htdocs/curso_php/upload_arq/'; $uploadfile = $uploaddir. $_FILES['userfile']['name']; print "<pre>"; if ($_FILES['userfile']['size'] != 0) { if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) { print "O arquivo valido e foi carregado com sucesso. Aqui esta alguma informao:\n"; print_r($_FILES); } else { print "Possivel ataque de upload! Aqui esta alguma informao:\n"; print_r($_FILES); } } else { print "Possivel ataque de upload! Aqui esta alguma informao:\n"; print_r($_FILES); }

print "</pre>"; ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

PHP Intermedirio

Manipulao de Data 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: o o o o o mktime() strftime() date() checkdate() getdate()

mktime() - retorna uma data com o formato Unix/timestamp: 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():

$e = mktime(13,23,32,12,21,2003); echo strftime("Data de Hoje: %d/%m/%Y - %T",$e);

Sada:

Data de Hoje: 21/12/2003 - 13:23:22

Diviso de Servios Comunidade Centro de Computao Unicamp

10

PHP Intermedirio

strftime() - formata uma data do tipo Unix/timestamp para uma string de apresentao: Sintaxe: strftime(string formatao, int timestamp);

$data = mktime(0,0,0,12,21,2003); echo strftime("Data: %d-%m-%Y",$data);

Uma lista das principais opes para esta funo encontra-se na listagem abaixo:

%d %m %y %Y %H %I %M %S %R %x %X

dia do ms (01 a 31) ms (01 a 12) ano com 2 dgitos (ex. 80, 03) ano com 4 dgitos (ex. 1980, 2003) hora atual no formato 24 horas (00 a 23) hora atual no formato 12 horas (01 a 12) minuto atual (00 a 59) segundo atual (00 a 59) hora no formato 24 horas (22:45) data sem mostrar a hora do formato Unix/timestamp (ex. 21/12/2003) horrio sem mostrar a data do formato Unix/timestamp (ex. 19:33)

Diviso de Servios Comunidade Centro de Computao Unicamp

11

PHP Intermedirio

%U

retorna o nmero da semana do ano atual

date() - retorna uma data formatada como uma string ou inteiro de acordo com as opes passadas como parmetro. Uma lista das principais opes para esta funo encontra-se abaixo:

representao numrica do dia do ms, incluindo o 0 (zero), nos dias de 0 a 9: (01 a 31) representao numrica do dia do ms, sem o 0 (zero) nos dias de 1 a 9: (1 a 31) representao numrica do ms, incluindo o 0 (zero) nos meses de 1 a 9: (01 a 12) representao numrica do ms, sem o 0 (zero) nos meses de 1 a 9: (1 a 12) representao textual do ms: (Janeiro a Dezembro)

F T (min) y (min) Y (mai) I

retorna o nmero de dias que o ms contm: (ex. 28, 29, 30 ou 31) representao numrica do ano, com 4 dgitos (ex. 1980, 2003) representao numrica do ano, com 2 dgitos; (ex. 80, 03)

representao textual do dia da semana: (ex. Domingo a Sbado)

Diviso de Servios Comunidade Centro de Computao Unicamp

12

PHP Intermedirio

w (min)

representao numrica do dia da semana: (0 para Domingo e 6 para Sbado) representao numrica da semana no ano atual: (ex. 40) representao numrica do dia do ano: (0 a 365)

W (mai) Z

retorna verdadeiro se o ano bissexto, caso contrrio, retorna falso: 0 - no bissexto 1 - bissexto

G H (min)

retorna a hora atual no formato 12 horas:

(1 a 12)

retorna a hora atual no formato 12 horas, incluindo o 0 (zero) nas horas de 1 a 9: (01 a 12) retorna a hora atual no formato 24 horas: (0 a 23) retorna a hora atual no formato 24 horas, incluindo o 0 (zero) nas horas de 1 a 9: (00 a 23)

I (min) S (min)

retorna o minuto atual: (00 a 59) retorna o segundo atual: (00 a 59)

Diviso de Servios Comunidade Centro de Computao Unicamp

13

PHP Intermedirio

checkdate() - verifica se a data passada vlida, retorna verdadeiro ou falso: Sintaxe: checkdate(int dia, int mes, int ano);

$a = checkdate(11,02,1980); if ($a) { echo "Data Correta<p>"; } else { echo "<font color=\"red\">Data Incorreta</font><p>"; }

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

Diviso de Servios Comunidade Centro de Computao Unicamp

14

PHP Intermedirio

A lista dos itens mais importantes deste array retornado encontra-se abaixo: "seconds" "minutes" "hour" "mday" "wday" retorna os segundos (0 a 59) retorna os minutos (0 a 59) retorna as horas (0 a 23) retorna o dia do ms (1 a 31) retorna a representao numrica do dia da semana (0 para Domingo e 6 para Sbado) retorna a representao numrica do ms atual (1 a 12) retorna a representao numrica do anual atual (2003) retorna a representao numrica do dia do ano (1 a 365) representao textual do dia da semana (Domingo a Sbado) representao textual do ms atual (Janeiro a Dezembro)

"mon" "year" "yday" "weekday" "month"

Diviso de Servios Comunidade Centro de Computao Unicamp

15

PHP Intermedirio

Enviando e-mails
Para enviar e-mails a partir de scripts PHP, necessrio que o servidor tenha instalado um aplicativo servidor de correio eletrnico, que normalmente pode ser o SendMail, Postix, QMail, ou qualquer outro que possa realizar esta funo. No arquivo de configurao php.ini necessrio alterar o valor da diretiva chamado sendmail_path, onde ser colocado o PATH do executvel do aplicativo servidor de correio eletrnico. No nosso exemplo, vamos utilizar o SendMail, e o valor da diretiva ficaria como est apresentado abaixo: sendmail_path = /usr/lib/sendmail -t -i

A seguir, temos dois exemplos de como podemos enviar emails a partir do PHP: Ex 1:
mail("santos@ccuec.unicamp.br", "My Subject", "Line 1\nLine 2\nLine 3");

Ex. 2:
$assunto = "#ID do Usurio#"; $para = "Fabio Santos <santos@ccuec.unicamp.br>, Fabio Yahoo! <santos@yahoo.com.br>"; $remetente = "Webmaster Mangue <santos@ccuec.unicamp.br>"; $mensagem = "Sua socilitao foi encaminhada para os responsveis, por favor, aguarde o retorno dos tcnicos!!!"; $headers = "To: ".$para."\r\n"; $headers .= "From: ".$remetente."\r\n"; $headers .= "Cc: ".$remetente."\r\n"; $headers .= "Bcc: ".$remetente."\r\n"; mail($para,$assunto,$mensagem,$headers);

Diviso de Servios Comunidade Centro de Computao Unicamp

16

PHP Intermedirio

Projeto
O projeto consiste no desenvolvimento de um sistema (SRC Sistema de Registro de Chamados) que tem como objetivo registrar chamados de usurios para uma equipe de tcnicos de planto e o conseqente atendimento desses chamados. Tambm vai disponibilizar uma consulta geral a partir dos dados armazenados. Todos os scripts ficaro armazenados no diretrio de publicao do servidor web Apache, que no nosso caso ,encontra-se em: /usr/local/apache/htdocs/cursophp. Inicialmente, vamos nos certificar de que o servidor web Apache e o servidor de banco de dados PostgreSQL foram inicializados: Inicializar o servidor Apache: /usr/local/apache/bin/apachectl start Ativar e inicializar o PostgreSQL: o su postgres o pg_ctl start

1 - Base de dados e tabelas


O sistema utilizar o servidor de banco de dados PostgreSQL, no qual foi criada a base de dados cursophp, contendo as seguintes tabelas: chamados num_chamado integer primary key serial not null, data_chamado date not null, hora_chamado time not null, usuario varchar(40) not null, email varchar(40) not null, problema text not null, equipe_acionada varchar(40) not null atendimentos num_chamado integer not null, data_atendimento date not null, responsavel varchar(40) not null, equipe_responsavel varchar(40) not null, solucao text not null usuarios login varchar(20) not null, senha varchar(10) not null, nome varchar(40) not null, email varchar(40) not null, tipo_usuario varchar(20) not null

Diviso de Servios Comunidade Centro de Computao Unicamp

17

PHP Intermedirio

2 Funes utilizadas no sistema


Os scripts funes.php e misc.php contero as funes mais utilizadas no sistema, so elas: monta_cabecalho, monta_menu, monta_rodape e ver_session . Ser necessrio incluir os comandos include ("funcoes.php") e include ("misc.php") em todos os scripts que chamarem essas funes.

funcoes.php
<?php function monta_cabecalho() { echo (' <html> <head> <title>SRC</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#663399" alink="#CC0000" topmargin="1"> <table width="760" border="0" cellspacing="0"> <tr> <td><img src="imagens/topo.jpg" width="760" height="57"></td> </tr> </table> '); } function monta_menu($login,$tip_us) { echo (" <td width=\"150\" valign=\"top\" bgcolor=\"#FFFFFF\" background=\"imagens/fundo.jpg\"> <br> <table width=\"135\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td valign=\"top\"> <p><font size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\"> Login: <b>$login</b> <br><br> <br> <br> <a href=\"form_chamado.php\">Incluir Chamado</a><br> <br> "); if(trim($tip_us) == "user_atend") { echo(" <br> <a href=\"form_atendimento.php\">Registrar Atendimento</a><br> <br> "); }

Diviso de Servios Comunidade Centro de Computao Unicamp

18

PHP Intermedirio

echo(" <br> <a href=\"consulta_chamados_por_per.php\">Consultar Chamados por Perodo </a><br> <br> <br> <a href=\"pagina_principal.php\">Pgina Inicial </a><br> <br> <br> <br> <a href=\"logout.php\">Logout </a><br> <br> <br> </font> </p> </td> </tr> </table> </td> "); } function monta_rodape() { echo (' <table width="760" border="0" cellspacing="0" cellpadding="0"> <tr> <td><img src="imagens/rodape.jpg" width="760" height="18"></td> </tr> </table> </body> </html> '); } ?>

Misc.php
<?php session_start(); function ver_session() { if (!$_SESSION["usuario_sys"]) { monta_cabecalho(); echo "<br><br><p><font size=\"1\" face=\"Verdana, Arial,

Diviso de Servios Comunidade Centro de Computao Unicamp

19

PHP Intermedirio

Helvetica, sans-serif\">No permitido acessar esta rea antes de prvia autenticao!!<p><b><a href=\"index.php\">Pgina Principal</a></b></font>"; monta_rodape(); die(); } } // Realiza a conexo com o banco de dados PGSQL pg_connect("host=localhost dbname=cursophp user=user_curso password=cursophp") or die("Erro ao conectar ao banco de dados"); ?>

3 Pgina inicial/autenticao do sistema


A pgina de autenticao do sistema (index.php) ter o seguinte cdigo:

3.1) index.php
<?php include ("funcoes.php"); monta_cabecalho(); ?> <table width="760" border="0" cellspacing="0"> <tr> <td width="610" valign="top"><br> <form action="autentica_src.php" method="post"> <table width="550" border="0" cellspacing="0" align="center"> <tr valign="top"> <td align="center"> <BR><font face="Verdana, Arial, Helvetica, sansserif" size="2"><b><font color="#264989">Autenticao</font></b></font></td> </tr> <tr valign="top" heigth="3"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td align="center"> <?php if (isset($_GET["erro_aut"])) { echo (" <table align=center>

Diviso de Servios Comunidade Centro de Computao Unicamp

20

PHP Intermedirio

<tr> <td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"red\">Usurio ou senha invlidos!</font></td> </tr> <tr valign=\"top\" heigth=\"3\"> <td> <BR> &nbsp; </td> </tr> </table> "); } ?> <table> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usurio: </font></td><td><input type="text" name="usuario" size="20"></td> </tr> <tr valign="top"> <td><font face="Verdana, Arial, Helvetica, sansserif" size="2">Senha: </font></td><td><input type="password" name="senha" size="20"></td> </tr> <tr valign="top"> <td><input type="submit" name="submit" size="20" value=" Autenticar "></td><td>&nbsp;</td> </tr> </table> </tr> <tr valign="top" heigth="5"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> </table> </form> </td> </tr> </table> <?php monta_rodape(); ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

21

PHP Intermedirio

4 O script autentica_src.php e a homepage do sistema


Este script realiza a autenticao do usurio no sistema:

4.1) autentica_src.php
<?php session_start(); include("misc.php"); include("funcoes.php"); $log_user = $_POST["usuario"]; $sen_user = $_POST["senha"]; $instr_sql = "select email, tipo_usuario from usuarios where login='$log_user' and senha='$sen_user'"; $query = pg_query($instr_sql); $reg_user_aut = pg_fetch_assoc($query); if ($reg_user_aut) { $_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); header("Location: pagina_principal.php"); } else { header("Location: index.php?erro_aut=1"); } ?>

4.2) Script pagina_principal.php


Esta pgina aparecer aps o usurio realizar a sua autenticao no sistema:
<?php session_start(); include ("misc.php"); include ("funcoes.php"); ver_session(); monta_cabecalho();

Diviso de Servios Comunidade Centro de Computao Unicamp

22

PHP Intermedirio

?> <table width="760" border="0" cellspacing="0"> <tr> <?php monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); ?> <td width="610" valign="top"><br> <table width="550" border="0" cellspacing="0" align="center"> <tr valign="top"> <td> <BR><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#264989">Objetivo </font></b></font></td> </tr> <tr valign="top"> <td><BR><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Esse sistema registra e armazena informaes referentes a chamados feitos pelos usurios e atendimentos realizados pela equipe de planto. Tambm disponibiliza a consulta dos dados armazenados.</font></td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> <tr valign="top"> <td> <BR> &nbsp; </td> </tr> </table> </td> </tr> </table> <?php monta_rodape(); ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

23

PHP Intermedirio

5 - Mdulo de incluso de chamados 5.1) Script form_chamado.php


Esse script cria o formulrio que receber os dados do chamado e ter o seguinte cdigo:
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session(); monta_cabecalho(); ?> <table width="760" border="0" cellspacing="0"> <tr> <?php monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); ?> <td width="610" valign="top"><br> <table width="550" border="0" cellspacing="0" align="center"> <tr valign="top"> <td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#264989">Incluir Chamado </font></b></font> <?php if ($_SESSION["erro"] == 1) { echo ('<BR><BR><font size="2" face="Verdana, Arial, Helvetica, sansserif" color="#CC0033"><b>Campos Obrigatrios no Preenchidos</b></font><BR>'); $problema = trim($_SESSION["problema"]); $equipe_acionada = trim($_SESSION["equipe_acionada"]); $_SESSION["erro"] = 0; } ?> <FORM method=post action=incluir_chamado.php> <P><FONT FACE="Arial,Helvetica"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Usu&aacute;rio:</b></font><FONT SIZE=-1>&nbsp;<?php echo $_SESSION["usuario_sys"]; ?><font face="Verdana, Arial, Helvetica, sans-serif"> <font size="3">&nbsp;&nbsp;</font></font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><br><br> <b>E-mail :</b></font>&nbsp; <font face="Verdana, Arial, Helvetica, sansserif"><font size="2"><?php echo $_SESSION["email_usuario_sys"]; ?></font></font></FONT></FONT> <?php

Diviso de Servios Comunidade Centro de Computao Unicamp

24

PHP Intermedirio

if (empty($problema)) { echo ('<P><font size="2" face="Verdana, Arial, Helvetica, sansserif"><b>Descrio do Problema: </b></font> <font face="Verdana, Arial, Helvetica, sans-serif" size="3"><BR> <TEXTAREA name="problema" type=text rows=3 cols=40></TEXTAREA> </font><BR><BR> '); } else { echo ("<P><font size=\"2\" face=\"Verdana, Arial, Helvetica, sansserif\"><b>Descrio do Problema: </b>$problema</font> <input type=\"hidden\" name=\"problema\" value=\"$problema\"> "); } if (empty($equipe_acionada)) { echo ('<P><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Equipe Acionada :</b>&nbsp;<font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <select name="equipe_acionada"> <option>Suporte</option> <option>Conectividade</option> <option>Desenvolvimento</option> <option>Produ&ccedil;&atilde;o</option> </select> </font></FONT><BR> '); } else { echo ("<P><font size=\"2\" face=\"Verdana, Arial, Helvetica, sansserif\"><b>Equipe Acionada: </b>$equipe_acionada</font> <input type=\"hidden\" name=\"equipe_acionada\" value=\"$equipe_acionada\"><BR> "); } ?> &nbsp;<BR> &nbsp; <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <INPUT name="sub" type="SUBMIT" value="Enviar Dados"></font> </form> </td> </tr> </table></td> </tr> </table> <?php monta_rodape(); ?>

5.2) Script incluir_chamado.php


Esse script vai receber os dados enviados pelo formulrio, vai fazer a consistncia e gravar esses dados na tabela chamados.

Diviso de Servios Comunidade Centro de Computao Unicamp

25

PHP Intermedirio

Esse script utiliza a funo mail, passando como parmetros destinatrio, assunto, corpo da mensagem e cabealhos adicionais. Saiba mais sobre algumas funes utilizadas no script a seguir 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. mail: envia mensagens por e-mail de acordo com os parmetros utilizados. rawurlencode: trata caracteres especiais de uma varivel que vai ser enviada pela URL. or die: expresso que pode ser usada como uma alternativa para o if/else.

<?php session_start(); include ("misc.php"); ver_session(); // Recebe variveis globais $usuario = $_SESSION["usuario_sys"]; $email = $_SESSION["email_usuario_sys"]; $problema = trim($_POST["problema"]); $equipe_acionada = trim($_POST["equipe_acionada"]); // Consiste campos if (empty($problema)) { $_SESSION[problema] = $problema; $_SESSION[equipe_acionada] = $equipe_acionada; $_SESSION[erro] = 1; header("location: form_chamado.php"); } else { include ("funcoes.php");

Diviso de Servios Comunidade Centro de Computao Unicamp

26

PHP Intermedirio

// Obtm data // data para exibio no formato dd/mm/aaaa $data_exib = date("d/m/Y"); // data para ser gravada no banco no formato aaaa/mm/dd $data_chamado = date("Y").'-'.date("m").'-'.date("d"); // Obtm data e hora da ocorrncia $hora_chamado = date("H:i:s"); // Inclui os dados na tabela acionamentos // Declarao SQL $declar = "INSERT into chamados values (DEFAULT,'$data_chamado', '$hora_chamado', '$usuario', '$email', '$problema', '$equipe_acionada')"; // Roda a query e trata o resultado if (pg_query ($declar)) { $declar2 = "SELECT num_chamado from chamados where email = '$email' and data_chamado = '$data_chamado' and hora_chamado = '$hora_chamado'"; $query2 = pg_query ($declar2) or die ("Erro no acesso ao banco"); $row = pg_fetch_row ($query2); $num_chamado = $row[0]; mail ("curso1@ccuec.unicamp.br", "SRC - Um Novo Chamado foi Includo", "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"); $_SESSION[ok] = 1; $_SESSION[data_exib] = $data_exib; $_SESSION[hora_chamado] = $hora_chamado; $_SESSION[num_chamado] = $num_chamado; header("Location: exibe_mensagem.php"); } else { $_SESSION[ok] = 2; header("Location: exibe_mensagem.php"); } } ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

27

PHP Intermedirio

5.3) Criando o script que exibe mensagens: exibe_mensagem.php No devemos exibir as mensagens finais em um script que acessa banco de dados, pois, se o usurio clicar no boto atualizar do navegador, o script ser processado novamente. Por isso, criaremos um script s para exibir as mensagens finais. Esse script ser chamado por meio da funo header.
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session(); monta_cabecalho(); ?> <table width="760" border="0" cellspacing="0"> <tr> <?php monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); ?> <td width="610" valign="top"> <?php //se o acionamento foi includo com sucesso if ($_SESSION[ok] == 1) { //Recebe variveis globais $data_exib = trim($_SESSION["data_exib"]); $hora_chamado = trim($_SESSION["hora_chamado"]); $num_chamado = trim($_SESSION["num_chamado"]); echo ("<BR><BR>"); echo ("<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><center> <b><font color=\"#CC0033\"> Processado com Sucesso </font></b></center><BR>"); echo ("<center>Data: $data_exib</center><BR>"); echo ("<center>Hora: $hora_chamado</center><BR>"); echo ("<center>Nmero do Chamado: $num_chamado </center>"); echo ("<br><br>"); echo ('<center> <b> <a href="form_chamado.php">Voltar</a> </b> </center></font>'); } // se deu erro na incluso if ($_SESSION[ok] == 2) { echo ("<BR><BR>"); echo ("<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><center><b><font color=\"#CC0033\"> Erro no Processamento </font></b></b> </center>");

Diviso de Servios Comunidade Centro de Computao Unicamp

28

PHP Intermedirio

echo ("<BR><BR>"); echo ('<center> <b> <a href="form_chamado.php">Voltar</a> </b> </center></font>'); } echo ('</td></tr></table>'); monta_rodape(); ?>

5.4) Testando o mdulo de incluso de chamados


Deixe os campos do formulrio em branco. Clique em enviar. Dever mostrar uma mensagem de erro. Preencha os campos do e clique em enviar. Dever mostrar a mensagem Processado com Sucesso. Exibir tambm a data/hora da incluso e o nmero do chamado.

Diviso de Servios Comunidade Centro de Computao Unicamp

29

PHP Intermedirio

6 - Mdulo de registro de atendimentos 6.1) Script form_atendimento.php


Este script cria o primeiro formulrio de atendimento, utilizado para obter o nmero do chamado.
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session(); monta_cabecalho(); ?> <table width="760" border="0" cellspacing="0"> <tr> <?php monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); ?> <td width="610" valign="top"><br> <table width="550" border="0" cellspacing="0" align="center"> <tr valign="top"> <td> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#264989">Registrar Atendimento</font></b><br></p> <?php if ($_SESSION["erro_atend"] == 1) { echo ('<BR><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#CC0033"><b>Preencha o nmero do chamado</b></font><BR><BR>'); $_SESSION["erro_atend"] = 0; } ?> <form method="post" action="registrar_atendimento.php"> <p><b>Nmero do Chamado</b>: <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

30

PHP Intermedirio

<center> <b> <a href="pagina_principal.php">Home</a> </b> </center></font> </td> </tr> </table> <td> </tr> </table> <?php monta_rodape(); ?>

6.2) Script registrar_atendimento.php


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 utilizadas no script a seguir pg_num_rows: obtem o nmero de registros que retornou do select. pg_fetch_row: obtem os campos do registro que retornou do select. substr: seleciona partes de uma varivel string, recebe como parmetros o nome da varivel, a posio inicial e o nmero de posies que se quer obter. Comea da posio zero.

<?php session_start(); include ("misc.php"); ver_session(); // Recebe variveis globais e tira espaos em branco $num_chamado = trim($_POST["num_chamado"]); // Consiste nmero do chamado if (empty($num_chamado)) { $_SESSION["erro_atend"] = 1; header("location: form_atendimento.php"); } else {

Diviso de Servios Comunidade Centro de Computao Unicamp

31

PHP Intermedirio

// Declarao do SQL $declar = "SELECT data_chamado, hora_chamado, problema, equipe_acionada from chamados where num_chamado = '$num_chamado'"; // Roda a query e verifica se encontrou registro $query = pg_query ($declar) or die ("Erro no acesso ao banco"); $achou = pg_num_rows($query); // Se encontrou, guarda as variveis if ($achou > 0) { $row = pg_fetch_row ($query); $data_chamado = $row[0]; $_SESSION["hora_chamado"] = $row[1]; $_SESSION["problema"] = $row[2]; $_SESSION["equipe_acionada"] = $row[3]; // Coloca a data do chamado em formato de exibio (de aaaa-mm-dd para dd/mm/aaaa) $data_exib = substr($data_chamado,8,2)."/". substr($data_chamado,5,2)."/".substr($data_chamado,0,4); $_SESSION["num_chamado"] = $num_chamado; $_SESSION["data_exib"] = $data_exib; header("location: registrar_atendimento2.php"); } else { include ("funcoes.php"); monta_cabecalho(); echo (' <table width="760" border="0" cellspacing="0"> <tr> '); monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); echo (' <td width="610" valign="top"><br> <font face="Arial"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <BR><BR> <center> <font color="#CC0033"> <b> Nmero de chamado no cadastrado </b> </font> </center> <BR><BR> <center> <b> <a href="form_atendimento.php">Voltar</a> </b> </center> </font><BR><BR><BR><BR> </td> </tr> </table> '); monta_rodape(); } } ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

32

PHP Intermedirio

6.3) Script registrar_atendimento2.php


Esse script vai exibir dados do chamado e criar o formulrio completo de atendimento.
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session(); $num_chamado = $_SESSION ["num_chamado"]; $usuario = $_SESSION["usuario_sys"]; $email = $_SESSION["email_usuario_sys"]; $data_exib = $_SESSION ["data_exib"]; $hora_chamado = $_SESSION ["hora_chamado"]; $problema = $_SESSION ["problema"]; $equipe_acionada = $_SESSION ["equipe_acionada"]; monta_cabecalho(); echo (' <table width="760" border="0" cellspacing="0"> <tr> '); monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); echo (' <td width="610" valign="top"><br> <table width="550" border="0" cellspacing="0" align="center"> <tr valign="top"> <td> <font face="Arial"><font size="2" face="Verdana, Arial, Helvetica, sansserif"><b><font color="#264989">Registrar Atendimento</font></b></font></font> '); // essas condies so vlidas 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 = trim($_SESSION["equipe_responsavel"]); $solucao = trim($_SESSION["solucao"]); if ($_SESSION["consist"] == 1) { echo ('<BR><BR><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#CC0033">Campo(s) obrigatrio(s) no preenchido(s)</font></b></font>'); $_SESSION["consist"] = 0; } if ($_SESSION["consist"] == 2) { echo ('<BR><BR><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#CC0033">Data invlida</font></b></font>'); $_SESSION["consist"] = 0; } }

Diviso de Servios Comunidade Centro de Computao Unicamp

33

PHP Intermedirio

else { echo (" <font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"> <b> Nmero do chamado: </b>$num_chamado<BR> <b> Usurio: </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> </font> "); } echo (' <form method=post action=registrar_atendimento3.php> '); echo (' <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Data do Atendimento </b> <BR>(formato dd/mm/aaaa)</font> <table BORDER width="580" > <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Data :&nbsp; '); echo (" <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> "); if (empty($responsavel)) { echo (' <table width="400"> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Respons&aacute;vel :</b></font> <select NAME="responsavel" > <option>Paulo <option>Carlos <option>Eduardo <option>Cristina <option>Jose <option>Marcos <option>Ricardo <option>Maria&nbsp; </select>

Diviso de Servios Comunidade Centro de Computao Unicamp

34

PHP Intermedirio

</td> </tr> </table> '); } else { echo (" <table width=\"400\"> <tr> <td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>Respons&aacute;vel :</b> $responsavel </font><br><br> <input type=\"hidden\" name=\"responsavel\" value=\"$responsavel\"> </td> </tr> </table> "); } if (empty($equipe_responsavel)) { echo (' <table width="400"> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>Equipe Responsvel:</b></font> <select NAME="equipe_responsavel"> <option>Suporte <option>Conectividade <option>Desenvolvimento <option>Producao </select> </td> </tr> </table> '); } else { echo (" <table width=\"400\"> <tr> <td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>Equipe Responsvel: </b> $equipe_responsavel </font> <input type=\"hidden\" name=\"equipe_responsavel\" value=\"$equipe_responsavel\"> </td> </tr> </table> "); } if (empty($solucao)) { echo (' <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Soluo :</font></b> <br> <textarea name="solucao" type=text rows=5 cols=50></textarea> '); } else { echo ("

Diviso de Servios Comunidade Centro de Computao Unicamp

35

PHP Intermedirio

<p><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>Solu&ccedil;&atilde;o :</b> $solucao<br></font> <input type=\"hidden\" name=\"solucao\" value=\"$solucao\"> "); } // Passa os 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><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"> <input name=\"sub\" type=\"SUBMIT\" value=\"Enviar Dados\"> </font> <br> </font> </center> </form> </td> </tr> </table> </td> </tr> </table> "); monta_rodape(); ?>

Saiba mais sobre algumas funes 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.

6.4) Script registrar_atendimento3.php Esse script vai consistir os campos do formulrio de atendimento, incluir os dados na tabela atendimentos e enviar uma mensagem com os dados do atendimento.
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session();

Diviso de Servios Comunidade Centro de Computao Unicamp

36

PHP Intermedirio

// Recebe variveis globais $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"]); // Consiste data $var_data = checkdate( (int)$mes, (int)$dia, (int)$ano ); // Consiste se campos obrigatrios no preenchidos if (empty($dia) || empty($mes) || empty($ano) || empty($responsavel) || empty($equipe_responsavel) || empty($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"); } 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"); } else { // Formata a data para ser gravada no banco $data_atendimento = $ano."-".$mes."-".$dia; // Declarao SQL $declar = "INSERT into atendimento values ('$num_chamado', '$data_atendimento', '$responsavel', '$equipe_responsavel', '$solucao')"; // Roda a query e trata o resultado if (pg_query ($declar)) { // formata a data para exibio (dd/mm/aaaa) $data_atendimento = $dia."/".$mes."/".$ano; mail ("$email", "SRC - O chamado $num_chamado foi atendido", "Aviso: O chamado $num_chamado foi atendido.

Diviso de Servios Comunidade Centro de Computao Unicamp

37

PHP Intermedirio

Mais Informaes: Data do atendimento: $data_atendimento Responsvel: $responsavel Equipe Responsvel: $equipe_responsavel Soluo: $solucao ", "SRC - Sistema de Registro de Chamados"); $ok = 1; header("Location: exibe_mensagem_atend.php?ok=$ok"); } else { $ok = 2; header("Location: exibe_mensagem_atend.php?ok=$ok"); } } ?>

6.5) Script exibe_mensagem_atend.php Para completar esse mdulo necessrio o script que exibe as mensagens finais.
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session(); monta_cabecalho(); ?> <table width="760" border="0" cellspacing="0"> <tr> <?php monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); ?> <td width="610" valign="top"> <?php $ok = trim($_GET["ok"]); //se o atendimento foi includo com sucesso if ($ok == 1) { echo ("<BR><BR>");

Diviso de Servios Comunidade Centro de Computao Unicamp

38

PHP Intermedirio

echo ("<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><center> <b><font color=\"#CC0033\"> Processado com Sucesso </font></b></center><BR>"); echo ("<br><br>"); echo ('<center> <b> <a href="form_atendimento.php">Voltar</a> </b> </center></font>'); } // se deu erro na incluso do atendimento if ($ok == 2) { echo ("<BR><BR>"); echo ("<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><center><b><font color=\"#CC0033\"> Erro no Processamento </font></b></center>"); echo ("<BR><BR>"); echo ('<center> <b> <a href="form_atendimento.php">Voltar</a> </b> </center></font>'); } echo ('</td></tr></table>'); monta_rodape(); ?>

6.6) Testando o mdulo de registro de atendimentos


Deixe o campo Nmero do Chamado do formulrio em branco. Dever exibir uma mensagem de erro. No campo Nmero do Chamado do formulrio, digite um nmero inexistente. Dever exibir uma mensagem de erro. No campo Nmero do Chamado do formulrio, digite um nmero vlido. Dever exibir o formulrio completo para o registro de atendimentos. No formulrio completo deixe os campos obrigatrios em branco. Dever exibir uma mensagem de erro. No formulrio completo digite datas invlidas no campo Data do atendimento. Dever exibir uma mensagem de erro. Preencha o formulrio completo com dados vlidos. Dever exibir a mensagem Processado com sucesso.

Diviso de Servios Comunidade Centro de Computao Unicamp

39

PHP Intermedirio

7 - Mdulo de consulta 7.1) Script consulta_chamados_por_per.php


Este script cria o formulrio de consulta, e obtm um intervalo de datas.
<?php session_start(); include ("funcoes.php"); include ("misc.php"); ver_session(); monta_cabecalho(); ?> <table width="760" border="0" cellspacing="0"> <tr> <?php monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); ?> <td width="610" valign="top"><br> <table width="550" border="0" cellspacing="0" align="center"> <tr valign="top"> <td> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><font color="#264989"><b>Consulta chamados ocorridos num determinado perodo</b> </font></font> <?php // essas condies so vlidas para quando esse script chamado pelo consulta_chamados_por_per2.php 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"]); $mes_fim = trim($_SESSION["mes_fim"]); $ano_fim = trim($_SESSION["ano_fim"]); echo ('<BR><BR><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#CC0033">Data(s) invlidas(s)</font></b></font>');

Diviso de Servios Comunidade Centro de Computao Unicamp

40

PHP Intermedirio

$_SESSION["consist"] = 0; } ?> <form method=post action=consulta_chamados_por_per2.php> <p> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b> Entre com o perodo: </b><BR><BR> <b>De:</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dia <?php echo (" <input name=\"dia_ini\" type=\"TEXT\" size=2 maxlength=2 &nbsp;&nbsp;&nbsp;ms <input name=\"mes_ini\" type=\"TEXT\" size=2 maxlength=2 &nbsp;&nbsp;&nbsp;ano <input name=\"ano_ini\" type=\"TEXT\" size=4 maxlength=4 value=\"$ano_ini\"><BR><BR> <b>At</b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dia <input name=\"dia_fim\" type=\"TEXT\" size=2 maxlength=2 &nbsp;&nbsp;&nbsp;ms <input name=\"mes_fim\" type=\"TEXT\" size=2 maxlength=2 &nbsp;&nbsp;&nbsp;ano <input name=\"ano_fim\" type=\"TEXT\" size=4 maxlength=4 value=\"$ano_fim\"></font> "); ?> </p> <center> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <input name="sub" type="SUBMIT" value="Enviar Dados"> </font> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <br> </font> </center> </form> </td> </tr> </table> </td> </tr> </table> <?php monta_rodape(); ?> value=\"$dia_ini\"> value=\"$mes_ini\">

value=\"$dia_fim\"> value=\"$mes_fim\">

Diviso de Servios Comunidade Centro de Computao Unicamp

41

PHP Intermedirio

7.2) Script consulta_chamados_por_per2.php


Este script consiste os campos recebidos do formulrio, consulta as tabelas chamados e atendimentos e exibe os dados obtidos.
<?php session_start(); include ("misc.php"); include ("funcoes.php"); ver_session(); // Recebe as variveis do formulrio e tira espaos em branco $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"]); // formata as datas no formato Unix/timestamp para que sejam comparadas 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); // Consiste data de inicio e data de fim $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 se campos obrigatorios foram preenchidos 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; header("location: consulta_chamados_por_per.php"); } elseif ($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; header("location: consulta_chamados_por_per.php"); } else { //transforma o dia e o ms num formato vlido, por exemplo,

Diviso de Servios Comunidade Centro de Computao Unicamp

42

PHP Intermedirio

//se for $dia_ini $mes_ini $ano_ini $dia_fim $mes_fim $ano_fim

digitado 1 nos campos dia ou ms,transforma para 01 = strftime("%d",$data_ini); = strftime("%m",$data_ini); = strftime("%Y",$data_ini); = strftime("%d",$data_fim); = strftime("%m",$data_fim); = strftime("%Y",$data_fim);

//Formata as datas recebidas para aaaa-mm-dd $data_ini = $ano_ini."-".$mes_ini."-".$dia_ini; $data_fim = $ano_fim."-".$mes_fim."-".$dia_fim; //Formata as datas para exibio (dd/mm/aaaa) $data_ini_exib = $dia_ini."/".$mes_ini."/".$ano_ini; $data_fim_exib = $dia_fim."/".$mes_fim."/".$ano_fim; // Declarao do SQL $declar = "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 query e verifica se encontrou algum registro $query = pg_query ($declar) or die ("Erro no acesso ao banco"); $achou = pg_num_rows($query); // Se encontrou, guarda as variveis if ($achou > 0) { monta_cabecalho(); echo ("<BR> <table border=\"0\" width=\"760\"> <tr valign=\"top\"> <td width=\"660\"> <font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#264989\"><b>Consulta chamados ocorridos no perodo de $data_ini_exib a $data_fim_exib</b></font> </td> <td width=\"100\"> <a href=\"consulta_chamados_por_per.php\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Voltar</b></font></a> </td> </tr> </table> "); echo (" <table border=\"0\" width=\"760\"> "); while ($row = pg_fetch_row ($query)) { $num_chamado = $row[0]; $data_chamado = $row[1]; $hora_chamado = $row[2]; $usuario = $row[3]; $email = $row[4]; $problema = $row[5]; $equipe_acionada = $row[6]; //Formata a data do chamado para exibio(dd/mm/aaaa) $data_chamado_exib = substr($data_chamado,8,2)."/".substr($data_chamado,5,2)."/".substr($data_chamado,0,4); echo (" <tr>

Diviso de Servios Comunidade Centro de Computao Unicamp

43

PHP Intermedirio

<td width=\"20\"> &nbsp; </td> <td width=\"740\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"> <BR><HR><BR> <b> <font color=\"#264989\"> Nmero do chamado: </font> </b> $num_chamado <BR><BR> </font> </td> </tr> <tr> <td width=\"20\"> &nbsp; </td> <td width=\"740\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"> <b> Data do chamado: </b> $data_chamado_exib <BR> <b> Hora do chamado: </b> $hora_chamado <BR> <b> Usurio: </b> $usuario <BR> <b> E-mail: </b> $email <BR> <b> Problema: </b> $problema <BR> <b> Equipe acionada: </b> $equipe_acionada <BR> </font> </td> </tr> "); // Declarao do SQL $declar2 = "SELECT data_atendimento, responsavel, equipe_responsavel, solucao from atendimento where num_chamado = '$num_chamado'"; // Roda a query e verifica se encontrou registro $query2 = pg_query ($declar2) or die ("Erro no acesso ao banco"); $achou2 = pg_num_rows($query2); // Se encontrou, guarda as variveis if ($achou2 > 0) { echo (" <tr> <td width=\"20\"> &nbsp; </td> <td width=\"740\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"> <BR> <b> <font color=\"#264989\"> Atendimento </font> </b> <BR> </font></td></tr> "); while ($row2 = pg_fetch_row ($query2)) { $data_atendimento = $row2[0]; $responsavel = $row2[1]; $equipe_responsavel = $row2[2]; $solucao = $row2[3]; //Formata a data de atendimento para exibio (dd/mm/aaaa) $data_atendimento_exib = substr($data_atendimento,8,2)."/".substr($data_atendimento,5,2)."/". substr($data_atendimento,0,4); echo (" <tr>

Diviso de Servios Comunidade Centro de Computao Unicamp

44

PHP Intermedirio

<td width=\"20\"> &nbsp; </td> <td width=\"740\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"> <b> Data do Atendimento: </b> $data_atendimento_exib <BR> <b> Responsvel: </b> $responsavel <BR> <b> Equipe responsvel: </b> $equipe_responsavel <BR> <b> Soluo: </b> $solucao <BR><BR> "); } } else { echo (' <tr> <td width="20"> &nbsp; </td> <td width="740"> <font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><BR> Obs: At o momento, nenhum atendimento foi registrado para esse chamado. </font> </font></td></tr> '); } } echo (" <tr> <td width=\"20\"> &nbsp; </td> <td width=\"740\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"> <b><a href=\"consulta_chamados_por_per.php\"><BR><BR> Voltar</a></b> </td> </tr> </table> "); } else { monta_cabecalho(); echo (' <table width="760" border="0" cellspacing="0"> <tr> '); monta_menu($_SESSION["usuario_sys"],$_SESSION["tipo_usuario_sys"]); echo (' <td width="610" valign="top"><br> <font face="Arial"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <BR><BR> <center> <font color="#CC0033"> <b> No existem chamados para esse perodo. </b> </font> </center> <BR><BR> <center> <b> <a href="consulta_chamados_por_per.php">Voltar</a> </b> </center> </font><BR><BR><BR><BR> </td> </tr> </table> '); } monta_rodape(); } ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

45

PHP Intermedirio

7.3) Testando o mdulo de consulta


Deixe os campos obrigatrios do formulrio em branco. Dever exibir uma mensagem de erro. Digite datas invlidas. Dever exibir uma mensagem de erro. Digite um intervalo de datas vlido. Dever exibir os dados referentes a esse perodo.

8 O script logout.php
Este script realizar a expirao da sesso de usurios no sistema:
<?php session_start(); session_unset(); session_destroy(); header("Location: index.php"); ?>

Diviso de Servios Comunidade Centro de Computao Unicamp

46

PHP Intermedirio

Referncia Bibliogrfica
Beginning PHP4 - Programando Autores: Wankyu Choi, Allan Kent, Chris Lea, ganesh Prasad, Chris Ullman, Jon Blank e Sea Cazzell Editora: Makron Books Documentao Oficial do PHP http://www.php.net Consulta a dicas e artigos do site PHP Brasil http://www.phpbrasil.com Para mais informaes sobre o PostgreSQL, consulte o site: http://www.commandprompt.com/ppbook/

Onde obter ajuda


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

Diviso de Servios Comunidade Centro de Computao Unicamp

47

S-ar putea să vă placă și