aula 3 com propostas
DESCRIPTION
TRANSCRIPT
INSTITUTO FEDERAL DE EDUCA�C~AO, CIENCIAE TECNOLOGIA DO CEAR�A
Novas Tecnologias paraInternet e Web
Material de Apoio
Jos�e Roberto BezerraDaniel Silva Ferreira
v1.0
2
Sum�ario
Pref�acio 5
1 Um pouco sobre HTML 7
1.1 P�aginas web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Hiperlinks, imagens e tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Formul�arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6 Exerc��cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 Come�cando em PHP 13
2.1 Mais um acronimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 O ambiente de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Iniciando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 Vari�aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6 Formul�arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6.1 M�etodos HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.6.2 Query string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7 Comparando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.8 Controle de uxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.9 Fun�c~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.10 Exerc��cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3 Coisas Importantes em PHP 29
3.1 Por que cookies ou sess~oes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3 Enviando cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4 Mais um superglobal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.5 Autenticando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.5.1 Banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.5.2 Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.5.3 Valida�c~ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.5.4 Logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Sess~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6.1 Registrando vari�aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.7 Bancos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.7.1 Criando Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.7.2 Tabela de Contatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.8 Exerc��cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3
4 SUM�ARIO
4 Estudo de Caso: Controle de Finan�cas Empresarial 39
4.1 Discutindo a aplica�c~ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.2 � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.3 Realizando Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Pref�acio
Este material foi produzido para servir de apoio a disciplina Novas Tecnologias Web do curso t�ecnicoa distancia em Inform�atica. Seu principal objetivo �e ser um guia que cont�em todo o conte�udo queser�a abordado durante a disciplina, mas que necessita ser complementado com outros materiais comov��deo aulas, livros, sites indicados, al�em dos mecanismos de aprendizagem dispon��veis na ferramenta(email, f�orum, etc).
5
6
Cap��tulo 1
Um pouco sobre HTML
Triste �epoca! �E mais f�acil desintegrar um �atomo do que um preconceito.
Albert Einstein
Antes de come�car o estudo sobre qualquer linguagem de programa�c~ao para web, �e necess�arioentender o funcionamento de um navegador. Os browsers, como Internet Explorer, Mozilla Firefox,Safari e outros, nada mais s~ao do que visualizadores de documentos HTML, ou seja, recebem arquivosHTML provenientes de um servidor web, interpretam e exibem o resultado para o usu�ario na formade hipertexto, imagens e tudo mais que pode ser visualizado atrav�es dos navegadores.
O HTML (Hypertext Markup Language) �e exatamente a maneira como as p�aginas web s~ao de-scritas. �E uma pseudo-linguagem, pois trata-se apenas de uma linguagem de marca�c~ao tamb�emchamadas de tags colocadas ao longo do conte�udo do documento. Estas marca�c~oes nada mais s~aodo que formata�c~oes na maneira como o conte�udo ser�a exibido pelo navegador como fontes, cores,tamanho, tabelas e demais elementos presentes na p�agina.
1.1 P�aginas web
Um site �e um conjunto de p�aginas web, que por sua vez, s~ao apenas arquivos HTML. Cada p�aginacont�em diversas tags que s~ao interpretadas pelos navegadores que exibem o conte�udo da maneirausual. Os navegadores n~ao exibem o conte�udo do documento HTML (fonte) diretamente, mas simsua interpreta�c~ao visual. Caso o usu�ario solicite, o c�odigo fonte da p�agina pode ser exibido pelonavegador. Para o Firefox ou Internet Explorer, basta selecionar ExibirjCodi�ca�c~ao que �e mostrado oc�odigo fonte da p�agina.
Abaixo, temos o primeiro exemplo de arquivo em HTML. Para visualiz�a-lo, basta salvar o con-te�udo mostrado na listagem 1.1 em um arquivo com a extens~ao .htm ou .html e abrir com qualquernavegador instalado no computador.
1 <html>
2 <body>
3 <h1>Hello , World</h1>
4 <p>Ola Mundo </p>
5 </body>
6 </html>
Listagem 1.1: Hello world na vers~ao HTML
Este pequeno documento de exemplo �e composto por 4 tags : <html>, <body>, <h1> e <p>. Asmarca�c~oes do documento HTML s~ao colocadas mescladas ao conte�udo. Cada marca�c~ao �e interpretadapelo navegador para exibir o conte�udo para o usu�ario da maneira indicada.
7
A primeira tag (<html>) inicia e �naliza qualquer documento HTML. Todas as outras tags devemestar entre tags <html></html>. Praticamente todas as tags necessitam ser fechadas com uma tagde mesmo nome acrescida de / no in��cio.
O que est�a entre <body> e </body> delimita o que �e chamado de corpo do documento, �e aparte vis��vel ao usu�ario. Apenas o que est�a entre tags <body> �e exibido na tela do navegador aousu�ario.
A tag <h1> formata o texto "Hello, World"como um cabe�calho de n��vel 1 (heading). H�a aindaoutros cinco n��veis formando os cabe�calhos <h2>, <h3>, <h4>, <h5> e <h6>. Sendo <h1> omais destacado e o <h6> o menos destacado.
Por �m, a tag <p> delimita um par�agrafo do conte�udo. O fechamento desta tag �e opcional.Assim, pode-se remover o </p> sem nenhum preju��zo �a exibi�c~ao.
1.2 Ferramentas
Para visualizar arquivos simples em HTML n~ao �e preciso nenhum software espec���co. Basta um editorde texto simples e o navegador para visualizar o resultado. Entretanto, a medida que a quantidadede p�aginas e a complexidade aumentam, ferramentas mais adequadas podem ser utilizadas para criaras p�aginas HTML de um site e facilitar o trabalho do desenvolvedor web.
Alguns exemplos de editores HTML livres s~ao o Blue�sh e o NVu. Do lado dos propriet�arios,temos o Dreamweaver, Cold Fusion e tamb�em o Visual Studio. Qualquer destas ferramentas atende asnecessidades do que ser�a abordado neste material, entretanto, as ferramentas livres s~ao prefer��veisdevido a facilidade de acesso.
1.3 Atributos
As tags s~ao complementadas atrav�es de atributos. Estes s~ao pares de nome de tag e valor atribu��doque seguem a seguinte sintaxe: nome=valor. Eles s~ao utilizados sempre na tag inicial e nunca nofechamento. Vejamos:
<a href="http://www.google.com.br">Buscador</a>
O atributo href indica o endere�co do hiperlink. O texto entre as tags �e a parte exibida para ousu�ario, no caso, "Buscador". Cada tag possui atributos espec���cos. Para uma referencia detalhadasobre os atributos pode-se consultar a descri�c~ao completa de cada um deles consultando o endere�coda W3 Schools.
A tag <font> �e utilizada para alterar parametros relacionados �a exibi�c~ao de fontes no navegador.Entretanto, o uso desta tag n~ao �e mais recomendado no HTML 4 e foi totalmente removida no HTML5. Atualmente, a recomenda�c~ao �e formatar as fontes atrav�es de folhas de estilo CSS (Cascading StyleSheets). Assim mesmo, ainda �e bom um exemplo para demonstrar o uso dos atributos. Na listagem1.2, observa-se que, mesmo utilizando as folhas de estilo CSS (citadas anteriormente) o resultadoobtido �e o mesmo.
1 <p>
2 < font s i ze ="5" face="arial" color ="red">
3 Este paragrafo esta em Arial , tamanho 5 e cor vermelha.
4 </ font >
5 </p>
6
7 <p>
8 < font s i ze ="3" face="verdana" color ="blue">
9 Este paragrafo esta em Arial , tamanho 3 e cor azul.
10 </ font >
11 </p>
Listagem 1.2: Exemplo de utiliza�c~ao da tag <font>
8
1 <p sty le ="font -family:arial;color:red;font -size :20px;">
2 Este paragrafo usa fonte Arial , tamanho 20 pixels e cor vermelha.
3 </ font >
4 </p>
5 <p sty le ="font -family:verdana;color :#10 A030;font -size :30px;">
6 Este paragrafo usa fonte Verdana , tamanho 30 pixels e cor especificada em RGB
7 </ font >
8 </p>
Listagem 1.3: Exemplo de formata�c~ao de com CSS
1.4 Hiperlinks, imagens e tabelas
Di�cilmente encontraremos um site na Internet, por mais simples que seja, sem encontrar hiperlinks,que �e a essencia do HTML. As imagens tamb�em est~ao sempre presentes e as tabelas s~ao fundamentaispara organizar e dar uma melhor organiza�c~ao ao conte�udo. Dominar o uso destas tags �e fundamentalpara o desenvolvimento de p�aginas de qualquer tipo.
Os conhecidos hiperlinks s~ao palavras ou imagens que ao serem clicadas levam a uma nova p�aginaou nova se�c~ao da mesma p�agina. Ao mover o ponteiro do mouse sobre um link, o ponteiro se altera,indicando a presen�ca de um hiperlink. A tag <a> �e utilizada para cria�c~ao de links em uma p�agina.O formato b�asico �e:
<a href="url">Texto do link</a>
O atributo href especi�ca o destino do link. Apenas o texto entre as tags �e exibido no navegador.Outro atributo bastante utilizado �e target. O exemplo a seguir abre a p�agina em uma nova janela:
<a href="http://www.google.com" target="\_blank">Buscador</a>
Para utilizar imagens nas p�aginas web �e necess�ario utilizar a tag <img> que n~ao necessita serfechada. O atributo src �e utilizado para indicar o caminho para o arquivo que ser�a exibido. Caso oarquivo esteja no mesmo diret�orio da p�agina, basta indicar o nome. Os principais formatos utilizadoss~ao: JPG, GIF e PNG. O valor do atributo alt �e exibido quando o mouse passa sobre a �gura.Abaixo �e mostrado um exemplo do uso de <img>:
<img src="boat.gif" alt="Imagem de um barco">
Tamb�em �e poss��vel alterar o tamanho de exibi�c~ao da imagem no navegador atrav�es dos atributosheigth e width, conforme exemplo a seguir. Caso estes atributos n~ao sejam atribu��dos a imagem �emostrada em seu tamanho real,sem amplia�c~oes ou redu�c~oes.
<img src="pulpit.jpg"alt="Pulpit rock"width="304"height="228"
Para utilizar imagens como hyperlinks, basta substituir o texto do link entre as tags por uma tag<img>. Assim, a imagem aparecer�a no navegador como link ao inv�es de texto.
As tabelas s~ao de�nidas com a tag <table>. Cada tabela possui linhas (<tr>) e c�elulas (<td>).O conte�udo da tabela �ca dentro das c�elulas. Pode conter texto, links, imagens, listas ou at�e mesmooutras tabelas. A listagem 1.4 exempli�ca o uso destas tags :
1 < table border="1">
2 < tr >
3 <td>linha 1, celula 1</td>
4 <td>linha 1, celula 2</td>
5 </ tr >
6 < tr >
7 <td>linha 2, celula 1</td>
8 <td>linha 2, celula 2</td>
9 </ tr >
10 </ table >
Listagem 1.4: Exemplo de tabela
9
1.5 Formul�arios
Formul�arios s~ao utilizados para passar informa�c~oes de uma p�agina a outra ou do usu�ario para oservidor, por exemplo. Um formul�ario deve conter elementos de entrada de dados como caixasde texto, checkbox, bot~oes de envio, listas de sele�c~ao e outros elementos dispon��veis. Para criarum formul�ario, utiliza-se a tag <form> que possui diversos atributos como action e name. Paraacrescentar elementos ao formul�ario, basta acrescentar uma tag <input> entre as tags <form>,segundo o exemplo a seguir.
1 <form name="pesquisa">
2 Primeiro Nome: < input type="text" name="firstname"><br>
3 Sobrenome: < input type="text" name="lastname">
4 < input type="radio" name="sex" value="masculino">Masculino <br>
5 < input type="radio" name="sex" value="feminino">Feminino <br>
6 Meios de Transporte que Utiliza:<br>
7 < input type="checkbox" name="vehicle" value="Bicicleta">Bicicleta <br>
8 < input type="checkbox" name="vehicle" value="Carro">Carro
9 </form>
Listagem 1.5: Exemplo de formul�ario com v�arios elementos
No exemplo anterior, o formul�ario �e de�nido com o nome pesquisa, conforme o atributo presentena tag <form>. Em seguida, est~ao presentes 6 elementos, sendo duas caixas de texto, dois bot~oesde r�adio e dois checkboxes, respectivamente.
Nas caixas de texto, o usu�ario pode ser inserido texto livremente. Os bot~oes de r�adio servem paraescolher uma op�c~ao entre v�arias dispon��veis. J�a o checkbox, deve ser utilizado para selecionar umaop�c~ao �unica dentre v�arias dispon��veis.
O formul�ario da listagem 1.5 ainda est�a incompleto. Faltam alguns elementos para torn�a-lofuncional. Para que isto aconte�ca, �e necess�ario que seja utilizado o atributo action da tag <form>.Este atributo indica o arquivo ou script que ir�a processar os dados passados pelo formul�ario.
Normalmente, os scripts s~ao processados no lado do servidor. O cliente (navegador) apenas enviaas informa�c~oes para um servidor na Internet ou localmente para que este realize todo o processamento(c�alculos, armazenamento, otimiza�c~ao, etc) da informa�c~ao e devolva uma resposta ao cliente.
Na listagem 1.6, o valor de action=html_form_action.php indica que este script em linguagemPHP realizar�a o processamento do formul�ario. Tamb�em foi acrescentado o bot~ao submit para enviaros dados do formul�ario para o arquivo indicado em action para processamento.
1 <form name="pesquisa" action="html_form_action.php" method="get">
2 Primeiro Nome: < input type="text" name="firstname"><br>
3 Sobrenome: < input type="text" name="lastname">
4 < input type="radio" name="sex" value="masculino">Masculino <br>
5 < input type="radio" name="sex" value="feminino">Feminino <br>
6 Meios de Transporte que Utiliza:<br>
7 < input type="checkbox" name="vehicle" value="Bicicleta"> Bicicleta <br>
8 < input type="checkbox" name="vehicle" value="Carro"> Carro<br>
9 < input type="submit" value="Enviar">
10 </form>
Listagem 1.6: Formul�ario com bot~ao de envio e action
10
1.6 Exerc��cios
1. Utilizando uma das ferramentas indicadas na se�c~ao 1.2, crie uma p�agina web pessoal (eu.html)contendo alguns de seus dados pessoais, como nome, cidade onde nasceu, data de nascimentoe informa�c~oes similares. Utilize tags <p> para inserir um ou mais par�agrafos com essas infor-ma�c~oes.
2. No exerc��cio do ��tem anterior, acrescente uma foto sua ao arquivo.
3. Ainda com rela�c~ao ao exerc��cio 1, acrescente, no �nal do arquivo, links para tres sites externoscom um texto em destaque Links Recomendados.
4. Ao �nal dos exerc��cios anteriores sua p�agina deve ter uma aparencia semelhante a �gura 1.1.
Figura 1.1: Screenshot de uma p�agina em HTML
5. Crie um arquivo html (tabela.html) que contenha as informa�c~oes mostradas na tabela 5. Utilizea tag <table> e demais tags relacionadas (<tr>, <td>, etc).
��tem descri�c~ao quantidade1 Notebook 22 Processador 103 Mouse 54 Monitor 11
Tabela 1.1: Lista de pre�cos
6. As tabelas podem ser utilizadas para organizar informa�c~oes em uma p�agina como pedido noexerc��cio 5. Outra utilidade das tabelas �e que permitem organizar a disposi�c~ao dos elementosde uma p�agina. O c�odigo HTML, mostrado na listagem 1.7, exempli�ca essa id�eia. Salve oc�odigo em um arquivo e visualize o resultado no navegador.
11
1 <html>
2 <head>
3 < t i t l e >Machado de Assis</ t i t l e >
4 </head>
5 <body>
6 <h1>Machado de Assis</h1>
7 < table >
8 < tr >
9 <td><img src ="../ figs/machado.jpg" width="200" height="246"></td>
10 <td><p><b>Joaquim Maria Machado de Assis</b>, nascido no Rio de Janeiro
11 em 21 de Junho de 1839.<br>
12 Considerado o grande nome da literatura nacional.</p>
13 <p>Nascido no morro do Livramento no Rio de Janeiro , de familia pobre ,
14 estudou em escolas publicas e nunca frequentou a universidade.</p>
15 </td>
16 </ tr >
17 < tr >
18 <td> </td>
19 <td><h3>Links Recomendados </h3>
20 <a href ="www.machadodeassis.org.br/">Academia Brasileira de Letras </a><br>
21 <a href ="http :// machado.mec.gov.br/">Obra Completa - MEC</a><br>
22 </td>
23 </ tr >
24 </ table >
25 </body>
26 </html>
Listagem 1.7: Exemplo do uso de tabelas para organizar os elementos da p�agina
7. Modi�que o c�odigo mostrada na listagem 1.7 para que a imagem seja exibida no lado direitoao inv�es do lado esquerdo. Pesquise na internet como modi�car a cor de fundo de uma tabelae aplique nesta p�agina.
8. Crie uma p�agina para o cadastramento (form.html) de um usu�ario na intranet de uma empresa.O formul�ario deve conter os campos: nome completo, setor (compras, vendas ou �nanceiro),nome do usu�ario e senha.
9. Dada a tag <body> mostrada abaixo, pesquise para que servem os atributos BGCOLOR,TEXT, LINK, ALINK e VLINK. Aplique-os na p�agina do exerc��cio 1.
<body bgcolor="#rrggbb" text="#rrggbb" link="#rrggbb"
alink="#rrggbb" VLINK="#rrggbb">
10. Diferencie os termos p�aginas est�aticas e p�aginas dinamicas relacionados a constru�c~ao desites em geral.
12
Cap��tulo 2
Come�cando em PHP
Estamos irrevogavelmente em um caminho que nos levar�a �as estrelas.
A n~ao ser que, por uma monstruosa capitula�c~ao ao ego��smo e �a estupidez,
acabemos nos destruindo.
Carl Sagan
Os iniciantes em desenvolvimento para web ou em tecnologia da informa�c~ao n~ao devem se assustarcom a quantidade de acronimos (siglas) existentes. ASP, CGI, SOAP, XML e HTTP s~ao algunsdeles. A lista pode ser acrescida de v�arios outros ��tens e pode parecer intermin�avel assustando osmenos experientes no assunto. Assim, para desenvolver um site com qualidade e principalmente comfuncionalidade um ��tem �e indispens�avel na lista, a linguagem de scripts PHP.
2.1 Mais um acronimo
O PHP �e uma linguagem de programa�c~ao voltada para web bastante conhecida. Trata-se da �unicalinguagem de scripts baseada em servidor que possui c�odigo aberto. �E bastante ex��vel e f�acil deaprender. Pesquisas mostram que milh~oes de websites utilizam a linguagem PHP como base parasuas aplica�c~oes. A raz~ao para isso �e a grande capacidade do PHP, �e uma linguagem poderosa, f�acil deusar e aprender al�em de ser livre. Al�em de ser extremamente robusta e escal�avel, pode ser utlizadaem aplica�c~oes de alta demanda com boas respostas. Possui suporte a diversos bancos de dados, aXML, permite a cria�c~ao de frameworks do pr�oprio programador e ainda excelente documenta�c~ao.Como se todas estas vantagens n~ao fossem su�cientes ainda �e gratuita.
2.2 O ambiente de desenvolvimento
Para que o PHP funcione, �e necess�ario combin�a-lo com um servidor web, tipicamente o Apache. Asrequisic~oes a scripts feitas pelo usu�ario ou aplica�c~ao s~ao recebidas pelo servidor web e manipuladaspelo interpretador PHP. O resultado obtido depois da execu�c~ao �e devolvido ao servidor web quetransmite a informa�c~ao para o cliente (navegador). O script �e o programa propriamente dito. �E ondeest�a escrito o c�odigo da aplica�c~ao que funciona na Internet. Nele, �e poss��vel fazer c�alculos, processarentradas do usu�ario, interagir com bancos de dados, ler e escrever em arquivos e tudo mais que umalinguagem de programa�c~ao �e capaz de realizar.
As atividades propostas neste material foram implementadas utilizando o PHP juntamente como servidor web Apache no sistema operacional Linux. Essa �e a combina�c~ao de ferramentas maiscomum para utilizar o PHP. Entretanto, existem vers~oes tanto do PHP quanto do Apache paraoutros sistemas operacionais como Windows e MacOS. Instru�c~oes detalhadas sobre a instala�c~ao eprepara�c~ao do ambiente de desenvolvimento para cada plataforma podem ser encontradas no manualdo PHP dispon��vel no endere�co:
13
http://www.php.net/manual/pt BR/install.php
.
2.3 Iniciando
A maneira mais simples de programar em PHP �e embutir o c�odigo da linguagem dentro de um arquivocontendo tags HTML. O c�odigo embutido nas p�aginas �e executado quando a p�agina �e carregada.
Os comandos da linguagem PHP devem estar sempre entre tags espec���cas indicando ao Apache
que os comandos entre estas tags devem ser processados pelo interpretador PHP. Observar a listagem2.1.
1 <?php
2
3 comandos PHP
4
5 ?>
Listagem 2.1: Tags da linguagem PHP
Um exemplo simples de como os comandos PHP s~ao colocados junto com HTML �e mostrado nalistagem 2.2.
1 <html >
2 <head >
3 <title >Matrix </title >
4 </head >
5 <body >
6
7 Agente: Quem voce pensa que e?
8 <br>
9
10 <?php
11 // saida mostrada
12 echo 'Neo: Eu sou Neo , mas me chamam de o escolhido.';
13 ?>
14
15 </body >
16 </html >
Listagem 2.2: PHP e HTML juntos
Executando-se o c�odigo mostrado na listagem 2.2 e abrindo o c�odigo HTML lido pelo navegador�e poss��vel observar que as tags PHP n~ao est~ao presentes. O que aconteceu? Quando a p�agina �e req-uisitada ao servidor web (Apache) pelo ciente web (navegador) esta �e interpretada pelo interpretadorPHP presente no servidor, que por sua vez, repassa o resultado na forma de um arquivo HTML que�e visualizado pelo navegador. Este processo est�a ilustrado na �gura 2.1. �E importante notar que a�gura ilustra o caso t��pico de um servidor que est�a sendo acessado atrav�es de uma rede interna ouda pr�opria Internet. O que pode ser chamado um ambiente de produ�c~ao. O que quer dizer que oselementos est~ao interagindo em um sistema real, em pleno funcionamento.
Em oposi�c~ao a um sistema de produ�c~ao, temos os sitemas de teste ou desenvolvimento em que,normalmente, todos os elementos citados anteriormente funcionam em uma �unica m�aquina, conformeilustrado na �gura 2.2. Estes sistemas s~ao utilizados para testar modi�ca�c~oes antes de serem colocadasem funcionamento no servidor de produ�c~ao e tamb�em para aprendizagem e estudos. Na �gura 2.2,s~ao mostrados dois processos: o cliente (navegador) e o servidor web. A troca de informa�c~oes entreeles se d�a atrav�es da interface de rede local ao inv�es da Internet que normalmente �e usada em umsistema de produ�c~ao. Desta maneira, n~ao �e necess�ario um servidor externo para aprendizagem outestes. Todas os processos envolvidos (navegador e servidor web) est~ao rodando na mesma m�aquina.
Para inserir coment�arios ao longo no c�odigo fonte em PHP, existem duas op�c~oes. Coment�ariosde apenas uma linha basta acrescentar //. J�a os coment�arios de v�arias linhas s~ao iniciados com /* e
14
Figura 2.1: Intera�c~ao entre cliente e servidor web com suporte a PHP
Figura 2.2: Sistema de desenvolvimento t��pico utilizando apenas uma m�aquina
�nalizados com */. As linhas em branco s~ao ignoradas, assim como qualquer caractere fora das tags.Os coment�arios seguem o mesmo padr~ao da linguagem C, que ali�as �e a base do PHP. Nos exemplosmostrados neste material, pode-se observar muitas semelhan�cas entre a sintaxe utilizada em ambasas linguagens.
1 <?php
2
3 // comentario de linha unica
4
5 /* comentario
6 de multiplas
7 linhas */
8 ?>
Listagem 2.3: Coment�arios em PHP
2.4 Vari�aveis
Assim como qualquer outra linguagem de programa�c~ao, o PHP tamb�em utiliza-se de vari�aveis paraarmazenar dados durante a execu�c~ao de um script. Armazernam dados num�ericos e n~ao num�ericos.Seu conte�udo pode mudar ao longo da execu�c~ao do script. Podem ser comparadas e o resultado dascompara�c~oes pode ser utilizado para disparar a�c~oes espec���cas como em qualquer outra linguagem.
15
PHP suporta uma grande quantidade de tipos de vari�aveis: inteiros, ponto utuante, strings ematrizes. Na grande maioria das linguagens, �e fundamental especi�car o tipo de vari�avel que est�asendo utilizada logo no in��cio do programa. O que �e conhecido como declara�c~ao de vari�aveis. No casoda linguagem PHP, o pr�oprio interpretador determina o tipo de vari�avel atrav�es do contexto em que�e utilizada. Inclusive, uma vari�avel pode ser tratada inicialmente como inteiro e durante a execu�c~aopassar a ser tratada como string. Isto, traz bastante exibilidade no uso de vari�aveis e conforto parao programador que n~ao necessita preocupar-se com a declara�c~ao das mesmas.
Cada vari�avel deve ser identi�cada por um nome. O nome de uma vari�avel �e precedido por $ eseguido por letra ou . S~ao exemplos de nomes de vari�aveis v�alidos: $popeye, $one e $INCOME. J�aos nomes $48hrs e $123 n~ao s~ao v�alidos. Os nomes tamb�em s~ao sens��veis ao caso, logo $me �e diferentede $ME.
Na listagem 2.4, �e mostrado um exemplo simples de utiliza�c~ao de vari�aveis em PHP. As vari�aveis$name, $rank e $serialNumber s~ao de�nidas como string e como n�umero, mas s~ao utilizadas comostring na chamada da fun�c~ao echo(). Assim, como printf(), echo() �e utilizada para exibir dadosna sa��da padr~ao. Na chamada da fun�c~ao echo(), ainda foram inclu��das tags HTML que ser~aoprocessadas pelo navegador.
1 <html >
2 <head >
3 <title >Matrix </title >
4 </head >
5 <body >
6
7 Agente: Quem voce pensa que e?
8 <br>
9
10 <?php
11 // define as variaveis
12 $name = 'Neo';
13 $rank = 'Anomalia ';
14 $serialNumber = 1;
15
16 // imprime saida
17 echo "Neo: Eu sou <b>$name </b>, o <b>$rank </b>.
18 Qual meu numero de serie , <b>$serialNumber </b>.";
19 ?>
20
21 </body >
22 </html >
Listagem 2.4: Vari�aveis em PHP
Para atribuir valor a uma vari�avel basta utilizar o sinal �a direita do nome da vari�avel seguido dovalor que deseja-se atribuir, conforme mostrado a seguir.
1 <?php
2
3 $old = 1;
4 $age = $old + 15;
5 $angle1 = $angle2 = $angle3 = 60;
6
7 ?>
Listagem 2.5: Atribui�c~ao em PHP
Os principais tipos de vari�aveis dispon��veis em PHP s~ao:
� Booleano (bool)
� Inteiro (int)
� Ponto utuante ( oat)
16
� String
� Vetores (arrays)
Para especi�car uma vari�avel como boolena basta atribuir as palavras-chave TRUE ou FALSE.�E o tipo de dado mais simples. Expressa um valor verdade. Tamb�em s~ao considerados falsos o valor0 (inteiro), 0.0 (ponto utuante), string vazia e um array sem elementos.
Os n�umeros inteiros s~ao compostos pelo conjunto Z = f:::� 2;�1; 0; 1; 2; :::g. Podem ser especi-�cados em base decimal, hexadecimal ou octal. Em octal �e necess�ario preceder o n�umero com 0. J�aem hexadecimal �e necess�ario preceder por 0x.
Os n�umeros em ponto utuante s~ao os chamados n�umeros reais. Utiliza-se o ponto para separara parte inteira da parte n~ao inteira ($a = 1.234). Tamb�em pode-se utilizar a nota�c~ao cient���ca ($a= 1.23e4 ou $b = 7E-10).
Uma string �e especi�cada utilizando-se aspas simples ($nome = 'maria') ou aspas duplas ($palavra= "word"). Por�em, no caso de aspas duplas, se uma vari�avel �e colocada entre as aspas o seu valor �esubstitu��do.
Um array em PHP �e considerado um mapa ordenado, ou seja, �e um tipo que relaciona valorespara chaves. Este tipo �e otimizado de v�arias maneiras, assim, �e poss��vel us�a-lo como um array real,ou uma lista (vetor), hashtable (que �e uma implementa�c~ao de mapa), dicion�ario, cole�c~ao, pilha, �lae provavelmente o que mais a criatividade do programador alcan�car.
Um array cont�em um certo n�umero de pares, separados por v��rgula, chave=>valor. A chavepode ser tanto um inteiro quanto uma string. Na listagem 2.6 �e mostrado um exemplo de utiliza�c~aodeste tipo.
1 <?php
2 $arr = array("foo" => "bar", 12 => true);
3
4 echo $arr["foo"]; // bar
5 echo $arr [12]; // 1
6 /$
7 ?>
Listagem 2.6: Atribui�c~ao de arrays em PHP
2.5 Operadores
A melhor maneira de se familiarizar com os operadores dispon��veis em uma linguagem �e utilizando-os.A seguir seguem exemplos de utiliza�c~ao de diversos operadores suportados pelo PHP.
1 <html >
2 <head >
3 </head >
4 <body >
5 <?php
6 // atribui valor a quantity
7 $quantity = 1000;
8 // atribui valor a preco original e preco corrente
9 $origPrice = 100;
10 $currPrice = 25;
11 // calcula a diferenca de precos
12 $diffPrice = $currPrice - $origPrice;
13 // calcula a percetagem
14 $diffPricePercent = (( $currPrice - $origPrice) * 100)/ $origPrice;
15 //$
16 ?>
17 <table border="1" cellpadding="5" cellspacing="0">
18 <tr>
19 <td>Quantidade </td>
20 <td>Preco de custo </td>
21 <td>Preco atual </td>
17
22 <td>Alteracao absoluta </td>
23 <td>Alteracao percentual </td>
24 </tr>
25 <tr>
26 <td ><?php echo $quantity ?></td >
27 <td ><?php echo $origPrice ?></td>
28 <td ><?php echo $currPrice ?></td>
29 <td ><?php echo $diffPrice ?></td>
30 <td ><?php echo $diffPricePercent ?>Percentual </td>
31 </tr>
32 </table >
33 </body >
34 </html >
Listagem 2.7: Principais operadores em PHP
O PHP tamb�em disponibiliza operadores bastante �uteis para realizar opera�c~oes com strings. Aconcatena�c~ao de strings �e feita com o operador (.). A listagem 2.8 exempli�ca a concatena�c~ao destrings utilizando esse operador.
1 <?php
2 // algumas strings
3 $a = 'os';
4 $b = 'jogos';
5 $c = 'iniciam ';
6 $d = 'agora';
7
8 // os valores sao combinados
9 // e retornado 'os jogos iniciam agora <br>'
10 $statement = $a.' '.$b.' '.$c.' '.$d.'<br />';
11 print $statement;
12
13 // outra variacao 'iniciam os jogos agora!'
14 $command = $c.' '.$a.' '.$b.' '.$d.'!';
15 print $command;
16 ?>
Listagem 2.8: Outros operadores �uteis em PHP
2.6 Formul�arios
O que torna o PHP uma linguagem para web �e sua caracter��stica pr�opria de receber entradas dousu�ario a partir de um formul�ario de uma p�agina web e converter os dados passados em vari�aveis.
O uso de formul�arios �e a maneira mais natural e simples de interagir com p�aginas web. Permitea intera�c~ao entre clientes e fornecedores atrav�es de toda o tipo de aplica�c~oes bastante conhecida naweb. Com�ercio eletronico e transa�c~oes banc�arias s~ao alguns dos exemplos de aplica�c~oes t��picas e todaselas utilizam-se de formul�arios para passar informa�c~oes. O PHP �e bastante �agil no recebimento dasinforma�c~oes passadas pelos clientes (navegadores) e process�a-las no servidor web.
A populariza�c~ao da Internet tornou os navegadores a ferramenta mais pr�atica para os usu�ariosinteragirem as aplica�c~oes disponibilizadas pelas empresas e institui�c~oes. Flexibilizou o acesso aosaplicativos, dispensando a necessidade de distribui�c~ao de arquivos execut�aveis, j�a que as aplica�c~oesest~ao dispon��veis em sites. A manuten�c~ao �e centralizada tirando do usu�ario o trabalho de atualizaro software instalado em sua m�aquina.
A seguir, temos o primeiro exemplo de uma aplica�c~ao em que s~ao passados dados atrav�es deum formul�ario para ser processado por um script em PHP. O exemplo �e composto de basicamentede dois scripts, o primeiro cont�em o formul�ario HTML (form.html) e o segundo cont�em a l�ogica deprocessamento (message.php).
18
1 <html >
2 <head ></head >
3 <body >
4 <form action="message.php" method="post">
5 Entre sua mensagem: <input type="text" name="msg" size="30">
6 <input type="submit" value="Enviar">
7 </form >
8 </body >
9 </html >
Listagem 2.9: form.html
O atributo action da tag <form> especi�ca o nome do script do lado do servidor (server-sidescript) que ser�a utilizado no processamento dos dados passados no formul�ario. O segundo atributomethod especi�ca a maneira como os dados ser~ao passados. O HTTP disp~oe basicamente de doism�etodos b�asicos para trocar informa�c~oes com formul�arios: GET e POST. Mais detalhes sobre essesm�etodos s~ao apresentados na se�c~ao 2.6.1
1 <html >
2 <head ></head >
3 <body >
4 <?php
5 // recebe dados do formulario
6 $input = $_POST['msg'];
7 // usa os dados
8 echo "Voce disse: <i>$input </i>";
9 ?>
10 </body >
11 </html >
12 /$
Listagem 2.10: message.php
Quando os dados s~ao passados atrav�es de form.html e submetidos, o script message.php le eexibe os dados segundo a l�ogica implementada. Assim, para cada formulario submetido a um scriptPHP os pares valor-vari�avel est~ao dispon��veis para uso no script atrav�es de uma vari�avel containerespecial, $ POST.
Obviamente, o PHP tamb�em suporta o m�etodo GET. No formul�ario, basta alterar o atributomethod para GET ao inv�es de POST. E para acessar o valor utilizar o container $ GET.
2.6.1 M�etodos HTTP
O HyperText Transfer Protocol (Protocolo de Transferencia de Hipertexto - HTTP) �e o protocolo decomunica�c~ao utilizado para a troca de dados entre um navegador e um servidor web. �E o protocolode comunica�c~ao que o usu�ario aciona quando digita um endere�co no seu navegador. A troca deinforma�c~oes entre os dois processos, cliente e servidor, �e feita por algum m�etodo disponibilizado peloHTTP. Os principais m�etodos associados �a transferencia de dados de formul�arios, s~ao fundamentais:o m�etodo GET e o m�etodo POST.
GET
O m�etodo GET �e acionado por meio de um formul�ario HTML atrav�es do atributo method=get
inclu��da na em uma tag <form>. Por meio desse m�etodo, os dados constantes no formul�ario s~aoprimeiramente transmitidos ao processo servidor e este, por sua vez, armazena os dados temporari-amente numa vari�avel de contexto denominada QUERY STRING (ver se�c~ao 2.6.2).
Quando um formul�ario HTML utiliza o m�etodo GET, o uxo de dados �e separado do endere�coURL que chama o script atrav�es de um ponto de interroga�c~ao (?). Esta forma de endere�camento esepara�c~ao pode ser observada no campo de endere�cos do navegador do usu�ario, logo ap�os o formul�arioter sido enviado, como mostrado a seguir.
\texttt{http://www.meusite.com/meuscript.cgi?nome=Maria&id=123}
19
POST
O m�etodo POST �e selecionado de forma similar ao GET no formul�ario, atrav�es do atributo method.Faz com que os dados do formul�ario sejam diretamente transmitidos ao endere�co que constar noatributo action. Um script, chamado por action, precisa extrair os dados atrav�es da entradapadr~ao (standart input) para poder obter os dados transmitidos pelo formul�ario. O conte�udo dasvari�aveis do formul�ario n~ao �ca exposto no campo de endere�co do navegador. O que �e consideradouma forma insegura de trocar informa�c~oes na Internet, por exemplo.
Normalmente, as aplica�c~oes web utilizam este m�etodo para trafegar os dados, justamente devidoa esse fragilidade do m�etodo GET.
2.6.2 Query string
Uma maneira alternativa de passar dados de uma p�agina para outra �e atrav�es do pr�oprio campode endere�co do navegador (URL). Esta forma de passar dados entre as p�aginas �e conhecida comoQuerystring. Est�a estruturada da seguinte forma:
http://servidor/pagina.html?var1=dado1&var2=dado2&var3=dado3
Ap�os o sinal de ? inicia-se a sequencia de nomes de vari�aveis seguido do sinal de = e os respectivosvalores das vari�aveis. N~ao pode haver espa�co em branco nesta sequencia. Para valores de strings quecontenham espa�cos em branco �e necess�ario substitu��-los pelo sinal +. Os pares vari�avel/valor s~aoseparados &.
A listagem 2.11 exempli�ca o uso de querystring. Salve o conte�udo em um arquivo PHP de nomeqse.php no diret�orio padr~ao do Apache e digite no campo de endere�co do navegador a seguinte URL.
http://localhost/qse.php?nome=ana&idade=12
1 <?php
2 $nome = $_REQUEST['nome'];
3 $idade = $_REQUEST['idade'];
4
5 echo $nome . " tem " . $idade . " anos de idade";
6 ?>
Listagem 2.11: Exemplo de script que utiliza query string
2.7 Comparando
Para agregar um pouco de inteligencia aos scripts �e necess�ario utilizar declara�c~oes condicionais, ouseja, fazer com que o script desempenhe a�c~oes baseadas no resultado de um teste de compara�c~ao.
Alguns operadores espec���cos para compara�c~ao podem ser utilizados. Na listagem 2.12 s~aomostrados alguns deles.
1 <?php
2 /* define duas variaveis */
3 $str = '10';
4 $int = 10;
5
6 /* retorna true , desde que ambas contenham o mesmo valor */
7 $result = ($str == $int);
8 print "resultado e $result <br>";
9
10 /* retorna false , desde que as variaveis nao sejam do mesmo tipo , mesmo contendo o mesmo valor */
11 $result = ($str === $int);
12 print "resultado e $result <br>";
13
14 /* returna true , desde que as variaveis tenham mesmo valor e tipo */
15 $anotherInt = 10;
20
16 $result = ($anotherInt === $int);
17 print "resultado e $result";
18 /$
19 ?>
Listagem 2.12: Operadores de compara�c~ao
Tamb�em est~ao dispon��veis no PHP os operadores l�ogicos: AND, OR, XOR e NOT. O uso destesoperadores �e ilustrado na listagem 2.13.
1 <?php
2 /* definicao de variaveis */
3 $auth = 1;
4 $status = 1;
5 $role = 4;
6
7 /* AND logico returna true se todas as condicoes sao true */
8 // returna true
9 $result = (($auth == 1) && ($status != 0));
10 print "resultado e $result <br>";
11
12 /* OR logico returna true se alguma condicao e true */
13 // returna true
14 $result = (( $status == 1) || ($role <= 2));
15 print "resultado e $result <br>";
16
17 /* NOT logico returna true se a condicao e false e vice -versa */
18 // returna false
19 $result = !( $status == 1);
20 print "result is $result <br>";
21
22 // XOR logico returna true se nenhuma das duas condicoes sao true , ou
23 // returna false se ambas condicoes sao true
24 $result = (( $status == 1) xor ($auth == 1));
25 print "resultado e $result <br>";
Listagem 2.13: Operadores l�ogicos em PHP
2.8 Controle de uxo
Em PHP a forma simples de controle de uxo �e atrav�es da declara�c~ao if. Seu argumento �e umaexpress~ao condicional, ou seja, que retorne TRUE ou FLASE. O exemplo a seguir mostra o uso de ifjuntamente com um formul�ario que ir�a realizar o processamento de acordo com a idade do usu�ario.
1 <html>
2 <head></head>
3 <body>
4 <form action="ageist.php" method="post">
5 Digite sua idade: < input name="age" s i ze ="2">
6 </form>
7 </body>
8 </html>
Listagem 2.14: exemplo de if
A listagem 2.15 mostra o script que processa o formul�ario anterior.
1 <html >
2 <head ></head >
3 <body >
4 <?php
5 // retrieve form data
6 $age = $_POST['age'];
7 // verificacao do valor
21
8 if ($age >= 18) {
9 echo 'voce pode tirar carteira de motorista!';
10 }
11 if ($age < 18) {
12 echo "voce nao pode tentar tirar carteira de motorista ainda";
13 }
14 ?>
15 </body >
16 </html >
Listagem 2.15: ageist.php
Al�em da estrutura tradicional if-else o PHP disp~oe ainda de uma estrutura especial, if-elseif-else.As listagens 2.16 e 2.17 exempli�cam seu uso.
1 <html>
2 <head></head>
3 <body>
4 <h2>Today 's Special </h2>
5 <p>
6 <form method="get" action="cooking.php">
7 < se l ec t name="day">
8 <option value="1">Segunda/Quarta
9 <option value="2">Terca/Quinta
10 <option value="3">Sexta/Domingo
11 <option value="4">Sabado
12 </ se l ec t >
13 < input type="submit" value="Enviar">
14 </form>
15 </body>
16 </html>
Listagem 2.16: Formulario
1 <html >
2 <head ></head >
3 <body >
4 <?php
5 // pega selecao do formulario
6 $day = $_GET['day'];
7 // checa a opcao e escolhe o item apropriado
8 if ($day == 1) {
9 $special = 'Frango ao molho';
10 }
11 elseif ($day == 2) {
12 $special = 'Sopa francesa ';
13 }
14 elseif ($day == 3) {
15 $special = 'Pure de batata e carne';
16 }
17 else {
18 $special = 'Peixe e batatas ';
19 }
20 ?>
21 <h2>O cardapio de hoje e:</h2 >
22 <?php echo $special; ?>
23 </body >
24 </html >
Listagem 2.17: cooking.php
Os chamados loops tamb�em est~ao dispon��veis no PHP. O mais simples deles �e o while. Executaa�c~oes repetidas vezes at�e que a condi�c~ao contida no argumento seja v�alida, TRUE. A condi�c~ao �eavaliada no in��cio de cada intera�c~ao. Dois exemplos simples e que produzem a mesma sa��da s~aomostrados a seguir.
22
1 <?php
2 // exemplo 1
3 $i = 1;
4 while ($i <= 10)
5 {
6 echo $i++;
7 }
8 // exemplo 2
9 $i = 1;
10 while ($i <= 10):
11 echo $i;
12 $i++;
13 endwhile;
14 ?>
15 /$
Listagem 2.18: loopsimples.php
O loop mais complexo �e o for. Seu funcionamento �e semelhante ao homonimo na linguagem C.Comp~oe-se de tres express~oes. A primeira �e a inicializa�c~ao da vari�avel de controle do la�co. A segunda�e a condi�c~ao de parada. Enquanto esta condi�c~ao for v�alida os comandos contidos no for se repetem.A terceira �e o incremento da vari�avel de controle para o pr�oximo ciclo. A listagem 2.19 ilustra autiliza�c~ao do for atrav�es de v�arios exemplos.
1 <?php
2 // exemplo 1
3 for ($i = 1; $i <= 10; $i++) {
4 echo $i;
5 }
6 // exemplo 2
7 for ($i = 1; ; $i++) {
8 if ($i > 10) {
9 break;
10 }
11 echo $i;
12 }
13 // exemplo 3
14 $i = 1;
15 for (; ; ) {
16 if ($i > 10) {
17 break;
18 }
19 echo $i;
20 $i++;
21 }
22 // exemplo 4
23 for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i , $i++);
24 ?>
25 /$
Listagem 2.19: Exemplos de for
Outra estrutura de controle bastante utilizada em PHP �e o include, listagem ??. Esta estruturainclui e executa um determinado arquivo dentro de outro. Os arquivos s~ao inclu��dos especi�cando-se seu caminho. Caso o arquivo n~ao seja encontrado um warning �e emitido para o usu�ario. Seespeci�cado apenas o nome o arquivo �e procurado no diret�orio corrente.
Um estrutura similar �e o require. A diferen�ca b�asica �e que em caso de erro (arquivo n~aoencontrado, por exemplo) o script que originou a chamada require n~ao continua, pois um erro fatal�e emitido.
23
1 vars.php
2 <?php
3 $cor = 'verde';
4 $fruta = 'laranja ';
5 ?>
6
7 teste.php
8 <?php
9 echo "Uma $cor $fruta"; // Uma verde laranja
10 include("vars.php");
11 echo "Uma $cor $fruta"; // Uma laranja verde
12 ?>
2.9 Fun�c~oes
Durante o desenvolvimento de uma determinada aplica�c~ao, ou mesmo dentro de um mesmo script,�e comum haver a necessidade de repeti�c~ao de partes do c�odigo. Esta tarefa �e cansativa e di�cultaa manuten�c~ao do c�odigo de aplica�c~oes mais extensas. As linguagens de programa�c~ao modernas,disponibilizam formas de realizar o reaproveitamento de c�odigo. Uma maneira de fazer isso �eutilizando fun�c~oes.
De maneira simpli�cada, pode-se dizer que uma fun�c~ao �e um subprograma que executa diversasinstru�c~oes sempre que �e chamada. Podem ou n~ao retornar valores.
A cria�c~ao (de�ni�c~ao) de uma fun�c~ao em PHP �e bastante simples conforme mostrado a seguir:
function nomefuncao(arg1, arg2, arg3)
{
comandos
}
O nome da fun�c~ao n~ao pode coincidir com nenhuma palavra reservada do PHP como nomes defun�c~oes j�a existentes. A de�ni�c~ao de fun�c~oes pode estar em qualquer parte do script, mesmo ap�os asua chamada. Abaixo temos um exemplo simples de uma fun�c~ao do usu�ario que mostra o quadradodos n�umeros de 1 a 10.
1 <?php
2 echo "FUNCAO DO USUARIO";
3 quadrado ();
4 echo "FIM";
5 function quadrado ()
6 {
7 for($i=0;$i <10;$i++)
8 echo "O quadrado de " . $i . " e " . "($i*$i)" . "<br>";
9 }
10 ?>
O fragmento de c�odigo 2.9 mostra a de�ni�c~ao e o uso da fun�c~ao quadrado() criada pelo de-senvolvedor. �E interessante observar que n~ao �e passado nenhum valor (argumento) para a fun�c~ao,nenhuma informa�c~ao entre parenteses. Outro detalhe que deve ser observado �e que esta fun�c~ao n~aoretorna valores, ou seja, na chamada da fun�c~ao, simplesmente o c�odigo �e executado e o resultadosubstitu��do no local do script onde a fun�c~ao foi chamada.
Em muitas situa�c~oes �e necess�ario enviar um ou mais valores para uso da fun�c~ao. Assim, umafun�c~ao pode n~ao ter argumentos, como no exemplo anterior, ou ter v�arios argumentos declaradospara uso. Para isso, basta informar quais os argumentos na declara�c~ao da fun�c~ao conforme exemplo2.9.
1 <?php
2 function area($b,$h)
3 {
24
4 $area = $b * $h;
5 printf("Area do quadrado e: %s m2",$area);
6 }
7 echo "Area do Retangulo";
8 area (2,4);
9 echo "FIM";
10 ?>
A fun�c~ao area() recebe dois argumentos, $b e $h, que representam a base e a altura de umretangulo. A fun�c~ao recebe esses argumentos e os utiliza para calcular a �area do retangulo que �e oobjetivo da fun�c~ao. Para criar fun�c~oes que retornem valores, basta utilizar a fun�c~ao return, conformemostrado em 2.9.
1 <?php
2 function area($b,$h)
3 {
4 $a = $b * $h;
5 return $a;
6 }
7 echo "Area do Retangulo";
8 $base = 2;
9 $altura = 3;
10 $area = area($base ,$altura );
11 printf("A area do retangulo de base %f e altura %f e %f",$base ,$altura ,$area);
12 ?>
25
2.10 Exerc��cios
1. Qual o m�etodo HTTP recomendado para utiliza�c~ao em aplica�c~oes web? Justi�que.
2. Execute os c�odigos mostrados no cap��tulo 2. Releia as explica�c~oes dadas e tente entender ofuncionamento dos scripts.
3. Escreva um formul�ario que contenha dois campos: Nota 1 e Nota 2. Acrescente um bot~ao deenvio. Aponte o formulu�ario para enviar os dados para media.php, mostrado a seguir. Executeo script 2.20 e observe seu funcionamento.
1 <?php
2 // media.php
3 $n1 = $_GET[nota1];
4 $n2 = $_POST[nota2];
5
6 $media = ($n1 + $n2 )/2;
7 printf("A media das notas e:%s",$media );
8 ?>
Listagem 2.20: media.php
4. Sobre o exerc��cio anterior responda:
� A vari�avel $media �e do tipo inteiro (int) ou ponto utuante ( oat)?
� Como modi�car exibi�c~ao do valor da m�edia para apenas uma casa decimal?
� Fa�ca as adequa�c~oes necess�arias para utilizar o m�etodo POST.
5. Para calcular a �area de um retangulo basta multiplicar o valor da base (b) pela altura (h). Crieum arquivo em HTML que contenha um formul�ario que solicita ao usu�ario os valores de basee altura de um retangulo e um bot~ao de envio. Em seguida, escreva um script para calcular a�area do retangulo.(Lembrete: O formul�ario deve apontar para o script que realizar�a o processamento)
6. Repita o exerc��cio anterior acrescentando o c�alculo do per��metro do retangulo, ou seja, a somada medida de todos os lados.
7. A f�ormula para calcular a �area de uma circunferencia �e: A = � � r2. Elaborar uma aplica�c~ao(formul�ario e script) que solicite ao usu�ario o valor do raio de uma circunferencia e exiba ovalor da �area.
8. Dado o c�odigo em PHP a seguir, fa�ca o que se pede:
� Pesquise o que fazem as fun�c~oes substr() e strlen();
� Execute o script e veri�que a resposta apresentada;
� Refa�ca o script utilizando um while ao inv�es do for;
1 <?php
2 $text="Bem vindo ao desenvolvimento em PHP";
3 $searchchar="e";
4 $count="0";
5
6 for($i=0; $i<strlen($text); $i=$i+1)
7 {
8 if(substr($text ,$i ,1)== $searchchar)
9 $count=$count +1;
10 }
11
12 echo $count;
13 ?>
Listagem 2.21: countchar.php
26
9. Modi�que o c�odigo mostrado na listagem 2.11 de forma que caso n~ao sejam passados os valoresdas vari�aveis nome e idade seja exibida uma mensagem explicativa ao usu�ario. Caso contr�ario,a mensagem informando o nome e a idade �e mostrada.
10. Fa�ca uma pesquisa para determinar a utilidade da fun�c~ao phpinfo(). Em seguida, escreva umscript que utilize esta fun�c~ao, execute-o e veja o resultado.
11. Na quest~ao anterior, o que acontece quando o valor passado em nome �e "ana silva"ao inv�es de"ana"? Como evitar o truncamento dos dados ao utilizar query strings?
12. Criar um script que exiba informa�c~oes sobre a m�aquina em que est�a sendo executado o sistema,como nome do servidor, endere�co IP, a porta e o qual o servidor web.(Sugest~ao: Pesquise sobre o container $ SERVER, semelhante a $ GET e $ POST)
27
28
Cap��tulo 3
Coisas Importantes em PHP
Educai as crian�cas, para que n~ao seja necess�ario punir os homens.
Pit�agoras
No cap��tulo anterior, foi feita uma apresenta�c~ao geral sobre a linguagem PHP e sua dinamicab�asica de funcionamento atrav�es do uso de formul�arios e dos arrays $_GET e $_POST, tamb�em con-hecidos como arrays superglobais. Por�em, o uso dos valores contidos nesses arrays existe apenaspara o script na qual os dados foram diretamente repassados. Na maioria das vezes os valores dasvari�aveis devem permanecer existindo durante a execu�c~ao de v�arios scripts. �E o caso de aplica�c~oesacess��veis apenas a certos usu�arios, ou seja, que necessitam de autentica�c~ao, por exemplo. Os cookiespodem ser utilizados para esta tarefa. O que �e chamado de persistencia dos dados. O PHP ofereceainda o recurso de sess~oes que �e uma alternativa mais moderna do que os cookies.
Neste cap��tulo, ser�a apresentado o uso de ambas as t�ecnicas. Na �ultima parte do cap��tulo ser�aabordado ainda o uso de bancos de dados como ferramenta auxiliar, uma vez que a persistencia dedados tamb�em �e uma caracter��stica fundamental em aplica�c~oes web em geral.
3.1 Por que cookies ou sess~oes?
Quando se acessa uma p�agina web, a comunica�c~ao entre o navegador e o servidor web �e feita atrav�es doprotocolo HTTP (Hypertext Transfer Protocol). A quest~ao �e que o HTTP n~ao armazena informa�c~oesde estado, ou seja, os dados enviados para atender uma requisi�c~ao do cliente n~ao s~ao mantidos quandouma nova requisi�c~ao �e feita, inviabilizando o armazenamento de informa�c~oes enviadas anteriormente.
Por exemplo, se dois usu�arios acessam a p�agina teste.html n~ao �e poss��vel para o servidor deter-minar qual dos usu�arios realizou o acesso. As requisi�c~oes s~ao tratadas independentemente. Sim-plesmente, o Apache atende as duas requisi�c~oes. Assim, mecanismos como cookies e sess~oes s~aofundamentais para o desenvolvimento de aplica�c~oes como com�ercio eletronico, exibi�c~ao de an�unciose personaliza�c~ao de p�aginas em geral. S~ao as chamadas p�aginas dinamicas. Diferentemente das p�agi-nas est�aticas que utilizam puramente o HTML, ou seja, o mesmo conte�udo �e sempre exibido paraqualquer usu�ario que requisite a p�agina.
3.2 Cookies
Cookies s~ao apenas arquivos texto armazenados localmente na m�aquina do cliente web para posteri-ormente serem recuperados pelo servidor. �E composto por um nome para servir como referencia e umvalor associado a esse nome. Qualquer aplica�c~ao que necessite compartilhar dados entre diferentesp�aginas pode ser implementada utilizando os cookies.
Um exemplo muito simples do uso de cookies �e a contagem de acessos. Supondo que um usu�arioacessa um site pela primeira vez e que um cookie �e de�nido com o nome numero_acessos e com valor
29
inicial 1. No pr�oximo acesso, o valor �e incrementado e assim sucessivamente. O servidor resgata essevalor na m�aquina do cliente e pode utilizar a informa�c~ao para exibir algo como:
Este �e seu acesso n�umero 2
Outro exemplo que pode ser citado �e quando s~ao feitas buscas em um site. O termo pesquisadopode ser armazenado em um cookie de forma que em acessos futuros o termo pesquisado j�a sejapreenchido no campo do formul�ario.
Os cookies tamb�em possuem uma caracter��stica interessante chamada de validade, ou seja, otempo que permanecer�a armazenado na m�aquina do usu�ario. A validade de um cookie pode chegara dias ou pode ser con�gurado para ter tempo de vida de apenas alguns minutos.
Existe uma discuss~ao em torno do uso de cookies com rela�c~ao a privacidade. Isso ocorre porquemuitas vezes o usu�ario pode estar tendo informa�c~oes gravadas em cookies e estas informa�c~oes seremutilizadas por empresas para rastrear os sites pela qual o usu�ario navegou, por exemplo. Por isso, osnavegadores permitem ao usu�ario habilitar ou desabilitar o armazenamento de cookies na m�aquina.Entretanto, ao desabilitar este recurso di�cilmente pode-se obter os mesmos recursos disponibilizadospelo site. Provalmente, n~ao ser�a poss��vel realizar o login ou registrar a cidade em que o usu�ario seencontra e coisas do tipo.
3.3 Enviando cookies
O PHP disponibiliza a fun�c~ao setcookie() para enviar cookies para a m�aquina do usu�ario. Estafun�c~ao possui dupla funcionalidade, tanto serve para de�nir como para excluir um cookie. A sintaxeb�asica da fun�c~ao �e a seguinte:
bool setcookie(string nome [, string valor [,int validade [, string caminho [,
string dom��nio [, int seguro]]]]])
Parametro Descri�c~ao
nome Indica o nome que ser�a usado como referenciavalor Valor atribu��do ao cookie. Se vazio o cookie �e exclu��dovalidade De�ne o tempo de validade do cookie no formato de tempo UNIXcaminho Caminho no servidor para o qual o cookie estar�a dispon��veldom��nio Dom��nio para o qual o cookie est�a dispon��velseguro Valor (0 ou 1) que indica se o cookie �e seguroPara de�nir um cookie, �e necess�ario atribuir um valor. Caso contr�ario, o cookie �e exclu��do. Assim,
a de�ni�c~ao de um cookie �e feita assim:
setcookie ("nome", "Ana")
E a exclus~ao dessa forma:
setcookie ("nome").
Para criar um cookie v�alido por dois dias basta com aux��lio de time(),
setcookie ("nome", "Ana",time()+172800).
O valor de 172800 �e equivalente a quantidade de segundos em 48 horas. Acrescentadando esse valorao tempo atual retornado por time() temos a validade do cookie de�nida para o per��odo de 2 dias.
Um detalhe importante quando se est�a utilizando cookies �e que seu envio deve ocorrer antes quequalquer tag HTML. Caso o cookie seja enviado ap�os as tags, uma mensagem de erro �e exibidainformando que a fun�c~ao setcookie() foi chamada ap�os o envio dos cabe�ccalhos. Assim, o valorn~ao �e armazenado nem o cookie �e criado.
30
3.4 Mais um superglobal
A fun�c~ao setcookie() realiza o tarefa de enviar um cookie para o computador do usu�ario. Agora,�e preciso saber como utilizar os valores armazenados. �E importante lembrar que os cookies n~aopoder~ao ser utilizados na mesma p�agina que os criou. Apenas na pr�oxima requisi�c~ao �e que ser�aposs��vel utiliz�a-los.
A maneira recomendada de acessar os cookies �e atrav�es do array superglobal $_COOKIE, junta-mente com a chave associativa desse array. Por exemplo, se o cookie chamado "nome"�e de�nido,
setcookie ("nome", "Ana");
Na pr�oxima requisi�c~ao de p�agina, o valor poderia ser acessado atribuindo-se o valor do cookiepara uma vari�avel, como mostrado a seguir.
$var = $_COOKIE["nome"];
Outra maneira de acessar o valor de um cookie �e atrav�es da ativa�c~ao diretiva register globals noarquivo de con�gura�c~ao do PHP (php.ini). Nesse caso, o pr�oprio nome do cookie �e convertido emuma vari�avel. No exemplo anterior, o valor do cookie estaria acess��vel atrav�es da vari�avel $nome.
Apesar da facilidade, esta pr�atica n~ao �e mais recomendada pelos desenvolvedores desde a vers~ao4.2.0 do PHP. O uso desta con�gura�c~ao permite que c�odigos inseguros sejam interpretados pelo PHP.O que obviamente n~ao �e desej�avel. Em Usando a diretiva Register Globals �e mostrado os riscos queo uso desta diretiva trazem. Tanto que a partir da vers~ao 6.0.0 ela ser�a totalmente abolida.
3.5 Autenticando
Uma utiliza�c~ao bastante comum dos cookies �e a autentica�c~ao de usu�arios. A autentica�c~ao �e umamaneira de se certi�car de que somente usu�arios autorizados por senha podem acessar determinadas�areas de um site ou mesmo todo o site. A autentica�c~ao com cookies pode ser dividida em tres etapas:
� P�agina de login para receber os dados do usu�ario, veri�car o cadastro e criar os cookies quepermitem a a utiliza�c~ao da p�agina;
� Rotina de valida�c~ao para ser utilizada nas p�aginas restritas;
� P�agina de logout para excluir os cookies criados inicialmente;
Para realizar a autentica�c~ao dos usu�arios, �e necess�ario ainda uma ferramenta auxiliar para ar-mazenamento dos dados dos usu�arios que ter~ao acesso ao site tais como nome, senha, email, endere�coe qualquer outra informa�c~ao que se queira armazenar. Para isso, o mais recomendado �e a utiliza�c~aode um servidor de banco de dados. Para exempli�car, utilizaremos o MySQL, bastante popular eadequado para as necessidades desta disciplina.
3.5.1 Banco de dados
O primeiro passo a ser dado �e a cria�c~ao das tabelas que ser~ao utilizadas. Para o caso da autentica�c~aodo usu�ario apenas uma tabela �e necess�aria. Deve-se armazenar no m��nimo o nome do usu�ario e asenha. Demais dados s~ao opcionais e dependem da complexidade e do n��vel de seguran�ca exigidopela aplica�c~ao. A listagem 3.1 exibe o arquivo em liguagem SQL (Structured Query Language) quecria a tabela usuarios e o comando insert para inserir um registro na tabela.
1 CREATE TABLE usuarios
2 (
3 username varchar(10) NOT NULL,
4 senha varchar(10) NOT NULL,
5 nome varchar(80) NOT NULL,
6 email varchar(80) NOT NULL,
31
7 primary key(username)
8 );
9 INSERT INTO usuarios values ('ana','teste ','Ana Silva','[email protected]');
Listagem 3.1: usuarios.sql
Para facilitar o entendimento do c�odigo, a listagem 3.4 mostra um arquivo de include (arquivocom c�odigo em PHP para ser anexado em outras p�aginas) para realizar a conex~ao com o servidor debanco de dados MySQL. Sempre que for realizada algum acesso ao banco de dados, ser�a necess�ariochamar este include (conecta_mysql.inc.
1 <?php
2 // configuracoes do banco de dados
3 $servidor = "localhost";
4 $usuario_bd = "ana";
5 $senha_bd = "123456";
6 $banco = "bd";
7 $con = mysql_connect($servidor , $usuario_bd , $senha_bd );
8 mysql_select_db ($banco );
9 //$
10 ?>
Listagem 3.2: conecta mysql.sql
Com isso, a parte do banco de dados est�a pronta para ser utilizada.
3.5.2 Login
Passando a parte da autentica�c~ao propriamente dita �e necess�ario criar um formul�ario inicial que ser�aexibido ao usu�ario solicitando seu username e senha. As informa�c~oes s~ao veri�cadas e no caso deestarem corretas os respectivos cookies s~ao criados.
Nessa etapa, temos a cria�c~ao de apenas dois arquivos: login.html e login.php. O primeiro cont�emo formul�ario inicial que ser�a exibido para o usu�ario e o segundo realiza a l�ogica da autentica�c~ao.
1 <html >
2 <body >
3 <form method="POST" action="login.php">
4 <p align="center">Nome de usuario: <input type="text" name="username" size="10">
5 <p align="center">Senha: <input type="password" name="senha" size="10">
6 <p align="center"><input type="submit" value="Enviar" name="enviar">
7 </form >
8 </body >
9 </html >
Listagem 3.3: conecta mysql.sql
1 <?php
2 // obtem os valores digitados
3 $username = $_POST["username"];
4 $senha = $_POST["senha"];
5 // acesso ao banco de dados
6 include "conecta_mysql.inc";
7 $resultado = mysql_query("SELECT * FROM usuarios where username='$username '");
8 $linhas = mysql_num_rows ($resultado );
9 if($linhas ==0) // testa se a consulta retornou algum registro
10 {
11 echo "<html ><body >";
12 echo "<p align =\" center\">Usuario nao encontrado !</p>";
13 echo "<p align =\" center\"><a href =\" login.html\">Voltar </a></p>";
14 echo "</body ></html >";
15 }
16 else
17 {
18 if ($senha != mysql_result($resultado , 0, "senha")) // confere senha
32
19 {
20 echo "<html ><body >";
21 echo "<p align =\" center\">A senha esta incorreta!</p>";
22 echo "<p align =\" center\"><a href =\" login.html\">Voltar </a></p>";
23 echo "</body ></html >";
24 }
25 else // usuario e senha corretos. Vamos criar os cookies
26 {
27 setcookie("nome_usuario", $username );
28 setcookie("senha_usuario", $senha );
29 // direciona para a pagina inicial dos usuarios cadastrados
30 header ("Location: index.php");
31 }
32 }
33 mysql_close($con);
34 ?>
Listagem 3.4: login.php
3.5.3 Valida�c~ao
Depois de efetuado procedimento de login/autentica�c~ao do usu�ario, os cookies j�a encontram-se ar-mazenados na m�aquina do cliente e dispon��veis para uso. A cada nova requisi�c~ao de p�agina �enecess�ario fazer a valida�c~ao, ou seja, veri�car se os cookies ainda s~ao v�alidos e se as informa�c~oesdo usu�ario ainda est~ao corretas. Isso deve ser feito para evitar que um usu�ario mal intencionado eque n~ao tem acesso a determinadas �areas do site digite o endere�co diretamente no navegador e tenhaacesso a p�agina. Para isso, basta criar um include valida_cookies.inc que deve ser chamado pelasp�aginas protegidas.
1 <?php
2 if(IsSet($_COOKIE["nome_usuario"]))
3 $nome_usuario = $_COOKIE["nome_usuario"];
4 if(IsSet($_COOKIE["senha_usuario"]))
5 $senha_usuario = $_COOKIE["senha_usuario"];
6
7 if(!( empty($nome_usuario) OR empty($senha_usuario )))
8 {
9 include "conecta_mysql.inc";
10 $resultado = mysql_query("SELECT * FROM usuarios WHERE username='$nome_usuario '");
11 if(mysql_num_rows($resultado )==1)
12 {
13 if($senha_usuario != mysql_result($resultado ,0,"senha"))
14 {
15 setcookie("nome_usuario");
16 setcookie("senha_usuario");
17 echo "Voce nao efetuou o LOGIN!";
18 exit;
19 }
20 }
21 else
22 {
23 setcookie("nome_usuario");
24 setcookie("senha_usuario");
25 echo "Voce nao efetuou o LOGIN!";
26 exit;
27 }
28 }
29 else
30 {
31 echo "Voce nao efetuou o LOGIN!";
32 exit;
33 }
34 mysql_close($con);
33
35 ?>
Listagem 3.5: valida_cookies.inc, style=php
Observe que nas primeiras linhas da listagem 3.5 a fun�c~ao isset() testa a existencia dos cookiesantes de obter seus valores. Assim, evita-se a exibi�c~ao de mensagens de erro ao tentar acessarelementos que n~ao existem. Caso os cookies n~ao existam, uma mensagem de erro �e exibida (linha31) e o script �e �nalizado. Se o nome do usu�ario ou senha n~ao forem vazios (linha 7) �e realizada umabusca no banco de dados pelo usu�ario especi�cado e em seguida a senha �e comparada. Caso estejaerrada os cookies s~ao destru��dos, caso contr�ario a conex~ao �e encerrada e a p�agina est�a validada.
3.5.4 Logout
O �ultimo passo consiste em construir um script para logout. �E importante quando o usu�ario continuanavegando por outros sites, mas n~ao mais necessita utilizar o site que estava logado. Fundamentalem m�aquinas que s~ao utilizadas por v�arios usu�arios. A principal a�c~ao deste script �e destruir oscookies criados durante o login e direcionar o usu�ario para a p�agina de login novamente. A listagem3.6 exempli�ca estas a�c~oes. Basicamente s~ao utilizadas as fun�c~oes setcookie() que serve tantopara criar como para destruir cookies e a fun�c~ao header() para direcionar o usu�ario para a p�aginalogin.html.
1 <?php
2 setcookie("nome_usuario");
3 setcookie("senha_usuario");
4 header ("Location: login.html");
5 ?>
Listagem 3.6: logout.php
3.6 Sess~oes
Uma sess~ao �e o tempo na qual o usu�ario permanece navegando em um determinado site. Ao iniciara navega�c~ao, uma sess~ao �e aberta e diversas vari�aveis podem ser registradas e acessadas durante otempo de dura�c~ao da sess~ao, ou seja, enquanto a sess~ao estiver aberta.
Da mesma forma que os cookies, as se�c~oes permitem que os dados armazenados nas vari�aveissejam compartilhados entre as p�aginas. Por�em, existem algumas diferen�cas entre cookies e sess~oes.Os primeiros armazenam dados na pr�opria m�aquina do usu�ario podendo continuar existindo mesmoquando a navega�c~ao �e �nalizada. J�a as vari�aveis de sess~ao s~ao armazenadas no servidor e s~ao de-stru��das ao sair do site ou quando o navegador �e fechado.
A primeira informa�c~ao importante relacionada a uma sess~ao �e justamente o seu id utilizado comoidenti�cador da sess~ao. Para utilizar os dados armazenados em uma sess~ao �e necess�ario conheceresse n�umero. O compartilhamento deste valor pode ser feito atrav�es de cookies ou atrav�es da pr�opriaURL.
O primeiro m�etodo s�o poder�a ser utilizado se os cookies estiverem habilitados na m�aquina. Comonem sempre isto acontece, o segundo m�etodo pode ser utilizado.
O segundo m�etodo �e mais so�sticado. A partir da vers~ao 4.2.0 do PHP est�a habilitada a op�c~aoenable-trans-sid que permite que a identi�ca�c~ao da sess~ao seja enviada transparentemente paraas p�aginas, n~ao sendo necess�ario o uso de query strings.
A principal fun�c~ao utilizada para o uso de sess~oes em PHP �e session_start(). Serve tanto paracriar uma nova sess~ao quanto para ter acesso �as vari�aveis de uma sess~ao existente.
3.6.1 Registrando vari�aveis
Registrar uma vari�avel em uma sess~ao signi�ca disponibilizar esta vari�avel para qualquer p�aginaenquanto a sess~ao for v�alida. A maneira mais segura de registrar vari�aveis �e utilizando o arraysuperglobal $_SESSION.
34
Na listagem 3.7 �e mostrado um exemplo de como realizar a inicializa�c~ao e o registro de algumasvari�aveis. J�a na listagem 3.8 os dados registrados na listagem anterior s~ao lidos. A primeira fun�c~aoutilizada em ambas as p�aginas �e session_start(). Depois, as vari�aveis de sess~ao nome, sobrenomee idade s~ao inicializadas e um link para a p�agina seguinte �e mostrado para o usu�ario. Na p�aginaseguinte, os dados s~ao restaurados com session_start() e os valores das vari�aveis s~ao acessadoscom o array $_SESSION.
1 <?php
2 session_start ();
3 echo 'Escrevendo os dados da sessao ';
4 $_SESSION['nome'] = 'Ana';
5 $_SESSION['sobrenome '] = 'Maria ';
6 $_SESSION['idade'] = 23;
7
8 printf("echo '<br><a href="readses.php?'. SID .'">Nova pagina </a>';
9 ?>
Listagem 3.7: writes.php
1 <?php
2 session_start ();
3 $nome = $_SESSION['nome'];
4 $sobrenome = $_SESSION['sobrenome '];
5 $idade = $_SESSION['idade'];
6
7 printf("Ola sou %s %s e tenho %d anos de idade <br>",$nome ,$sobrenome ,$idade );
8 ?>
Listagem 3.8: reads.php
Quando uma vari�avel n~ao �e mais �util, pode-se elimin�a-la com a fun�c~ao unset($_SESSION['nome']).Assim, a vari�avel de sess~ao especi�cada deixa de existir.
3.7 Bancos de Dados
A grande maioria das aplica�c~oes necessita de persistencia dos dados, ou seja, mesmo depois que osistema �e desligado os dados devem permanecer at�e que o sistema seja religado. Entretanto, sabe-seque deois que um processo �e �nalizado, todas as vari�aveis e demais informa�c~oes relacionadas a eles~ao removidas da mem�oria. Da�� a necessidade de se utilizar arquivos para garantir a persistencia dosdados.
No caso de aplica�c~oes que compartilham informa�c~oes, apenas o uso de arquivos certamente acar-retar�a em inconsistencia dos dados. Da�� a necessidade de utilizar-se de uma ferramenta auxiliar:um SGBD (Sistema Gerenciador de Banco de Dados). Trata-se de um conjunto de aplicativos re-spons�aveis por gerenciar uma base de dados. O principal objetivo �e livrar a aplica�c~ao cliente aresponsabilidade de gerenciar o acesso, manipula�c~ao e organiza�c~ao dos dados. O SGBD disponibilizauma interface para que os seus clientes possam incluir, alterar ou consultar dados.
Exitem diversos gernciadores de bancos de dados, alguns mais famosos e voltados para grandesvolumes de dados como o ORACLE. H�a ainda alternativas mais populares para aplica�c~oes menorescomo SQL Server, PostgreSQL e MySQL. Praticamente todos os gerenciadores de bancos de dadoscitados, possuem vers~oes para a web ou foram criados especi�camente para esta �nalidade, como oMySQL.
As informa�c~oes em uma base de dados est�a distrib��da em tabelas. Cada tabela possui pelo qualela �e referenciada e diversos campos (colunas). Na listagem 3.1 temos os comandos da linguagemSQL que criam a tabela de nome usuarios com quatro campos (username, senha, nome e email).Cada campo armazenar�a as informa�c~oes associadas ao nome do campo.
Uma base pode conter diversas tabelas para armazenar os dados. De acordo com o tamanho e acomplexidade da aplica�c~ao, uma base de dados pode conter outros elementos mais so�sticados quefacilitam o uso e melhoram o desempenho. Para a grande maioria das aplica�c~oes, gerenciadores comoo PostgreSQL e o MySQL atendem perfeitamente �as necessidades.
35
3.7.1 Criando Tabelas
Antes de qualquer a�c~ao ser realizada �e necess�ario criar uma base de dados e nesta base de dados criaras tabelas. Cada campo de uma tabela deve receber um atributo informando o tipo de dado que ocampo vai armazenar. Considerando o MySQL existem v�arios tipos de dados dispon��veis. Na tabela3.7.1, s~ao mostrados alguns deles. Para uma lista completa dos tipos de dados, basta consultar omanual do usu�ario.
Tabela 3.1: Alguns tipos de dados dispon��veis no MySQLTipo Descri�c~ao
TINYINT Inteiros de 1 byteSMALLINT Inteiros de 2 bytesMEDIUMINT Inteiros de 3 bytesINT Inteiros de 4 bytesVARCHAR Texto de at�e 256 caracteresDATE Datas em formatos diversosFLOAT N�umeros em ponto utuante de at�e de 4 bytes
3.7.2 Tabela de Contatos
A tabela 3.7.2 mostra uma sugest~ao dos campos que deve possuir uma de nome Contatos paraarmazeanar informa�c~oes.
Tabela 3.2: Tipos de dados usados na tabela contatosNome do Campo Tipo Tamanho Descri�c~ao
id INT 6 Identi�cador �unico para cada registronome VARCHAR 15 Nome do contatofone VARCHAR 10 Telefoneemail VARCHAR 25 Emailnascimento DATE Data de aniversario
Para exempli�car a cria�c~ao de tabelas, a seguir, �e mostrado um exemplo utilizando a linguagemSQL (Structured Query Language) dos comandos necess�arios para cria�c~ao da mesma segundo oscampos sugeridos na tabela 3.7.1. Na linha 1 �e utilizado o comando CREATE TABLE que informa aoMySQL que a query a seguir �e para cria�c~ao de uma tabela de nome contatos. Entre parenteses temosa lista dos campos que ir~ao compor a tabela, seguidos dos respectivos tipos de dados. �E interessanteobservar que no campo id (linha 3) al�em da diretiva NOT NULL, que informa que n~ao ser~ao aceitosregistros com esse campo sem um valor, temos a diretiva AUTO_INCREMENT, que automaticamenteincrementa o valor deste campo para novos registros. Na linha 8, �e informado ainda que chaveprim�aria da tabela, ou seja, o campo de valor �unico que �e utilizado pelo MySQL para otimizar atabela.
1 CREATE TABLE contatos
2 (
3 id int (6) NOT NULL AUTO_INCREMENT ,
4 nome VARCHAR(15) NOT NULL,
5 fone VARCHAR(10) NOT NULL,
6 email VARCHAR(25) NOT NULL,
7 nascimento DATE NOT NULL,
8 PRIMARY KEY id,
9 );
Listagem 3.9: contatos.sql
36
3.8 Exerc��cios
1. Quais as principais diferen�cas entre cookies e sess~oes? S~ao funcionalidades equivalentes?
2. Qual a informa�c~ao repassada pelos arrays conhecidos como super globais mais utilizados pelalinguagem PHP?
� $_SERVER
� $_GET
� $_POST
� $_SESSION
� $_ENV
3. O que seria exibido como sa��da do fragmento de c�odigo 3.10? Modi�que o c�odigo para obter omesmo resultado utilizando o array superglobal $_ENV ao inv�es da fun�c~ao getenv().
1 <?php
2 // exemplo de uso da funcao getenv () do PHP
3 $usuario = getenv('USER');
4 $host = getenv('HOSTNAME ');
5 $ip = getenv('REMOTE_ADDR ');
6 printf("Bom dia %s",$usuario );
7 printf("Voce esta conectado ao host %s de IP %s",$host ,$ip);
8 ?>
Listagem 3.10: Exemplo de uso da fun�c~ao getenv()
4. Dado o fragmento de c�odigo a seguir, explique o que �e executado em cada linha de c�odigomostrada?.
1 <?php
2 // inicia a sessao
3 session_start ();
4 // atribui valor as variaveis de sessao
5 $_SESSION['cor']='azul';
6 $_SESSION['tamanho ']='medio';
7 $_SESSION['formato ']='circular ';
8 print "Feito";
9 //$
10 ?>
Listagem 3.11: Exemplo de uso de sess~oes
5. Supondo que o c�odigo da listagem 3.11 �e executado corretamente, o que seria exibido ap�os aexecu�c~ao do seguinte c�odigo?
1 <?php
2 // inicia a sessao
3 session_start ();
4 // exibe as variaveis da sessao , a atribuicao e feita na pagina anterior
5 echo "A cor e ".$_SESSION['cor']."<br>";
6 echo "O tamanho e ".$_SESSION['tamanho ']."<br>";
7 echo "O formato e ".$_SESSION['formato ']."<br>";
8 /$
9 ?>
Listagem 3.12: Continua�c~ao de exemplo de uso de sess~oes
6. Retirando as linhas 5, 6 e 7 da listagem 3.12 e acrescentando print_r($_SESSION); o que �eexibido como sa��da?
37
7. Como alterar os valores das vari�aveis de sess~ao da listagem 3.12 (cor, tamanho e formato) paravermelho, grande e reatangular? Escreva as linhas de c�odigo.
8. Explique em detalhes qual a rela�c~ao entre as fun�c~oes unset() e destroy().
9. O script a seguir exempli�ca como realizar a entrada de dados na tabela Contatos, citadaem 3.7.2. A primeira parte trata da conex~ao ao MySQL propriamente dita. Em seguida, ocomando SQL (query) �e escrita e repassada ao MySQL. Sobre este script, responda:
� O fun�c~ao mysql_connect() poderia ser substitu��da pela fun�c~ao mysql_pconnect()? Quala diferen�ca b�asica entre elas?
� Qual o papel da fun�c~ao mysql_query()? Qual a sa��da do script em caso de inser�c~aocorreta dos dados?
� Explique em que circunstancia a linha 16 �e executada?
1 <?php
2 // usuario para conexao com banco
3 $username="username";
4 // senha para conexao com banco
5 $password="password";
6 // nome da base de dados
7 $database="agenda";
8 // conexao com o aplicativo servidor de banco de dados
9 mysql_pconnect(localhost ,$username ,$password );
10 // seleciona o banco de dados
11 @mysql_select_db($database) or die( "Impossivel selecionar a base");
12 // query
13 $query = "INSERT INTO contacts VALUES ('','Joao ','01234567890',
14 '[email protected] ','1976/11/06')";
15 // tratamento de erro
16 if(! $result = mysql_query($query ))
17 echo mysql_error ();
18 else
19 echo mysql_affected_rows($result )."dados inseridos com sucesso";
20 ?>
Listagem 3.13: Exemplo de c�odigo para inserir dados em uma tabela
10.
38
Cap��tulo 4
Estudo de Caso: Controle de Finan�cas
Empresarial
4.1 Discutindo a aplica�c~ao
4.2 �
4.3 Realizando Testes
39