Este documento propriedade intelectual 2002 do Centro de Computao da Unicamp e
distribudo sob os seguintes termos: 1. As apostilas publicadas pelo Centro de Computao da Unicamp podem ser reproduzidas e distribudas no todo ou em parte, em qualquer meio fsico ou eletrnico, desde que os termos desta licena sejam obedecidos, e que esta licena ou referncia a ela seja exibida na reproduo. 2. Qualquer publicao na forma impressa deve obrigatoriamente citar, nas pginas externas, sua origem e atribuies de direito autoral (o Centro de Computao da Unicamp e seu(s) autor(es)). 3. Todas as tradues e trabalhos derivados ou agregados incorporando qualquer informao contida neste documento devem ser regidas por estas mesmas normas de distribuio e direitos autorais. Ou seja, no permitido produzir um trabalho derivado desta obra e impor restries sua distribuio. O Centro de Computao da Unicamp deve obrigatoriamente ser notificado (treinamentos@ccuec.unicamp.br) de tais trabalhos com vista ao aperfeioamento e incorporao de melhorias aos originais. Adicionalmente, devem ser observadas as seguintes restries: A verso modificada deve ser identificada como tal O responsvel pelas modificaes deve ser identificado e as modificaes datadas Reconhecimento da fonte original do documento A localizao do documento original deve ser citada Verses modificadas no contam com o endosso dos autores originais a menos que autorizao para tal seja fornecida por escrito. A licena de uso e redistribuio deste material oferecida sem nenhuma garantia de qualquer tipo, expressa ou implcita, quanto a sua adequao a qualquer finalidade. O Centro de Computao da Unicamp no assume qualquer responsabilidade sobre o uso das informaes contidas neste material. PHP ntermedirio Sumrio O que PHP?.........................................................................................................................6 Vantagens............................................................................................................................... 6 Sintaxe Bsica........................................................................................................................ 7 Variveis.............................................................................................................................7 Inteiros...........................................................................................................................7 Ponto-Flutuante.............................................................................................................8 Strings............................................................................................................................8 Caracteres de Escape.................................................................................................... 8 Arrays............................................................................................................................ 8 Unio de arrays ............................................................................................................9 Objetos...........................................................................................................................9 Listas............................................................................................................................. 9 Booleans........................................................................................................................ 9 Transformaes de tipo...................................................................................................... 9 Coeres...................................................................................................................... 10 Transformaes explcitas de tipo...............................................................................10 Tipo suportados nas transformaes explcitas.......................................................... 10 Funo settype.............................................................................................................11 Operadores........................................................................................................................11 Aritmticos...................................................................................................................11 Strings..........................................................................................................................11 Atribuio.................................................................................................................... 11 Lgicos........................................................................................................................ 12 Comparao................................................................................................................ 12 Incremento e decremento............................................................................................ 12 Estruturas de controle....................................................................................................... 13 If e Else........................................................................................................................ 13 Switch.......................................................................................................................... 14 While............................................................................................................................14 Do..while..................................................................................................................... 15 For............................................................................................................................... 15 Obs.: os comandos while, do while e for , quando utilizados sem um parmetro de controle, tem como valor padro o true, ou seja, vai ser executado como se fosse um loop infinito................................................................................................................. 15 Nesse caso a sada seria: 1,2,3 ...............................................................................16 Break........................................................................................................................... 16 Continue...................................................................................................................... 16 Sada: echo()..................................................................................................................... 16 Sada: print()..................................................................................................................... 17 Funes............................................................................................................................. 17 Passagem de parmetros por referncia.....................................................................18 Escopo das variveis.........................................................................................................18 Globais........................................................................................................................ 19 Diviso de Servios Comunidade Centro de Computao Unicamp 3 PHP ntermedirio Locais.......................................................................................................................... 19 Estticas...................................................................................................................... 20 Sesses.................................................................................................................................. 21 Superglobal $_SESSION..................................................................................................21 Upload de Arquivos.............................................................................................................23 A varivel $_FILES..........................................................................................................23 A funo move_uploaded_file()....................................................................................... 24 Manipulao de Data e Hora............................................................................................. 26 Funes............................................................................................................................. 26 mktime().......................................................................................................................26 strftime()...................................................................................................................... 26 date()........................................................................................................................... 27 checkdate().................................................................................................................. 31 getdate().......................................................................................................................31 Enviando e-mails................................................................................................................. 33 Projeto.................................................................................................................................. 34 Banco de dados e tabelas.................................................................................................. 34 chamados.....................................................................................................................34 atendimentos................................................................................................................34 usuarios....................................................................................................................... 34 Funes chamadas frequentemente por outros scripts..................................................... 35 funcoes.php..................................................................................................................35 misc.php.......................................................................................................................36 Scripts de autenticao e pgina inicial do sistema.......................................................... 37 Index.php..................................................................................................................... 37 autentica_src.php........................................................................................................ 38 pagina_principal.php.................................................................................................. 39 Mdulo de incluso de chamados.....................................................................................40 form_chamado.php......................................................................................................40 incluir_chamado.php...................................................................................................41 exibe_mensagem.php...................................................................................................44 Testando o mdulo de incluso de chamados............................................................. 45 Mdulo de registro de atendimentos................................................................................ 46 form_atendimento.php.................................................................................................46 registrar_atendimento.php.......................................................................................... 47 registrar_atendimento2.php........................................................................................ 49 registrar_atendimento3.php........................................................................................ 52 exibe_mensagem.php...................................................................................................54 Testando o mdulo de registro de atendimentos.........................................................54 Mdulo de consulta.......................................................................................................... 55 consulta_chamados_periodo.php................................................................................55 consulta_chamados_periodo2.php..............................................................................56 Testando o mdulo de consulta................................................................................... 60 Expirao de sesso.......................................................................................................... 61 Diviso de Servios Comunidade Centro de Computao Unicamp 4 PHP ntermedirio logout.php....................................................................................................................61 Exerccios complementares................................................................................................ 61 Dicas..................................................................................................................................... 62 ltima atualizao em 06/05/2011 Diviso de Servios Comunidade Centro de Computao Unicamp 5 PHP ntermedirio O que PHP? O PHP foi criado por volta de 1994 por Rasmus Lerdorf, com o nome de Personal Home Page Tools. A abreviao PHP vem de "Hypertext PreProcessor, que uma linguagem de programao de cdigo aberto muito utilizada para a criao de scripts que so executados no servidor web para a manipulao de pginas HTML. Vantagens O PHP apresenta inmeras vantagens: uma linguagem de fcil aprendizado; Tem performance e estabilidade excelentes; Seu cdigo aberto, no preciso pagar por sua utilizao, e possvel alter-lo na medida da necessidade de cada usurio; Tem suporte nos principais servidores web do mercado, principalmente no servidor web Apache; Suporta conexo com os bancos de dados mais utilizados do mercado, como por exemplo: MySQL, PostgreSQL, Oracle e DB2; multiplataforma, tem suporte nos sistemas operacionais mais utilizados no mercado; Suporta uma variedade grande de padres e protocolos, como o XML, DOM, MAP, POP3, LDAP, HTTP, entre outros; No precisa ser compilado; A partir da verso 5 do PHP, foi introduzindo um novo modelo de orientao a objetos. Nessa verso o tratamento de objetos foi completamente reescrito, permitindo um desempenho melhor e mais vantagens. Diviso de Servios Comunidade Centro de Computao Unicamp 6 PHP ntermedirio Sintaxe Bsica O PHP tem uma sintaxe simples e enxuta, o que facilita a organizao dos scripts a serem desenvolvidos. Outra caracterstica interessante que os cdigos em PHP so embutidos no HTML. A seguir, exemplos da sintaxe do PHP: 1 2 3 4 <?php ... ... .. ?> <? .... .... .... ?> <% .... .... .... %> <script language=PHP> .... ..... ... </script> Variveis Manipular variveis em PHP uma atividade simples, como veremos a seguir: no necessrio declarar as variveis, isto feito quando atribumos algum valor para elas; para declar-las, necessrio apenas colocar como primeiro caracter o '$' , juntamente com a string referente ao nome da varivel, e esta string deve comear com uma letra ou o caracter '_'; PHP case sensitive, isto , '$a' diferente de '$A'. aconselhvel utilizar os nomes de variveis com letras minsculas, por causa das variveis pr-definidas da linguagem, que so declaradas com maisculas; PHP suporta os seguintes tipos de variveis: inteiros (integer ou long); ponto flutuante (double ou float); strings arrays objetos Inteiros Este tipo de varivel contm dados inteiros. Sintaxe: $curso = 123; //inteiro positivo $curso = -123; //inteiro negativo Diviso de Servios Comunidade Centro de Computao Unicamp 7 PHP ntermedirio Ponto-Flutuante Tambm chamada Float ou Double, esse tipo de varivel pode conter valores com ponto- flutuante. Sintaxe: $curso = 1.234; Strings Este tipo de varivel pode ter seu contedo entre (') aspas simples ou (") aspas duplas. Sintaxe: $curso = 'PHP'; // desta maneira, o valor da varivel ser exatamente o texto contido entre as aspas $curso= PHP; // desta maneira, qualquer varivel ou caracter de escape ser processado antes da impresso da variavel Exemplos de strings: $string1 = "Programando em PHP; echo $string1; //este exemplo ira imprimir 'Programando em PHP' $string2 = '$string1'; // este exemplo ir imprimir '$string1' $string3 = "$string1; //este exemplo ir imprimir 'Programando em PHP' Caracteres de Escape \n nova linha; \r retorno de carro (semelhante a \n) \t tabulao horizontal \\ a prpria barra (\) \$ o smbolo $ \' aspas simples \ aspas duplas Arrays Array um tipo de varivel que possui seu contedo agrupado por ndices, como um vetor ou um dicionrio. Estes ndices podem ser de qualquer tipo suportado pelo PHP, com mostrado a seguir: Sintaxe: $estilo_musical[0] = 'pagode'; Diviso de Servios Comunidade Centro de Computao Unicamp 8 PHP ntermedirio $estilo_musical[1] = drum 'n' bass; $estilo_musical[MPB] = 'Gilberto Gil'; $estilo_musical[Rock] = 'Blind Guardian'; Unio de arrays $a = array("a" => "ma", "b" => "banana"); $b = array("a" =>"pra", "b" => "framboesa", "c" => "morango"); $c = $a + $b; // Uniao de $a e $b echo "Unio de \$a e \$b: \n"; var_dump($c); Objetos Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma varivel. Obs.: esse tpico faz parte do treinamento de PHP Avanado. Listas Utilizadas em PHP para realizar atribuies mltiplas, como por exemplo, atribuir valores de um array para variveis, como mostra a seguir: Sintaxe: list($a,$b,$c) = array(0=>a, 1=>b, 2=>c); O trecho de cdigo acima atribuir simultnea e respectivamente os valores do array s variveis passadas com parmetros para o comando list. muito importante lembrar que s sero passadas ao comando list os elementos do array que possurem os ndices com valores inteiros e no negativos. Booleans Em PHP, no existe um tipo especfico para as variveis do tipo boolean, ele trata este tipo com valores inteiros: 0 (zero) para false e valores diferentes deste como true. Transorma!"es de ti#o possvel fazer transformaes de tipos de variveis atravs das seguintes formas: Diviso de Servios Comunidade Centro de Computao Unicamp 9 PHP ntermedirio Coer!es Quando ocorrem determinadas operaes matemticas entre dois valores de tipos diferentes, como por exemplo a adio, o PHP converte um deles automaticamente. Um exemplo disso seria a converso de uma string para um valor numrico (inteiro ou ponto flutuante), que segue as seguintes regras: analisado o nicio da string, se contiver um nmero, ele ser analisado, caso contrrio, o valor ser 0 (zero); O nmero pode conter o sinal no incio (+ ou -); Se a string contiver um ponto em sua parte numrica a ser analisada, ele ser considerado, e o valor obtido ser um ponto flutuante; Se a string contiver as letras ''e'' ou ''E'' em sua parte numrica a ser analisada, o valor seguinte ser considerado como expoente da base 10, e o valor obtido ser um ponto flutuante. Sintaxe: $curso = 1 + 12.8; // $curso == 13.8 $curso = 1 + 15; // $curso == 16 $curso = 1 + 1.5e3; // $curso == 1501 $curso = 1 + 10curso; // $curso == 11 $curso = 1 + 10curso; // $curso == 11 $curso = 1 + +A10testes; // $curso == 1 "rans#or$a!es e%pl&citas de tipo Desta forma precisaremos utilizar a sintaxe de typecast do PHP, como os exemplos a seguir: Sintaxe: $curso = 20; // integer(20) $curso = (double)$curso; // double(20.0) $curso = 3.9; // double(3.9) $curso = (int)$curso; //o valor truncado e fica como integer(3) "ipo suportados nas trans#or$a!es e%pl&citas Sintaxe: (int), (integer) = muda para inteiro; (real), (double), (float) = muda para ponto flutuante; (string) = muda para string (array) = muda para array (object) = muda para objeto Diviso de Servios Comunidade Centro de Computao Unicamp 10 PHP ntermedirio Funo settype Trabalha igualmente as transformaes explcitas, porm com sintaxe diferente, como o exemplo a seguir: Sintaxe: $curso = 20; // (integer) settype($curso, double); O valor da varivel $curso foi transformada em ponto flutuante. O#eradores Arit$'ticos + Adio - Subtrao * Multiplicao / Diviso % Mdulo Strings . Concatenao Atribuio = Atribuio simples += Atribuio com adio -= Atribuio com subtrao *= Atribuio com Multiplicao /= Atribuio com diviso %= Atribuio com mdulo .= Atribuio com concatenao Sintaxe: $curso = 8; $curso += 2; // $curso fica com o valor 10 Diviso de Servios Comunidade Centro de Computao Unicamp 11 PHP ntermedirio L(gicos and "e lgico or "ou lgico xor "ou exclusivo ! No (inverso) && "e lgico || "ou lgico Co$parao == igual a != diferente de < menor que > maior que <= menor ou igual a >= maior ou igual a === dntico a !=== No idntico a Incre$ento e decre$ento ++ incremento -- decremento Estes podem receber o valor antes ou depois da varivel: Antes: retorna o valor da varivel antes de increment-la ou decrement-la: Sintaxe: $a = 1; $b = ++$a; // $b recebe 2, valor de $a j incrementado) Depois: retorna o valor da varivel j incrementada ou decrementada: Sintaxe: $a = 1; $b = $a++; // $b recebe 1 e $a passa a ter 2) Diviso de Servios Comunidade Centro de Computao Unicamp 12 PHP ntermedirio $struturas de controle I# e Else O comando i testa a condio passada e executa o bloco de cdigo caso o valor retornado da condio seja verdadeiro: Sintaxe: $a = 1; if ($a == 1) { ... ... ... } Caso a condio passada retorne um valor falso, e seja necessrio executar um bloco de cdigo diferente, utiliza-se a instruo else) Sintaxe: $a = 1; $b = 2; if ($a > $b) { ... ... } else { ... ... } Ainda existe a instruo elsei* para situaes onde precisa-se verificar mais que uma condio: Sintaxe: $a = 1; $b = 2; $c = 3; if ($a > $b) { echo ' $a maior que $b '; } elseif ($a > $c) { echo ' $a maior que $c '; } else { echo ' $a menor que $b e $c '; } Diviso de Servios Comunidade Centro de Computao Unicamp 13 PHP ntermedirio S+itc, Comando utilizado para fazer mltiplos testes de condio. A idia deste comando igual ao do elsei , porm com algumas diferenas: Sintaxe: $a = 1; switch ($a) { case 0: echo ' $a igual a 0 '; break; case 1: echo ' $a igual a 1 '; break; case 2: echo ' $a igual a 2 '; break; default: echo " \$a igual a $a "; } A idia do comando s%itc& achar a condio verdadeira e executar qualquer bloco de cdigo que esteja abaixo dela, inclusive os que no forem do seu trecho, por esse motivo, utilizamos o comando brea' logo abaixo da ltima linha do bloco de cdigo, como o exemplo anterior. O comando s%itc& tambm aceita testes de condio em qualquer tipo de varivel suportado pelo PHP: Sintaxe: $a = "curso"; switch ($a) { case "PHP": echo ' $a igual a PHP '; break; case "curso": echo ' $a igual a Curso '; break; case "CCUEC": echo " \$a igual a CCUEC "; break; } -,ile Este comando utilizado para realizar laos condicionais. Ele executa o bloco de cdigo enquanto a condio passada for verdadeira, e caso a condio inicial que foi passada se torne falsa, o bloco no ser executado: Sintaxe: Diviso de Servios Comunidade Centro de Computao Unicamp 14 PHP ntermedirio $a = 1; while ($a <= 10) { echo "Nmero".$a++."<br>"; } .o//+,ile Este comando tem a mesma idia que o comando %&ile, porm, seu teste de condio feito no final do bloco de cdigo: Sintaxe: $c = 0; do { echo "Nmero".++$c."<br>"; } while ($c < 10); For Como nos outros comando que realizam laos condicionais, o comando or tambm precisa de uma condio para ser testada a cada lao realizado, porm, este comando necessita de mais dois parmetros, que seriam a declarao da varivel contadora e a instruo de incremento: Sintaxe: for ($a=1; $a<=10; $a++) { echo Nmero.$a.<br>; } Obs/) os comandos while, do while e for , quando utilizados sem um parmetro de controle, tem como valor padro o true, ou seja, vai ser executado como se fosse um loop infinito. $a = 1; while (true) { echo "Nmero".$a++."<br>"; } $a = 1; for (;;) { echo "Nmero".$a++."<br>"; Diviso de Servios Comunidade Centro de Computao Unicamp 15 PHP ntermedirio } Nesse caso a sada seria: 1,2,3 . Brea0 O comando brea' pode ser utilizado em comandos de laos condicionais e no comando s%itc&, e sua funo parar imediatamente a execuo do lao condicional, prosseguindo normalmente com a execuo do script: Sintaxe: $a = 20; while ($a > 0) { if ($a == 3) { echo Nmero invlido!; break; } echo Nmero .$a.<br>; $a--; } Continue O comando continue tambm funciona dentro dos laos condicionais, porm, no para o fluxo do bloco de cdigo, e sim, volta para o incio dele: Sintaxe: for ($a=0;$a<=10;$a++) { if ($a == 5) { echo "<p>Pulou o Numero ==> $a</p>"; continue; } echo "Numero ==> $a<br>"; } Sa(da) ec&o*+ A funo ec&o faz a impresso de um ou mais argumentos na janela do navegador. Sintaxe: Echo Essa instruo ir imprimir no navegador.; Echo (Tambm pode-se usar parnteses.); Diviso de Servios Comunidade Centro de Computao Unicamp 16 PHP ntermedirio Para a construo sem o uso de parnteses, possvel passar mais de um argumento para a funo: Sintaxe: Echo Primeiro argumento, Segundo argumento ; Tambm existe uma construo abreviada do ec&o que possibilita alternar entre PHP e HTML rapidamente. Sintaxe: <P>Aqui HTML <?=Aqui PHP?></P> Essa forma mais utilizada em formulrios. Sa(da) #rint*+ A funo #rint bem semelhante a ec&o, com duas diferenas: print aceita apenas 1 argumento e alm da impresso no navegador, print retorna 1 em caso de sucesso e 0 em caso de falha na tentativa de impresso. Exemplos: Print Funciona igual a funo echo. ; Print (Tambm pode-se usar parnteses.) ; Print (`Tambm pode-se usar aspas simples.') ; ,un!"es Funes so pequenas sees independentes de cdigo que podem ser chamadas a qualquer momento e em qualquer ordem, que servem para desempenhar tarefas especficas dentro dos scripts. Sintaxe: function soma ($a,$b) { $c = $a + $b; return $c; } echo "A funcao soma() retornou ==> ".soma(5,10); A instruo return opcional, j que no obrigatrio retornar algum valor em funes no PHP, outra regra a de no permitir que sejam retornados mltiplos valores atravs desta instruo. Para resolver essa necessidade, pode-se retornar listas e arrays. Sintaxe: function soma ($a, $b) { Diviso de Servios Comunidade Centro de Computao Unicamp 17 PHP ntermedirio $c = $a + $b; $d = $c - 5; return array($c,$b,$d) } Passage$ de par1$etros por re#er2ncia Normalmente, a passagem de parmetros em PHP feita atravs dos valores das variveis, no permitindo assim, a alterao do valor na varivel original. Sintaxe: function contador($a) { ++$a; } $cont = 10; contador($cont); echo "A variavel <b>$cont</b> contem ==> ".$cont; No exemplo acima, a varivel original permanecer com o mesmo valor porque no foi definida a passagem de parmetros por referncia, o que alteraria tambm o valor da varivel original. Uma das maneiras de se utilizar esse recurso colocar o carcter '' &'' antes do nome da varivel na declarao da funo. Sintaxe: function contador(&$a) { ++$a; } $cont = 10; contador($cont); echo "A variavel <b>$cont</b> contem ==> ".$cont; Poderamos tambm utilizar a passagem de parmetros por referncia apenas quando fssemos chamar a funo, e no em sua declarao. Sintaxe: contador(&$cont); echo $cont; $sco#o das variveis Discutimos anteriormente sobre variveis e os tipos suportados pelo PHP. Agora, discutiremos sobre os escopos destas variveis, que podem ser dos seguintes tipos: Globais; Diviso de Servios Comunidade Centro de Computao Unicamp 18 PHP ntermedirio Locais; Estticas; Constantes. 3lobais As variveis globais so por definio, as variveis que podem ser acessadas dentro de todo o script. Porm, quando cria-se escopos locais como nas funes, precisaremos utilizar um tipo de chamada especial, utilizando o global- Sintaxe: $curso = 'PHP'; function mostra() { global $curso; echo $curso; } mostra(); O mesmo recurso pode ser acessado atravs da array .LOB/LS, que nos permite acessar todas as variveis globais do script. O exemplo acima pode ser reescrito da seguinte maneira: Sintaxe: $curso = 'PHP'; function mostra() { echo $GLOBALS[0curso0]; } mostra(); Locais As variveis locais so o tipo mais restrito dentro do PHP. Elas funcionam apenas dentro do escopo onde foram definidas. Sintaxe: function mostra() { $var_local = 'varivel local'; echo Var_local= $var_local; } echo Var_local= $var_local; Diviso de Servios Comunidade Centro de Computao Unicamp 19 PHP ntermedirio Est4ticas As variveis estticas so variveis que possuem o mesmo tempo de vida das variveis globais, com a diferena de funcionarem apenas em escopos locais e serem inicializadas uma s vez. Sintaxe: function contador() { static $i = 0; echo $i++.<br>; } for ($a=0; $a<=5; $a++) { contador(); } Diviso de Servios Comunidade Centro de Computao Unicamp 20 PHP ntermedirio Sess"es Este recurso, que foi implementado na verso 4 do PHP, muito til para quem trabalha com scripts que necessitam passar dados em acessos subseqentes para outros scripts. Sesses tambm so utilizadas para: Customizao de elementos de uma pgina, como cores, fontes, textos, etc; Gerenciamento de autenticao em sistemas para a web; Armazenamento de informaes sigilosas dentro do servidor, evitando a passagem destas informaes por meio de campos do tipo hidden do HTML ou cookies, aumentando assim a segurana destes dados. Esse recurso j vem habilitado na instalao padro do PHP, no havendo a necessidade de nenhuma configurao adicional, e antes de inicializar uma sesso, devemos lembrar das seguintes regras bsicas de utilizao: Nenhum contedo deve ser exibido antes de inicializar uma sesso; Em todas as pginas que forem utilizar este recurso, a sesso deve ser inicializada; Para inicializar uma sesso, basta executar o seguinte comando: Sintaxe: <?php session_start(); ?> Quando esta pgina for carregada, a sesso ser inicializada e a D da sesso ficar gravada em um cookie chamado PHPSESSD dentro do navegador. Esta sesso ser vlida enquanto o navegador estiver aberto ou enquanto a funo session_destroy() no for executada. Para visualizarmos a D da sesso corrente, utilizamos a funo session_id(). Sintaxe: <?php session_start(); $id_sess = session_id(); echo "A ID da sesso corrente ====> <b>$id_sess</b>"; ?> Su#erglobal $_SESSON Adicionar valores em uma sesso uma tarefa muito simples, e para isso, utilizaremos a superglobal 12S$SS3O4- Sintaxe: Diviso de Servios Comunidade Centro de Computao Unicamp 21 PHP ntermedirio <?php session_start(); $_SESSION["curso"] = "PHP Intermedirio"; $teste = "Teste de Sesses!" $_SESSION["teste"] = $teste; ?> Atribuir os valores de uma sesso para variveis globais ou locais tambm uma tarefa simples: Sintaxe: <?php session_start(); $curso = $_SESSION["curso"]; $teste = $_SESSION["teste"]; ?> Os ltimos dois recursos que sero apresentados para manipular sesses so: session2unset*+ - Limpa todas as variveis da sesso corrente. session2destro5*+ 6 Finaliza a sesso corrente. Utiliza-se estas duas funes no final do uso da sesso, que conseqentemente expira o cookie PHPSESSD no navegador, finalizando a sesso corrente. O cdigo PHP para este fim apresentado no exemplo abaixo. Sintaxe: <?php session_unset(); session_destroy(); ?> Diviso de Servios Comunidade Centro de Computao Unicamp 22 PHP ntermedirio U#load de /rquivos O PHP capaz de receber o upload de qualquer navegador que siga a norma RFC- 1867. sto permite que se faa upload de arquivos de texto de binrios. Com as funes de autenticao e manipulao de arquivos do PHP, voc tem o controle completo de quem pode fazer o upload de arquivo e o que fazer com o arquivo aps seu upload. Abaixo, um exemplo de um formulrio HTML para realizar esta tarefa. Sintaxe (teste_upload.html): <html> <head> <title>Documento sem título</title> <meta http-equiv="Content-Type" content="text/html; charset=iso- 8859-1"> </head> <body> <form enctype="multipart/form-data" action="teste_upload.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="300000"> Send this file: <input name="arquivo" type="file"> <input type="submit" value="Enviar Arquivo"> </form> S permitido o envio de arquivos .jpg e .gif </body> </html> O atributo enctype da tag <form> o mais importante para a realizao de um upload, sem ele, este recurso no ir funcionar. O campo do tipo file, MAX_FLE_SZE, indica ao navegador o tamanho mximo do arquivo a ser enviado. Agora veremos mais sobre como o PHP processa o upload de arquivo dentro do servidor. / varivel $_FLES Este array nos fornece as informaes sobre o arquivo que o navegador enviou ao servidor. Abaixo, a lista dos valores que este array nos disponibiliza. $_FILES['arquivo']['name'] o nome original do arquivo no computador do usurio! $_FILES['arquivo']['t"pe'] o #I#E t"pe do arquivo$ se o navegador deu esta in%orma&'o: e(! image)gi% $_FILES['arquivo']['si*e'] o taman+o em ,"tes do arquivo $_FILES['arquivo']['tmp_name'] o nome temporrio do arquivo$ como %oi guardado no servidor! $_FILES['arquivo']['error'] o c-digo de erro associado a este upload de arquivo! Diviso de Servios Comunidade Centro de Computao Unicamp 23 PHP ntermedirio Adicionado no ./. 0!1!2 Os cdigos de erro que o item $_FLES['arquivo']['error'] pode retornar so: 3.L4AD_E55_46 2 n'o ouve erro$ o upload %oi ,em sucedido 3.LA4D_E55_I7I_SI8E 9 4 arquivo no upload : maior do que o limite de%inido em upload_ma(_%ilesi*e no p+p!ini 3.L4AD_E55_F45#_SI8E 1 4 arquivo ultrapassa o limite de #A;_FILE_SI8E que %oi especi%icado no %ormulrio /<#L 3.L4AD_E55_.A5<IAL = 4 upload do arquivo %oi %eito parcialmente 3.L4AD_E55_74_FILE 0 7'o %oi %eito upload do arquivo / un!7o move_uploaded_file() Quando realizado um upload de arquivo para o servidor web, este arquivo fica em um diretrio temporrio, normalmente em /tmp (podemos alterar este diretrio no php.ini), e caso no seja inicializada nenhuma ao para manipular este arquivo, ele ser apagado deste diretrio ao fim da execuo do script. Para esta tarefa, o PHP disponibiliza a funo move2u#loaded2ile. Esta funo responsvel por mover um arquivo carregado pelo mecanismo do PHP de HTTP POST para uma nova localizao. Sintaxe: move_uploaded_file(string nome do arquivo, string destino); OBS) O diret(rio de destino de5e ter per$isso de escrita para o P6P/ A seguir, um exemplo de um script PHP que receber os dados do mtodo POST para realizar o upload: Sintaxe (teste_upload.php): Diviso de Servios Comunidade Centro de Computao Unicamp 24 PHP ntermedirio <?php $uploaddir = 'C:\WAPP\apache2\htdocs\cursophp\upload_arquivos\\'; $uploadfile = $uploaddir. $_FILES['arquivo']['name']; print "<pre>"; if ($_FILES['arquivo']['size'] != 0){ if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploaddir . $_FILES['arquivo']['name'])) { print "O arquivo valido e foi carregado com sucesso. Mais informaes:\n"; print_r($_FILES); } else { print "Erro no processamento! Mais informaes:\n"; print_r($_FILES); }} else { print "Erro no processamento! Mais informaes:\n"; print_r($_FILES); } print "</pre>"; ?> Diviso de Servios Comunidade Centro de Computao Unicamp 25 PHP ntermedirio 8ani#ula!7o de 9ata e Hora Neste captulo iremos mostrar algumas funes interessantes que o PHP nos disponibiliza para manipulao de data e hora. As mais utilizadas e importantes so as seguintes: mktime() strftime() date() checkdate() getdate() ,un!"es $0ti$e78 Retorna uma data com o formato Unix/timestamp. Esse formato baseado em um contador que teve seu valor zero associado com a data 01/01/1970 00:00:00UTC, e que incrementado a cada segundo. Uma vez representadas no formato UNX timestamp as datas se tornam um pouco complicadas para o raciocnio humano mas so manipuladas mais facilmente pelos computadores. til para se fazer operaes com datas. Se os argumentos forem invlidos, a funo retornar FALSE (antes do PHP 5.1 retornava -1). Exemplo: 01/01/1970 00:00:00 UTC -> 0 01/01/1970 00:01:00 UTC -> 60 01/01/1999 00:00:01 UTC -> 915 148 801 16/09/2004 23:59:58 UTC -> 1 095 379 198 Sintaxe: mktime(int hora, int minuto, int segundo, int ms, int dia, int ano); O valor de retorno precisa passar por uma formatao para poder ser apresentado, para isso, usamos a funo strftime(). str#ti$e78 Formata uma data do tipo Unix/timestamp para uma string de apresentao Sintaxe: Diviso de Servios Comunidade Centro de Computao Unicamp 26 PHP ntermedirio strftime(string formatao, int timestamp); Exemplo: $data = mktime(10,20,30,10,20,2009); echo $data; echo strftime("<br> %d/%m/%Y - %H:%M:%S", $data); Sada: 1192886430 (formato Unix/timestamp) 20/10/2007 - 10:20:30 Uma lista das principais opes para esta funo encontra-se na listagem abaixo: %d dia do m>s ?29 a =9@ %m m>s ?29 a 91@ %y ano com 1 dAgitos ?e(! B2$ 2=@ %Y ano com 0 dAgitos ?e(! 9CB2$ 122=@ %H +ora atual no %ormato 10 +oras ?22 a 1=@ %I +ora atual no %ormato 91 +oras ?29 a 91@ %M minuto atual ?22 a DC@ %S segundo atual ?22 a DC@ %R +ora no %ormato 10 +oras ?11:0D@ %x data sem mostrar a +ora do %ormato 3ni()timestamp ?e(! 19)91)122=@ %X +orrio sem mostrar a data do %ormato 3ni()timestamp ?e(! 9C:==@ date78 Retorna uma data formatada como uma string ou inteiro de acordo com as opes passadas como parmetro. Veja as opes de formatao abaixo. Diviso de Servios Comunidade Centro de Computao Unicamp 27 PHP ntermedirio Caractere de format Descrio Exemplo de valores retornados Dia --- --- d Dia do ms, 2 digitos com preenchimento de zero 01 at 31 D Uma representao textual de um dia, trs letras Mon at Sun Dia do ms sem preenchimento de zero 1 at 31 ! ('L' minsculo) A representao textual completa do dia da semana Sunday at Saturday " Representao numrica ISO-8601 do dia da semana (adicionado no PHP 5.1.0) 1 (para Segunda) at # (para Domingo) S Sufixo ordinal ingls para o dia do ms, 2 caracteres st, nd, rd ou t$. Funciona bem com
% Representao numrica do dia da semana 0 (para domingo) at & (para sbado) ' O dia do ano (comeando do 0) 0 through 3&( Semana --- --- ) Nmero do ano da semana ISO-8601, semanas comeam na Segunda (adicionado no PHP 4.1.0) Exemplo: *+ (the 42nd week in the year) M,s --- --- - Um representao completa de um ms, como January ou March .anuary at De/em0er m Representao numrica de um ms, com leading zeros 01 a 1+ M Uma representao textual curta de um .an a De/ Diviso de Servios Comunidade Centro de Computao Unicamp 28 PHP ntermedirio Caractere de format Descrio Exemplo de valores retornados Dia --- --- ms, trs letras n Representao numrica de um ms, sem leading zeros 1 a 1+ t Nmero de dias de um dado ms +1 through 31 2no --- --- 3 Se est em um ano bissexto 1 se est em ano bissexto, 0 caso contrrio. o Nmero do ano ISO-8601. Este tem o mesmo valor como Y, exceto que se o nmero da semana ISO ()) pertence ao anterior ou prximo ano, o ano usado ao invs. (adicionado no PHP 5.1.0) Exemplos: 1444 ou +003 Y Uma representao de ano completa, 4 dgitos Exemplos: 1444 ou +003 y Uma representao do ano com dois dgitos Exemplos: 44 ou 03 5empo --- --- a Antes/Depois de meio-dia em minsculo am or pm 2 Antes/Depois de meio-dia em maisculo 2M or 6M 7 Swatch Internet time 000 at 444 g Formato 12-horas de uma hora sem preenchimento de zero 1 at 1+ 8 Formato 24-horas de uma hora sem preenchimento de zero 0 at +3 $ Formato 12-horas de uma hora com zero 01 at 1+ Diviso de Servios Comunidade Centro de Computao Unicamp 29 PHP ntermedirio Caractere de format Descrio Exemplo de valores retornados Dia --- --- preenchendo esquerda H Formato 24-horas de uma hora com zero preenchendo esquerda 00 at +3 i Minutos com zero preenchendo esquerda 00 at (4 s Segundos, com zero preenchendo esquerda 00 at (4 u Milisegundos (adicionado no PHP 5.2.2) Exemplo: (*3+1 5ime'one --- --- e Identificador de Timezone (adicionado no PHP 5.1.0) Exemplos: 95:, 8M5, 2t!anti/;2'ores I (capital i) Se a data est ou no no horrio de vero 1 se horrio de vero, 0 caso contrrio. < Diferena para Greenwich time (GMT) em horas Exemplo: =0+00 6 Diferena para Greenwich time (GMT) com dois pontos entre horas e minutos (adicionado no PHP 5.1.3) Exemplo: =0+>00 5 Abreviao de Timezone Exemplos: ?S5, MD5 ... @ Timezone offset in seconds. The offset for timezones west of UTC is always negative, and for those east of UTC is always positive. A*3+00 at (0*00 -u!! Date;5ime --- --- / ISO 8601 date (adicionado no PHP 5) 2004-02- Diviso de Servios Comunidade Centro de Computao Unicamp 30 PHP ntermedirio Caractere de format Descrio Exemplo de valores retornados Dia --- --- 12T15:19:21+00:00 c,ec0date78 Verifica se a data passada vlida, retorna verdadeiro ou falso: Sintaxe: checkdate(int mes, int dia, int ano); $a = checkdate(11,02,1980); if ($a) { echo "Data Correta<p>"; } else { echo "<font color=\"red\">Data Incorreta</font><p>"; } getdate78 Retorna um array com as informaes de uma data no formato Unix/timestamp Sintaxe: array getdate(int timestamp); $data_array = getdate(); print_r($data_array); A lista dos itens mais importantes deste array retornado encontra-se abaixo: EsecondsE retorna os segundos ?2 a DC@ EminutesE retorna os minutos ?2 a DC@ E+ourE retorna as +oras ?2 a 1=@ Emda"E retorna o dia do m>s ?9 a =9@ EFda"E retorna a representa&'o num:rica do dia da semana ?2 para Domingo e G Diviso de Servios Comunidade Centro de Computao Unicamp 31 PHP ntermedirio para S,ado@ EmonE retorna a representa&'o num:rica do m>s atual ?9 a 91@ E"earE retorna a representa&'o num:rica do anual atual ?122=@ E"da"E retorna a representa&'o num:rica do dia do ano ?9 a =GD@ EFeeHda"E representa&'o te(tual do dia da semana ?Domingo a S,ado@ Emont+E representa&'o te(tual do m>s atual ?Ianeiro a De*em,ro@ Diviso de Servios Comunidade Centro de Computao Unicamp 32 PHP ntermedirio $nviando e6mails Para enviar e-mails a partir de scripts PHP, necessrio instalar um programa para processamento de correio eletrnico, nesse treinamento utilizaremos o SendMail. Esse programa far a interface entre o php e o servidor de e-mails. No treinamento utilizaremos como servidor de e-mails o BOL. Para utilizarmos o programa sendmail precisamos alterar o arquivo de configurao do PHP, o php.ini. necessrio alterar o valor da diretiva sendmail_path, incluindo o PATH (caminho) do executvel do aplicativo servidor de correio eletrnico como segue: sendmail_a!" = $%&'sendmail'sendmail(e)e *!$ J no arquivo sendmail.ini necessrio configurar as informaes referentes ao servidor de e-mail. Mais informaes sobre instalao e configurao esto disponveis na documentao complementar. A seguir, temos dois exemplos de como podemos utilizar a funo mail do PHP para enviar mensagens. No exemplo 1, os parmetros so passados de uma forma mais simplificada, entre aspas e separados por vrgulas. No exemplo 2, temos uma verso mais completa, indicada para quando se quer enviar a mensagem para mais de um endereo eletrnico ou com cpia para outro e-mail. Exemplo 1: mail("e-mail", "Assunto", "Contedo da mensagem Linha 1 Linha 2 Linha 3", "Ttulo da mensagem"); Exemplo 2: <?php // A funo mail utilizada dessa forma possibilita o envio de // mensagens para mais de um destinatrio e tambm // possibilita trabalharmos com parmetros adicionais $assunto = "Curso de PHP"; $para = "Bol1 <cursophp1@bol.com.br>, Bol2 <cursophp2@bol.com.br>"; $remetente = "Alexandre <arroyo.alexandre@gmail.com>"; $Cc = "Bol3 <cursophp-serv@bol.com.br>"; $mensagem = "Testando a funo mail do PHP!!!"; $headers = "From: ".$remetente."\r\n"; $headers .= "Cc: ".$Cc."\r\n"; $headers .= "Bcc: ".$remetente."\r\n"; mail($para,$assunto,$mensagem,$headers); echo 'Mensagem enviada!'; ?> Mais informaes sobre essa funo podem ser obtidas em: http://br2.php.net/manual/pt_BR/function.mail.php Diviso de Servios Comunidade Centro de Computao Unicamp 33 PHP ntermedirio Pro:eto O projeto consiste no desenvolvimento de um sistema (SRC Sistema de Registro de Chamados) cujo objetivo registrar chamados de usurios para uma equipe de suporte, solicitando algum tipo de atendimento tcnico. O sistema tambm vai disponibilizar uma consulta geral a partir dos dados armazenados. O desenvolvimento se dar no ambiente WAPP (Windows/Apache/Postgres/PHP). Mais informaes sobre a instalao e a configurao desse ambiente esto disponveis na documentao complementar. Os arquivos e pastas referentes ao sistema ficaro armazenados no diretrio de publicao do servidor web Apache, na pasta - cursophp - criada para o treinamento: C:\WAPP\apache2\htdocs\cursophp Banco de dados e tabelas Para o desenvolvimento do sistema utilizaremos o servidor de banco de dados PostgreS;L. Foi criada a base de dados curso#&#, contendo as seguintes tabelas: c,a$ados num2c&amado integer primary key not null auto_increment, data2c&amado date not null, &ora2c&amado time not null, usuario varc+ar?02) not null, email varc+ar?02@ not null, #roblema te(t not null, equi#e2acionada varc+ar?02@ not null atendi$entos num2c&amado integer not null, data2atendimento date not null, res#onsavel varc+ar?02@ not null, equi#e2res#onsavel varc+ar?02@ not null, solucao te(t not null usuarios login varc+ar?12@ not null, sen&a varc+ar?92@ not null, Diviso de Servios Comunidade Centro de Computao Unicamp 34 PHP ntermedirio nome varc+ar?02@ not null, email varc+ar?02@ not null, ti#o2usuario varc+ar?12@ not null Mais informaes sobre a criao do banco de dados e das tabelas podem ser obtidas na documentao complementar. ,un!"es c&amadas requentemente #or outros scri#ts Os scripts uncoes-#&# e misc-#&# contm funes chamadas frequentemente por outros scripts. Essas chamadas so realizadas por meio do comando include, no incio de cada script. Include e Require O include uma funo que permite a incluso do contedo de um arquivo em outro arquivo. Esse contedo pode ser qualquer tipo de cdigo PHP, HTML ou simplesmente texto. Os arquivos a serem includos podem conter uma biblioteca de funes ou classes. A funo require tem o mesmo objetivo da funo include, no entanto, em caso de erro, o include apenas mostra uma mensagem de warning e o script continuar executando, j o require causa um Fatal Error, encerrando a execuo do script. #uncoes/p,p <?php //Funo que monta o cabealho das pginas function monta_cabecalho() { echo "<html> <head> <title>SRC</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> <!-- Link to Style External Sheet --> <link href='css/style.css' type='text/css' rel='stylesheet' /> </head> <body> <div id='cabecalho'> <br><h2>Sistema de Registro de Chamados</h2> </div> "; } //Funo que monta o menu lateral das pginas, recebe parmetros Diviso de Servios Comunidade Centro de Computao Unicamp 35 PHP ntermedirio function monta_menu($login,$tip_us) { echo "<div id='menu_lateral'> Login: <b>$login</b> <br><br> <br><br> <a href=\"form_chamado.php\">Incluir Chamado</a><br> <br>"; if ($tip_us == 'user_atend') { echo "<br><a href=\"form_atendimento.php\">Registrar Atendimento</a><br><br>"; }
echo "<br> <a href=\"consulta_chamados_periodo.php\">Consultar Chamados por Periodo </a><br> <br> <br> <a href=\"pagina_principal.php\">Pagina Inicial </a><br> <br><br><br> <a href=\"logout.php\">Logout </a><br> </div> <div id='conteudo'> "; } //Funo que monta o rodap das pginas function monta_rodape() { echo "</div><div id='rodape'> <img src=\"imagens/rodape.jpg\" width=\"760\" height=\"18\"></div> </body> </html> "; } ?> $isc/p,p <?php // Declarao da funo que verifica se o usurio se autenticou antes de acessar essa pgina function ver_session() { if (!$_SESSION["usuario_sys"]) { // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); Diviso de Servios Comunidade Centro de Computao Unicamp 36 PHP ntermedirio echo "<br><br><p><font size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\">No permitido acessar esta rea antes de prvia autenticao!!<p><b><a href=\"index.php\">Pgina Principal</a></b></font>"; // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); die(); } } // Comando que faz a conexo com o banco de dados PostgreSQL pg_connect("host=localhost dbname=cursophp user=postgres password=adminpgs") or die ("Erro ao conectar o banco de dados"); ?> Scri#ts de autentica!7o e #gina inicial do sistema Inde%/p,p O script index.php vai exibir o formulrio de autenticao para acesso ao sistema e ter o seguinte cdigo: <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o arquivo especificado include ("funcoes.php"); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); ?> <div id='conteudo'> <form action="autentica_src.php" method="post"> <b>Autenticação</b><br><br> <?php // Exibe mensagem de erro caso o formulrio j tenha sido validado e tenha sido constatado campos invlidos if ($_SESSION["erro_aut"]) { echo " <table align=center> <tr> <td><font color=\"red\">Usuário ou senha inválidos!</font><br><br></td> </tr> </table> "; } Diviso de Servios Comunidade Centro de Computao Unicamp 37 PHP ntermedirio // Limpar a varivel "erro_aut" de $_SESSION unset($_SESSION["erro_aut"]); ?> <!-- Monta os campos do formulrio --> <table> <tr> <td>Usuário: </td><td><input type="text" name="usuario" size="20"></td> </tr> <tr valign="top"> <td>Senha: </td><td><input type="password" name="senha" size="20"><br><br></td> </tr> <tr valign="top"> <td><input type="submit" name="submit" size="20" value=" Autenticar "></td><td> </td> </tr> </table> </form> <?php // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> autentica9src/p,p Este script faz a autenticao do usurio junto ao banco de dados: <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o arquivo especificado include("misc.php"); include("funcoes.php"); // Recebe os dados do formulrio e guarda em variveis locais $log_user = $_POST["usuario"]; $sen_user = $_POST["senha"]; // Monta a instruo sql $instr_sql = "select email, tipo_usuario from usuarios where login='$log_user' and senha='$sen_user'"; // Executa a instruo sql $exec_sql = pg_query($instr_sql); // Utiliza a funo pg_fetch_assoc() para buscar o resultado de uma linha e coloc-lo numa matriz associativa $reg_user_aut = pg_fetch_assoc($exec_sql); if ($reg_user_aut) Diviso de Servios Comunidade Centro de Computao Unicamp 38 PHP ntermedirio { // Se encontrou registro, guarda os dados obtidos em variveis de sesso e chama o prximo script $_SESSION["usuario_sys"] = $log_user; $_SESSION["email_usuario_sys"] = $reg_user_aut["email"]; $_SESSION["tipo_usuario_sys"] = $reg_user_aut["tipo_usuario"]; //print_r($_SESSION); // Funo header chama outro script sem retornar para o script chamador header("Location: pagina_principal.php"); } else { // Se no encontrou registro, ativa a varivel de erro e chama o script anterior $_SESSION["erro_aut"] = "1"; // Funo header chama outro script sem retornar para o script chamador header("Location: index.php"); } ?> pagina9principal/p,p Esse script exibe a pgina inicial do sistema aps a autenticao do usurio: <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("misc.php"); include ("funcoes.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); ?> Diviso de Servios Comunidade Centro de Computao Unicamp 39 PHP ntermedirio <b>Objetivo</b><br><br> Esse sistema registra e armazena informações referentes aos chamados feitos pelos usuários e aos atendimentos realizados pela equipe técnica. Também disponibiliza a consulta dos dados armazenados.<br><br></td> <?php // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> 8<dulo de inclus7o de c&amados %orm_c+amado!p+p Esse script exibe o formulrio que receber os dados do chamado. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("funcoes.php"); include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); ?> <strong><font color="#264989">Incluir Chamado</font></strong> <?php // Exibe mensagem de erro caso o formulrio j tenha sido validado e tenha sido constatado campos em branco if ($_SESSION["erro"]) { echo ('<BR><BR><font color="#CC0033"><b>Campos Diviso de Servios Comunidade Centro de Computao Unicamp 40 PHP ntermedirio Obrigatórios não Preenchidos</b></font><BR>'); $problema = trim($_SESSION["problema"]); $equipe_acionada = trim($_SESSION["equipe_acionada"]); unset($_SESSION["erro"]); unset($_SESSION["problema"]); unset($_SESSION["equipe_acionada"]); } ?> <!-- Monta os campos do formulrio --> <FORM method="post" action="incluir_chamado.php"> <P><b>Usuário: </b><?php echo $_SESSION["usuario_sys"]; ?> <br><br> <b>E-mail: </b> <?php echo $_SESSION["email_usuario_sys"]; ?>
<BR> <INPUT name="sub" type="SUBMIT" value="Enviar Dados"> </form> <?php // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> Diviso de Servios Comunidade Centro de Computao Unicamp 41 PHP ntermedirio incluir9c,a$ado/p,p Esse script vai receber os dados do formulrio, fazer as devidas consistncias e gravar esses dados na tabela 'chamados'. Se o processamento for Ok ser enviada uma mensagem utilizando a funo mail, passando como parmetros o destinatrio, o assunto, o corpo da mensagem e cabealhos adicionais. Saiba mais sobre algumas funes que sero utilizadas no script a seguir trim: tira espaos em branco no incio e no final de uma varivel. header: chama outro script, podendo passar parmetros e no retorna ao script chamador. Nenhum comando de exibio (echo, include, tags html) pode ser executado antes dessa funo. mail: envia mensagens por e-mail de acordo com os parmetros utilizados. or die: expresso que pode ser usada como uma alternativa para o if/else. Finaliza a execuo do script. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o arquivo especificado include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Recebe variveis globais e campos do formulrio e armazena em variveis locais $usuario = $_SESSION["usuario_sys"]; $email = $_SESSION["email_usuario_sys"]; $problema = trim($_POST["problema"]); $equipe_acionada = trim($_POST["equipe_acionada"]); //echo 'problema = '.$problema; // Consiste se o campo do formulrio est em branco if (!$problema) { $_SESSION["problema"] = $problema; $_SESSION["equipe_acionada"] = $equipe_acionada; $_SESSION["erro"] = 1; header("location: form_chamado.php"); } else { // A instruo include () inclui e avalia o arquivo especificado Diviso de Servios Comunidade Centro de Computao Unicamp 42 PHP ntermedirio include ("funcoes.php");
// Obtm a data da ocorrncia // data no formato dd/mm/aaaa para exibio $data_exib = date("d/m/Y"); // data no formato aaaa/mm/dd para ser gravada no banco $data_chamado = date("Y").'-'.date("m").'-'.date("d"); // Obtm a hora da ocorrncia $hora_chamado = date("H:i:s"); // Inclui os dados na tabela chamados - Monta a primeira instruo sql $instr_sql = "INSERT into chamados (data_chamado, hora_chamado, usuario, email, problema, equipe_acionada) values ('$data_chamado', '$hora_chamado', '$usuario', '$email', '$problema', '$equipe_acionada')"; // se a execuo da instruo sql foi OK, recupera os dados para exibio e para enviar por e-mail if (pg_query($instr_sql)) { // Monta a segunda instruo sql $instr_sql2 = "SELECT num_chamado from chamados where email = '$email' and data_chamado = '$data_chamado' and hora_chamado = '$hora_chamado'"; // Executa a segunda instruo sql $exec_sql2 = pg_query ($instr_sql2) or die ("Erro no acesso ao banco"); // Utiliza a funo pg_fetch_assoc() para buscar o resultado de uma linha e coloc-lo numa matriz associativa $row = pg_fetch_assoc($exec_sql2); $num_chamado = $row["num_chamado"]; // envia um e-mail para o responsvel pelo atendimento com os dados do chamado $var_mail = mail ("cursophp2@bol.com.br", "SRC - Um Novo Chamado foi Incluido", "Mais Informaes Nmero do Chamado: $num_chamado Data do Chamado: $data_exib Hora do Chamado: $hora_chamado Usurio: $usuario E-mail: $email Problema: $problema Equipe Acionada: $equipe_acionada","SRC - Sistema de Registro de Chamados"); // var_dump ($var_mail); // exit; $_SESSION["msg_exib"] = "incluir_chamado_ok"; $_SESSION["data_exib"] = $data_exib; $_SESSION["hora_chamado"] = $hora_chamado; $_SESSION["num_chamado"] = $num_chamado; header("Location: exibe_mensagem.php"); } // se a execuo da instruo sql deu erro else { $_SESSION["msg_exib"] = "incluir_chamado_erro"; Diviso de Servios Comunidade Centro de Computao Unicamp 43 PHP ntermedirio header("Location: exibe_mensagem.php"); } } ?> e%ibe9$ensage$/p,p No indicado exibirmos as mensagens finais em um script que acessa banco de dados, pois se o usurio clicar no boto "atualizar do navegador, o script ser processado novamente. Por isso, criaremos um script somente para exibir as mensagens finais. Esse script ser chamado por intermedio da funo header. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("funcoes.php"); include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); / ****************************************************************** ********** Exibe mensagens referentes aos mdulos Incluir Chamado e Incluir Atendimento ***************************************************************** ***********/ switch ($_SESSION["msg_exib"]) { case "incluir_chamado_ok": $data_exib = trim($_SESSION["data_exib"]); $hora_chamado = trim($_SESSION["hora_chamado"]); $num_chamado = trim($_SESSION["num_chamado"]); echo "<BR><BR> <center> <b><font color=\"#CC0033\"> Processado com Diviso de Servios Comunidade Centro de Computao Unicamp 44 PHP ntermedirio Sucesso </font></b></center><BR> <center>Data: $data_exib</center><BR> <center>Hora: $hora_chamado</center><BR> <center>Número do Chamado: $num_chamado </center><br><br> <center> <b> <a href=\"form_chamado.php\">Voltar</a> </b> </center>"; unset($_SESSION["data_exib"]); unset($_SESSION["hora_chamado"]); unset($_SESSION["num_chamado"]); unset($_SESSION["msg_exib"]); break; case "incluir_chamado_erro": echo "<BR><BR> <center><b><font color=\"#CC0033\"> Erro no Processamento </font></b></b> </center> <BR><BR><center> <b> <a href=\"form_chamado.php\">Voltar</a> </b> </center>"; unset($_SESSION["msg_exib"]); break; case "incluir_atendimento_ok": echo "<BR><BR> <center><b><font color=\"#CC0033\"> Processado com Sucesso </font></b></b> </center> <BR><BR><center> <b> <a href=\"form_atendimento.php\">Voltar</a> </b> </center>"; unset($_SESSION["msg_exib"]); break; case "incluir_atendimento_erro": echo "<BR><BR> <center><b><font color=\"#CC0033\"> Erro no Processamento</font></b></b> </center> <BR><BR><center> <b> <a href=\"form_atendimento.php\">Voltar</a> </b> </center>"; unset($_SESSION["msg_exib"]); break; } // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> "estando o $(dulo de incluso de c,a$ados Dei(e os campos do %ormulrio em ,ranco! Jlique em enviar! Dever e(i,ir uma mensagem de erro! .reenc+a os campos do %ormulrio e clique no ,ot'o enviar! Dever e(i,ir a mensagem K.rocessado com SucessoL$Munto com a data)+ora da inclus'o e o nNmero do c+amado! Diviso de Servios Comunidade Centro de Computao Unicamp 45 PHP ntermedirio 8<dulo de registro de atendimentos #or$9atendi$ento/p,p Este script exibe o formulrio inicial de atendimento, utilizado para obter o nmero do chamado. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("funcoes.php"); include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); ?>
<?php // Exibe mensagem de erro caso o formulrio j tenha sido validado e tenha sido constatado campo em branco if ($_SESSION["erro_atend"]) { echo '<BR><strong><font color="#CC0033"> Preencha o número do chamado</font></strong><BR><BR>'; unset($_SESSION["erro_atend"]); }
?> <!-- Monta os campos do formulrio --> <form method="post" action="registrar_atendimento.php"> <p><strong>Número do Chamado</strong>: <input type="text" name="num_chamado" size="10" maxlength="20"></p><p> <input type="submit" name="Submit" value="Enviar"></p> </form> Diviso de Servios Comunidade Centro de Computao Unicamp 46 PHP ntermedirio <center> <strong> <a href="pagina_principal.php">Home</a> </strong> </center></font> <?php // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> registrar9atendi$ento/p,p Esse script recebe o dado do formulrio, faz a consistncia, obtm dados do chamado e chama o script registrar_atendimento2.php, que vai exibir o formulrio completo de atendimento. Saiba mais sobre algumas funes que sero utilizadas no script a seguir pg_num_rows: obtem o nmero de registros que retornou do select. pg_fetch_assoc: obtem os campos do registro que retornou do select, usando como ndice o nome do campo. pg_fetch_row: obtem os campos do registro que retornou do select, da mesma forma que o comando anterior, mas utiliza um ndice seqencial, comeando do valor zero. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o arquivo especificado include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Recebe os dados do formulrio e guarda em variveis locais $num_chamado = trim($_POST["num_chamado"]); // Consiste se nmero do chamado est em branco if (!$num_chamado) { $_SESSION["erro_atend"] = 1; header("location: form_atendimento.php"); } else { // Monta a instruo sql Diviso de Servios Comunidade Centro de Computao Unicamp 47 PHP ntermedirio $instr_sql = "SELECT usuario, email, data_chamado, hora_chamado, problema, equipe_acionada from chamados where num_chamado = '$num_chamado'"; // Executa a instruo sql $exec_sql = pg_query($instr_sql) or die ("Erro no acesso ao banco"); $achou = pg_num_rows($exec_sql); // Se encontrou registro, guarda os dados em variveis de sesso que sero utilizadas no prximo script if ($achou > 0) { $reg = pg_fetch_assoc($exec_sql); $data_chamado = $reg["data_chamado"]; $_SESSION["hora_chamado"] = $reg["hora_chamado"]; $_SESSION["problema"] = $reg["problema"]; $_SESSION["equipe_acionada"] = $reg["equipe_acionada"]; $_SESSION["usuario"] = $reg["usuario"]; $_SESSION["email"] = $reg["email"];
//Coloca a data do chamado em formato de exibio (de aaaa-mm-dd para dd/mm/aaaa) $dt = explode("-",$data_chamado); $dt2 = mktime(0,0,0,$dt[1],$dt[2],$dt[0]); $data_exib = date("d/m/Y",$dt2); $_SESSION["num_chamado"] = $num_chamado; $_SESSION["data_exib"] = $data_exib; header("location: registrar_atendimento2.php"); } // Se no encontrou registro, exibe mensagem else { // A instruo include () inclui e avalia o arquivo especificado include ("funcoes.php"); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); echo ' <BR><BR> <center> <strong><font color="#CC0033">Número de chamado não cadastrado</font></strong></center><BR><BR> <center> <strong> <a href="form_atendimento.php">Voltar</a> </strong> </center> <BR><BR><BR><BR> </td> </tr> </table>'; // Funo definida no script funcoes.php Diviso de Servios Comunidade Centro de Computao Unicamp 48 PHP ntermedirio responsvel por montar o rodap da pgina monta_rodape(); } } ?> registrar9atendi$ento:/p,p Esse script vai exibir os dados do chamado juntamente com o formulrio de atendimento. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("funcoes.php"); include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Guarda dados das variveis de sesso em variveis locais $num_chamado = $_SESSION["num_chamado"]; $usuario = $_SESSION["usuario"]; $email = $_SESSION["email"]; $data_exib = $_SESSION["data_exib"]; $hora_chamado = $_SESSION["hora_chamado"]; $problema = $_SESSION["problema"]; $equipe_acionada = $_SESSION["equipe_acionada"]; // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); echo '<b><font color="#264989">Registrar Atendimento</font></b><BR><BR>';
// O bloco condicional a seguir vlido para quando esse script for chamado pelo registrar_atendimento3.php if ($_SESSION ["consist"] == 1 || $_SESSION ["consist"] == 2) { $dia = trim($_SESSION["dia"]); $mes = trim($_SESSION["mes"]); $ano = trim($_SESSION["ano"]); $responsavel = trim($_SESSION["responsavel"]); $equipe_responsavel = Diviso de Servios Comunidade Centro de Computao Unicamp 49 PHP ntermedirio trim($_SESSION["equipe_responsavel"]); $solucao = trim($_SESSION["solucao"]); if ($_SESSION["consist"] == 1) { echo ('<BR><b><font color="#CC0033">Campo(s) obrigatorio(s) nao preenchido(s)</font></b><p>'); unset($_SESSION["consist"]); } if ($_SESSION["consist"] == 2) { echo ('<BR><BR><b><font color="#CC0033">Data invalida</font></b><p>'); unset($_SESSION["consist"]); } } // Exibe dados do chamado e monta o formulrio para registrar atendimento echo " <b> Numero do chamado: </b>$num_chamado<BR> <b> Usuario: </b> $usuario <BR> <b> E-mail: </b> $email <BR> <b> Data: </b> $data_exib <BR> <b> Hora: </b> $hora_chamado <BR> <b> Problema: </b> $problema <BR> <b> Equipe acionada: </b> $equipe_acionada <BR><BR><HR> <form method=post action=registrar_atendimento3.php> <p><b>Data do Atendimento </b> <BR>(formato dd/mm/aaaa) <table BORDER width=\"580\" > <tr> <td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">Data : <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>"; // Se a primeira vez que executa o script inicializa o campo, caso contrrio exibe o contedo do campo if (!$responsavel) { echo '<table width="400"> <tr> <td> <b><font face="Verdana, Arial, Helvetica, sans- serif" size="2">Responsável :</font></b> <select NAME="responsavel" > <option value="Paulo">Paulo</option> <option value="Carlos">Carlos</option> <option value="Eduardo">Eduardo</option> <option value="Cristina">Cristina</option> <option value="Jose">Jose</option> <option value="Marcos">Marcos</option> Diviso de Servios Comunidade Centro de Computao Unicamp 50 PHP ntermedirio <option value="Ricardo">Ricardo</option> </select> </td> </tr> </table>'; } else { echo "<table width=\"400\"> <tr> <td> <b><font face=\"Verdana, Arial, Helvetica, sans- serif\" size=\"2\">Responsável :</b> $responsavel </font><br><br> <input type=\"hidden\" name=\"responsavel\" value=\"$responsavel\"> </td> </tr> </table>"; } // Se a primeira vez que executa o script inicializa o campo, caso contrrio exibe o contedo do campo if (!$equipe_responsavel) { echo '<table width="400"> <tr> <td><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Equipe Responsável:</font></b> <select NAME="equipe_responsavel"> <option value="suporte">Suporte</option> <option value="conectividade">Conectividade</option> <option value="desenvolvimento">Desenvolvimento</option> <option value="producao">Producao</option> </select> </td> </tr> </table>'; } else { echo "<table width=\"400\"> <tr> <td><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">Equipe Responsável: </b>$equipe_responsavel</font> <input type=\"hidden\" name=\"equipe_responsavel\" value=\"$equipe_responsavel\"> </td> </tr> </table>"; Diviso de Servios Comunidade Centro de Computao Unicamp 51 PHP ntermedirio } // Se a primeira vez que executa o script inicializa o campo, caso contrrio exibe o contedo do campo if (!$solucao) { echo '<p><b>Solução:</b> <br> <textarea name="solucao" type=text rows=5 cols=50></textarea>'; } else { echo "<p><b>Solução :</b> $solucao<br> <input type=\"hidden\" name=\"solucao\" value=\"$solucao\">"; } // Passa alguns dados do chamado para o script seguinte por meio de campos escondidos echo "<input type=\"hidden\" name=\"num_chamado\" value=\"$num_chamado\"> <input type=\"hidden\" name=\"email\" value=\"$email\"> <center> <p> <input name=\"sub\" type=\"SUBMIT\" value=\"Enviar Dados\"> <br></font></center> </form> "; // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> Saiba mais sobre algumas funes que sero utilizadas no script a seguir checkdate: faz consistncia de datas, inclusive checa anos bissextos. Recebe como parmetros: ms, dia e ano (nessa ordem). Os valores dos parmetros tem que ser inteiros. registrar9atendi$ento;/p,p Esse script vai consistir os campos do formulrio de atendimento, gravar os dados na tabela 'atendimentos' e enviar uma mensagem com as informaes do atendimento para o usurio que abriu o chamado. <?php // Inicializar a sesso session_start(); Diviso de Servios Comunidade Centro de Computao Unicamp 52 PHP ntermedirio // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("funcoes.php"); include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Recebe os dados do formulrio e guarda em variveis locais $num_chamado = trim($_POST["num_chamado"]); $email = trim($_POST["email"]); $dia = trim($_POST["dia"]); $mes = trim($_POST["mes"]); $ano = trim($_POST["ano"]); $responsavel = trim($_POST["responsavel"]); $equipe_responsavel = trim($_POST["equipe_responsavel"]); $solucao = trim($_POST["solucao"]); // Prepara a data para consistncia $var_data = checkdate((int)$mes, (int)$dia, (int)$ano); // Consiste se campos obrigatrios foram preenchidos if (!$dia || !$mes || !$ano || !$responsavel || ! $equipe_responsavel || !$solucao) { $_SESSION["consist"] = 1; $_SESSION["num_chamado"] = $num_chamado; $_SESSION["email"] = $email; $_SESSION["dia"] = $dia; $_SESSION["mes"] = $mes; $_SESSION["ano"] = $ano; $_SESSION["responsavel"] = $responsavel; $_SESSION["equipe_responsavel"] = $equipe_responsavel; $_SESSION["solucao"] = $solucao; header("location: registrar_atendimento2.php"); } // Consiste data elseif (!$var_data) { $_SESSION["consist"] = 2; $_SESSION["num_chamado"] = $num_chamado; $_SESSION["email"] = $email; $_SESSION["dia"] = $dia; $_SESSION["mes"] = $mes; $_SESSION["ano"] = $ano; $_SESSION["responsavel"] = $responsavel; $_SESSION["equipe_responsavel"] = $equipe_responsavel; $_SESSION["solucao"] = $solucao; header("location: registrar_atendimento2.php"); } // Se os dados recebidos esto OK else { // Formata a data para ser gravada no banco (aaaa-mm-dd) Diviso de Servios Comunidade Centro de Computao Unicamp 53 PHP ntermedirio $data_atendimento = $ano."-".$mes."-".$dia; // Monta a instruo sql $instr_sql = "INSERT into atendimentos (num_chamado, data_atendimento, responsavel, equipe_responsavel, solucao) values ('$num_chamado', '$data_atendimento', '$responsavel', '$equipe_responsavel', '$solucao')"; // Executa a instruo sql if (pg_query($instr_sql)) { // formata a data para exibio (dd/mm/aaaa) $data_atendimento = $dia."/".$mes."/".$ano; // Retorna um e-mail para quem abriu o chamado mail ("$email", "SRC - O chamado $num_chamado foi atendido", "Aviso: O chamado $num_chamado foi atendido. Mais Informaes: Data do atendimento: $data_atendimento Responsel: $responsavel Equipe Responsvel: $equipe_responsavel Soluo: $solucao","SRC - Sistema de Registro de Chamados"); $_SESSION["msg_exib"] = "incluir_atendimento_ok"; header("Location: exibe_mensagem.php"); } else { $_SESSION["msg_exib"] = "incluir_atendimento_erro"; header("Location: exibe_mensagem.php"); } } ?> e%ibe9$ensage$/p,p Para completar o processamento necessrio chamar o script que exibe as mensagens finais: exibe_mensagem.php (cujo cdigo est descrito nas pginas 42 e 43 ). "estando o $(dulo de registro de atendi$entos Dei(e o campo O7Nmero do J+amadoP do %ormulrio em ,ranco! Dever e(i,ir uma mensagem de erro! 7o campo O7Nmero do J+amadoP do %ormulrio$ digite um nNmero ine(istente! Dever e(i,ir uma mensagem de erro! 7o campo O7Nmero do J+amadoP do %ormulrio$ digite um nNmero vlido! Dever e(i,ir o %ormulrio completo para o registro do atendimento! Diviso de Servios Comunidade Centro de Computao Unicamp 54 PHP ntermedirio 7o %ormulrio completo dei(e os campos o,rigat-rios em ,ranco! Dever e(i,ir uma mensagem de erro! 7o %ormulrio completo digite datas invlidas no campo OData do atendimentoP! Dever e(i,ir uma mensagem de erro! .reenc+a o %ormulrio completo com dados vlidos! Dever e(i,ir a mensagem O.rocessado com sucessoP! 8<dulo de consulta consulta9c,a$ados9periodo/p,p Este script exibe o formulrio de consulta, que pede um intervalo de datas. <?php // Inicializar a sesso session_start(); // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("funcoes.php"); include ("misc.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); ?>
<b>Consulta chamados ocorridos num determinado período</b>
<?php // Exibe mensagem de erro caso o formulrio j tenha sido validado e tenha sido constatado alguma data invlida if ($_SESSION["consist"] == 1) { $dia_ini = trim($_SESSION["dia_ini"]); $mes_ini = trim($_SESSION["mes_ini"]); $ano_ini = trim($_SESSION["ano_ini"]); $dia_fim = trim($_SESSION["dia_fim"]); Diviso de Servios Comunidade Centro de Computao Unicamp 55 PHP ntermedirio $mes_fim = trim($_SESSION["mes_fim"]); $ano_fim = trim($_SESSION["ano_fim"]); echo ('<BR><BR><b><font color="#CC0033">Data(s) inválidas(s)</font></b>'); unset($_SESSION["consist"]); } ?> <form method="post" action="consulta_chamados_periodo2.php"> <p> <b> Entre com o período: </b><BR><BR> <b>De:</b> dia
</p> <center><p> <input name="sub" type="SUBMIT" value="Enviar Dados"> <br> </center> <?php // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); ?> consulta9c,a$ados9periodo:/p,p Este script consiste os campos recebidos do formulrio, faz uma consulta s tabelas 'chamados' e 'atendimentos' e exibe os dados obtidos. <?php // Inicializar a sesso session_start(); Diviso de Servios Comunidade Centro de Computao Unicamp 56 PHP ntermedirio // A instruo include () inclui e avalia o(s) arquivo(s) especificado(s) include ("misc.php"); include ("funcoes.php"); // Funo que verifica se o usurio se autenticou antes de acessar essa pgina ver_session(); // Recebe os dados do formulrio e guarda em variveis locais $dia_ini = trim($_POST["dia_ini"]); $mes_ini = trim($_POST["mes_ini"]); $ano_ini = trim($_POST["ano_ini"]); $dia_fim = trim($_POST["dia_fim"]); $mes_fim = trim($_POST["mes_fim"]); $ano_fim = trim($_POST["ano_fim"]); // Checa se a data de inicio e data de fim so vlidas $var_data_ini = checkdate((int)$mes_ini, (int)$dia_ini, (int) $ano_ini); $var_data_fim = checkdate((int)$mes_fim, (int)$dia_fim, (int) $ano_fim); // Consiste as datas de incio e de fim if (!$var_data_ini || !$var_data_fim) { $_SESSION["consist"] = 1; $_SESSION["dia_ini"] = $dia_ini; $_SESSION["mes_ini"] = $mes_ini; $_SESSION["ano_ini"] = $ano_ini; $_SESSION["dia_fim"] = $dia_fim; $_SESSION["mes_fim"] = $mes_fim; $_SESSION["ano_fim"] = $ano_fim; // Funo header chama outro script sem retornar para o script chamador header("location: consulta_chamados_periodo.php"); } // converte as datas para o formato Unix/timestamp para compar- las entre si $data_ini = mktime(0,0,0,$mes_ini,$dia_ini,$ano_ini); $data_fim = mktime(0,0,0,$mes_fim,$dia_fim,$ano_fim); // Compara as datas de incio e de fim if ($data_ini > $data_fim) { $_SESSION["consist"] = 1; $_SESSION["dia_ini"] = $dia_ini; $_SESSION["mes_ini"] = $mes_ini; $_SESSION["ano_ini"] = $ano_ini; $_SESSION["dia_fim"] = $dia_fim; $_SESSION["mes_fim"] = $mes_fim; $_SESSION["ano_fim"] = $ano_fim; // Funo header chama outro script sem retornar para o script chamador header("location: consulta_chamados_periodo.php"); Diviso de Servios Comunidade Centro de Computao Unicamp 57 PHP ntermedirio } else { //adiciona um zero a esquerda nos valores de 1 a 9 //se for digitado 1 nos campos dia ou ms,transforma para 01 $dia_ini = strftime("%d",$data_ini); $mes_ini = strftime("%m",$data_ini); $ano_ini = strftime("%Y",$data_ini); $dia_fim = strftime("%d",$data_fim); $mes_fim = strftime("%m",$data_fim); $ano_fim = strftime("%Y",$data_fim); //Converte as datas para o formato aaaa-mm-dd $data_ini = $ano_ini."-".$mes_ini."-".$dia_ini; $data_fim = $ano_fim."-".$mes_fim."-".$dia_fim;
//Converte as datas para o formato dd/mm/aaaa $data_ini_exib = $dia_ini."/".$mes_ini."/".$ano_ini; $data_fim_exib = $dia_fim."/".$mes_fim."/".$ano_fim; // Monta a primeira instruo sql $instr_sql = "SELECT num_chamado, data_chamado, hora_chamado, usuario, email, problema, equipe_acionada from chamados where data_chamado >= '$data_ini' and data_chamado <= '$data_fim' order by num_chamado";
// Executa a instruo sql e verifica se encontrou algum registro $exec_sql = pg_query($instr_sql) or die ("Erro no acesso ao banco"); $achou = pg_num_rows($exec_sql); // Se encontrou, guarda as variaveis if ($achou > 0) { // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); echo "<div id='conteudo'><BR> <font color=\"#264989\"><b>Consulta chamados ocorridos no período de $data_ini_exib a $data_fim_exib</b></font> <br><a href=\"consulta_chamados_periodo.php\"><b>Voltar</b></a> "; // Executa enquanto houverem chamados while ($reg = pg_fetch_assoc($exec_sql)) { $num_chamado = $reg["num_chamado"]; $data_chamado = $reg["data_chamado"]; $hora_chamado = $reg["hora_chamado"]; $usuario = $reg["usuario"]; $email = $reg["email"]; $problema = $reg["problema"]; $equipe_acionada = $reg["equipe_acionada"]; Diviso de Servios Comunidade Centro de Computao Unicamp 58 PHP ntermedirio //Transforma a data do chamado obtida do banco para formato de exibio (de aaaa-mm-dd para dd/mm/aaaa) //utiliza as funces explode (retorna uma matriz de strings), mktime (converte a data para o formato Unix/timestamp) //e date (formata a data) $dt = explode("-",$data_chamado); $dt2 = mktime(0,0,0,$dt[1],$dt[2],$dt[0]); $data_chamado_exib = date("d/m/Y",$dt2); //Exibe os dados do chamado echo "<BR> <HR><BR> <b>Número do chamado: </b> $num_chamado <BR><BR> <b> Data do chamado: </b> $data_chamado_exib <BR> <b> Hora do chamado: </b> $hora_chamado <BR> <b> Usuário: </b> $usuario <BR> <b> E-mail: </b> $email <BR> <b> Problema: </b> $problema <BR> <b> Equipe acionada: </b> $equipe_acionada <BR> "; // Monta a segunda instruo sql $instr_sql2 = "SELECT data_atendimento, responsavel, equipe_responsavel, solucao from atendimentos where num_chamado = '$num_chamado'"; // Executa a instruo sql e verifica se encontrou algum registro $exec_sql2 = pg_query($instr_sql2) or die ("Erro no acesso ao banco"); $achou2 = pg_num_rows($exec_sql2); // Se encontrou, guarda as variaveis if ($achou2 > 0) { echo " <BR> <b>Atendimento</b> <BR><BR> "; //Executa enquanto houverem atendimentos // Utiliza a funo pg_fetch_row que retorna uma linha como um array enumerado while ($row2 = pg_fetch_row ($exec_sql2)) { $data_atendimento = $row2[0]; $responsavel = $row2[1]; $equipe_responsavel = $row2[2]; $solucao = $row2[3]; $dt_at = explode("-", $data_atendimento); $dt_at2 = mktime(0,0,0,$dt_at[1],$dt_at[2],$dt_at[0]); Diviso de Servios Comunidade Centro de Computao Unicamp 59 PHP ntermedirio $data_atendimento_exib = date("d/m/Y",$dt_at2); //Exibe os dados do atendimento echo "<b> Data do Atendimento: </b> $data_atendimento_exib <BR> <b> Responsável: </b> $responsavel <BR> <b> Equipe responsável: </b> $equipe_responsavel <BR> <b> Solução: </b> $solucao <BR><BR>"; } } // Se no encontrou nenhum atendimento para esse chamado exibe mensagem else { echo '<BR> Obs: Até o momento, nenhum atendimento foi registrado para esse chamado. '; } } echo "<b><a href=\"consulta_chamados_periodo.php\"><BR><BR> Voltar</a></b>"; } // Se no encontrou nenhum chamado para esse perodo else { // Funo definida no script funcoes.php responsvel por montar o cabealho da pgina monta_cabecalho(); // Funo definida no script funcoes.php responsvel por montar o menu lateral da pgina, recebe parmetros monta_menu($_SESSION["usuario_sys"], $_SESSION["tipo_usuario_sys"]); // Exibe mensagem echo ' <BR><BR> <center> <font color="#CC0033"> <b> Não existem chamados para esse período. </b> </font> </center><BR><BR> <center> <b> <a href="consulta_chamados_periodo.php">Voltar</a> </b> </center> <BR><BR><BR><BR>'; } // Funo definida no script funcoes.php responsvel por montar o rodap da pgina monta_rodape(); } ?> "estando o $(dulo de consulta Dei(e os campos o,rigat-rios do %ormulrio em ,ranco! Dever e(i,ir uma mensagem Diviso de Servios Comunidade Centro de Computao Unicamp 60 PHP ntermedirio de erro! Digite datas invlidas! Dever e(i,ir uma mensagem de erro! Digite um intervalo de datas vlido! Dever e(i,ir os dados resultantes da consulta! $x#ira!7o de sess7o logout/p,p Este script far a expirao da sesso quando o usurio sair do sistema: <?php // Inicializar a sesso session_start(); //Libera todas as variveis de sesso session_unset(); //Destri todos os dados registrados em uma sesso session_destroy(); //Retorna para a pgina de autenticao header("Location: index.php"); ?> $xerc(cios com#lementares 1) Fazer um script que altere o campo tipo_usuario do usuario3 na tabela de usurios: alterar de user2normal para user2atend. A sintaxe do comando sql para fazer a alterao de registros na tabela a seguinte: "UPDATE usuarios SET tipo_usuario='$variavel' WHERE login='usuario3'" 2) Fazer um script que exclua o registro referente ao usuario3 da tabela de usurios. A sintaxe do comando sql para fazer a excluso a seguinte: "DELETE from usuarios where login = '$variavel'" Diviso de Servios Comunidade Centro de Computao Unicamp 61 PHP ntermedirio 9icas 9ocumenta!7o Oicial do PHP http://www.php.net =onsulta a dicas e artigos do site PHP Brasil http://www.phpbrasil.com Para mais inorma!"es sobre o PostgreS;L> consulte o site) http://www.commandprompt.com/ppbook/ Diviso de Servios Comunidade Centro de Computao Unicamp 62