Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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;
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.
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.
PHP Intermedirio
Atribuir os valores de uma sesso para variveis globais ou locais tambm uma tarefa simples:
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();
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']
PHP Intermedirio
$_FILES['arquivo']['error']
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:
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 :
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); }
PHP Intermedirio
O valor de retorno precisa passar por uma formatao para poder ser apresentado, para isso, usamos a funo strftime():
Sada:
10
PHP Intermedirio
strftime() - formata uma data do tipo Unix/timestamp para uma string de apresentao: Sintaxe: strftime(string formatao, int timestamp);
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)
11
PHP Intermedirio
%U
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)
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)
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)
(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)
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);
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)
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);
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
17
PHP Intermedirio
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> "); }
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,
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.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> </td> </tr> <tr valign="top"> <td align="center"> <?php if (isset($_GET["erro_aut"])) { echo (" <table align=center>
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> </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> </td> </tr> </table> </tr> <tr valign="top" heigth="5"> <td> <BR> </td> </tr> <tr valign="top"> <td> <BR> </td> </tr> <tr valign="top"> <td> <BR> </td> </tr> <tr valign="top"> <td> <BR> </td> </tr> </table> </form> </td> </tr> </table> <?php monta_rodape(); ?>
21
PHP Intermedirio
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"); } ?>
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> </td> </tr> <tr valign="top"> <td> <BR> </td> </tr> <tr valign="top"> <td> <BR> </td> </tr> <tr valign="top"> <td> <BR> </td> </tr> </table> </td> </tr> </table> <?php monta_rodape(); ?>
23
PHP Intermedirio
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> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <select name="equipe_acionada"> <option>Suporte</option> <option>Conectividade</option> <option>Desenvolvimento</option> <option>Produçã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> "); } ?> <BR> <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(); ?>
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");
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"); } } ?>
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>");
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(); ?>
29
PHP Intermedirio
30
PHP Intermedirio
<center> <b> <a href="pagina_principal.php">Home</a> </b> </center></font> </td> </tr> </table> <td> </tr> </table> <?php monta_rodape(); ?>
<?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 {
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(); } } ?>
32
PHP Intermedirio
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 <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 : '); echo (" <input name=\"dia\" type=\"TEXT\" value=\"$dia\" size=\"2\" maxlength=2 > <input name=\"mes\" type=\"TEXT\" value=\"$mes\" size=\"2\" maxlength=2 > <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ável :</b></font> <select NAME="responsavel" > <option>Paulo <option>Carlos <option>Eduardo <option>Cristina <option>Jose <option>Marcos <option>Ricardo <option>Maria </select>
34
PHP Intermedirio
</td> </tr> </table> '); } else { echo (" <table width=\"400\"> <tr> <td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>Responsá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 ("
35
PHP Intermedirio
<p><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>Soluçã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();
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.
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>");
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(); ?>
39
PHP Intermedirio
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> dia <?php echo (" <input name=\"dia_ini\" type=\"TEXT\" size=2 maxlength=2 ms <input name=\"mes_ini\" type=\"TEXT\" size=2 maxlength=2 ano <input name=\"ano_ini\" type=\"TEXT\" size=4 maxlength=4 value=\"$ano_ini\"><BR><BR> <b>At</b> dia <input name=\"dia_fim\" type=\"TEXT\" size=2 maxlength=2 ms <input name=\"mes_fim\" type=\"TEXT\" size=2 maxlength=2 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\">
41
PHP Intermedirio
42
PHP Intermedirio
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>
43
PHP Intermedirio
<td width=\"20\"> </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\"> </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\"> </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>
44
PHP Intermedirio
<td width=\"20\"> </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"> </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\"> </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(); } ?>
45
PHP Intermedirio
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"); ?>
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/
47