Académique Documents
Professionnel Documents
Culture Documents
Abril/ 2012
1
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Sumrio
1. Funcionamento das linguagens Web.......................................................................................4 2. HTML....................................................................................................................................... 7 2.1 Tags bsicas em HTML................................................................................................9 2.2 Estilos......................................................................................................................... 13 2.3 Protocolo HTTP..........................................................................................................14 2.3.1 Client-Side Scripts..........................................................................................14 2.3.2 Server-Side Scripts.........................................................................................14 3. A linguagem PHP.................................................................................................................. 15 3.1 Histria....................................................................................................................... 15 3.2 Funcionamento do PHP na Web.................................................................................16 3.3 Scripts PHP................................................................................................................ 17 3.3.1 Nome das variveis........................................................................................17 3.3.2 Comentrios ...........................................................................................18 3.3.4 Script de exemplo...........................................................................................19 3.3.5 Quebra de linha em PHP................................................................................20 3.3.6 Erros em PHP................................................................................................21 3.3.7 Variveis, constantes e tipos de dados...........................................................22 3.3.8 Operadores Aritmticos..................................................................................26 3.3.9 Constantes.....................................................................................................30 4. Trabalhando com datas e hora em PHP................................................................................35 4.1 Funo Date ( )...........................................................................................................36 4.2 Calculando intervalos entre datas...............................................................................37 4.3 Validando datas.......................................................................................................... 38 4.4 Funo mktime ( ).......................................................................................................39 5. Implementao de estruturas de controle..............................................................................39 5.1 Instrues If................................................................................................................40 5.2 Instruo Else............................................................................................................. 41 5.3 O comando Switch......................................................................................................42 6. Estrutura de controle de repetio.........................................................................................43 6.1 O loop while................................................................................................................44 6.2 O loop do while........................................................................................................... 44 6.3 O loop for.................................................................................................................... 45 6.4 O loop foreach............................................................................................................46 6.5 Interrompendo uma estrutura de controle...................................................................47 6.6 Utilizando laos para criar tabelas em HTML..............................................................48 7. Funes................................................................................................................................. 49 7.1 Parmetros.................................................................................................................50
2
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
7.2 Passagem de parmetros por valor e por referncia..................................................51 7.3 Chamando funes.....................................................................................................52 7.4 Escopo de variveis....................................................................................................53 7.5 Reutilizando arquivos de scripts PHP.........................................................................54 8. Utilizando banco de dados com PHP.....................................................................................55 8.1 Os bancos de dados relacionais.................................................................................56 8.1.1 Tabelas........................................................................................................... 56 8.1.2 Colunas.......................................................................................................... 57 8.1.3 Linhas............................................................................................................. 57 8.1.4 Valores........................................................................................................... 57 8.1.5 Chaves........................................................................................................... 58 8.2 Relacionamentos........................................................................................................59 8.3 Conceitos bsicos para projeo de um banco de dados Web...................................60 9. Linguagem SQL..................................................................................................................... 60 9.1 Criando um banco de dados.......................................................................................61 9.2 Selecionando um banco de dados..............................................................................61 9.3 Criando tabelas...........................................................................................................61 9.4 Inserindo dados nas tabelas do banco de dados........................................................62 9.5 Recuperando dados do banco de dados....................................................................64 9.6 Utilizando operadores AND e OR em instrues SQL................................................66 9.7 Recuperando dados de diversas tabelas....................................................................66 9.8 Recuperando dados e exibindo ordenadamente.........................................................68 9.9 Atualizando registros no banco de dados...................................................................69 9.10 Excluindo registros do banco de dados....................................................................70 10. Acessando o banco de dados MySQL a partir da Web com o PHP.....................................71 10.1 Implementando o script de criao do banco de dados............................................72 10.2 Criando o cdigo HTML para cadastro.....................................................................74 10.3 Direcionando de acordo com o nvel de permisso..................................................76 11. Consideraes Finais.......................................................................................................... 80
3
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
4
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Esse sistema consiste em dois objetos: um navegador Web e um servidor Web. Quando uma pgina requisitada na Internet por um computador qualquer, a operao bsica que ocorre a seguinte: O navegador Web envia a solicitao de uma pgina ao servidor. O servidor procura a pgina HTML solicitada e envia de volta para o computador do cliente. O navegador ento utiliza esse cdigo HTML para exibir a pgina. Essa a arquitetura bsica que atende bem a um servidor que fornece pginas estticas ou seja, o navegador requisita uma pgina e ela exibida em seu navegador, sem qualquer entrada de dados por parte usurio. Deve-se usar um programa capaz de interpretar o cdigo HTML da pgina, aplicar sua formatao ao documento e exibir o resultado. Este programa chamado de browser ou navegador. Os navegadores mais conhecidos so o Mozilla Firefox, Internet Explorer, Opera e Netscape. Para que seja possvel uma interao entre o usurio e o sistema necessria uma arquitetura diferente e mais complexa, como mostrado na figura abaixo:
5
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Fig.2 - Computador envia uma requisio ao servidor que acessa o banco de dados
O navegador Web envia a solicitao de uma pgina para o servidor, possivelmente com dados de entrada do usurio. O servidor Web recebe essa solicitao e passa para o mecanismo de PHP para o processamento. O mecanismo de PHP analisa o cdigo de entrada conhecida como script. Dentro desse cdigo, pode ser que haja uma necessidade de salvar ou recuperar dados atravs de consultas. Com isso, aberta uma conexo com o banco de dados, e est consulta enviada.
6
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
O servidor de banco de dados analisa essa consulta e retorna uma resposta ao mecanismo PHP. O mecanismo PHP termina a execuo do script e retorna para o servidor uma pgina HTML. O servidor Web retorna a pgina para o navegador Web, que exibe a pgina para o usurio. Esse tipo de arquitetura conhecido como dinmica, visto que, os resultados mostrados no navegador podem depender dos dados de entrada do usurio. o funcionamento bsico de qualquer pgina na internet, e este ser bem detalhado no decorrer desta apostila. Normalmente o servidor Web, o mecanismo de PHP e o sistema gerenciador de banco de dados, executam na mesma mquina.
2. HTML
A linguagem HTML (HyperText Markup Language) uma linguagem de marcao de hipertextos, e no de programao, portantos as pginas criadas para a internet que utilizam somente HTML so estticas. Sua principal funo diz ao browser tudo sobre o contedo e a estrutura de uma pgina na internet. Assim como em outras linguagens, os comandos tem sintaxe prpria, e seguem algumas regras:
Possuem tags quem aparecem entre sinais de menor que (<) e maior que (>); Geralmente estas tags so utilizadas as pares sendo que a tag de finalizao de um comando qualquer possui uma barra (/). Todo documento HTML fica contido entre as tags <html> e </html> Possui 4 tags bsicas: <html> <head> <title> <body>
7
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Esse um cdigo HTML bsico. As tags esto em negrito e cada uma tem uma funo diferente na estrutura do documento. Qualquer cdigo HTML pode ser feito no editor de texto mais simples e funcionar desde que as estruturas sejam bem definidas e o documento seja salvo com extenso .html . Alguns pontos importantes no cdigo acima: - Todo cdigo HTML deve iniciar com a tag <html>. Essa tag diz ao browser que o documento realmente um HTML - A tag <head> informa o cabealho da pgina. Juntamente com ela, aparece a tag <title> que d o ttulo que aparece no browser em cada pgina na internet. - A tag <body> d incio ao corpo da pgina, que pode ser entendido como sendo toda a rea da pgina abaixo das barras de ferramentas e busca do browser. - A tag <p> inicia um pargrafo simples de texto e sempre importante utiliz-la dentro do corpo do documento Opcionalmente, as tags podem possuir atributos, que podem ser entendidos como caractersticas. Por exemplo, pode-se adicionar uma cor de fundo numa pgina utilizando um atributo no elemento <body>.
8
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<body background-color=green> So vrios os atributos possveis para cada tag HTML, e cada um possui uma funo especfica. As tags HTML devem ser abertas e depois de editar o contedo devem ser fechadas, utilizando-se au barra /. Dessa forma, o browser saber interpretar onde comeou determinado elemento e onde ele terminou. Por exemplo, a tag <html> indica o browser que iniciar um cdigo HTML e a tag </html> indica que esse cdigo terminou. Dessa forma, todo o contedo entre a abertura o fechamento da tag, possui suas propriedades. Existem casos especiais de tags que no possuem contedo, e por isso existe apenas uma tag para abertura e fechamento.
9
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<h3> Sejam bem-vindos ao curso de PHP e MySql </h3> ... <h6> Sejam bem-vindos ao curso de PHP e MySql </h6>
<a> : uma das tags mais importantes em HTML. Com ela, pode-se especificar um link para outra pgina. Ela possui um atributo chamado href que especifica para qual pgina o usurio ser levado ao clicar no link. Exemplo (Execute em seu navegador) :
<a href = pagina2.html> Clique aqui </a>
Ao executar este exemplo, o usurio ao clicar no link ser direcionado uma pgina com erro, pois a pgina2 no existe. Este um recurso muito importante e muito utilizado no HTML, pois um site constitudo de vrias pginas e o usurio precisa navegar entre essas pginas. <img /> : Esta uma tag utilizada para carregar imagens na pgina HTML. Ela possui atributos importantes. Um deles "src" que o caminho (diretrio ou pasta) no qual a imagem se encontra. Outro atributo importante "alt" que uma descrio textual, que aparece no lugar da imagem caso o navegador no possa carreg-la completamente. Um detalhe importante nessa tag que ela no possui contedo, ou seja, a tag aberta e fechada entre os sinais < >. Exemplo (Teste em seu navegador com uma imagem qualquer):
<img src="imagem.jpg" alt = "Imagem de teste" />
10
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Lembre de certificar-se de que a imagem esteja na pasta do arquivo html principal. Caso no esteja, especifique o caminho entre as pastas. <br />: uma tag responsvel por uma quebra de linha no texto. Se torna muito importante no fato da estruturao da pgina. uma tag sem contedo. <ul> <ol> <li>: So responsveis pela criao de listas. A tag <ul> cria uma lista no ordenada, enquanto <ol> cria uma lista ordenada. Para definir os itens da lista so utilizadas tags <li>. Exemplo (Execute em seu navegador. Teste listas ordenadas e no ordenadas):
<ul> <li> Item 1 </li> <li> Item 2 </li> <li> Item 3 </li> </ul>
<table>: Cria uma tabela na pgina. Seus principais atributos so: width : especifica a largura da tabela (em pixels ou porcentagem). height: especifica a altura da tabela da mesma forma que a largura. border: espessura da borda da tabela Para especificar melhor esta tabela, usa-se tags <tr> para adicionar uma linha e <td> para adicionar uma coluna. Os principais atributos destas tags so: cellspacing: espao entre as clulas da tabela
11
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
cellpadding: enchimento entre as clulas Exemplo (Execute em seu navegador criando vrias linhas e adicionando dados diferentes):
<table> <tr> <td> Linha 1 coluna 1 </td> <td> Linha 1 coluna 2 </td> </tr> <tr> <td> Linha 2 coluna 1 </td> <td> Linha 2 coluna 2 </td> </tr> </table>
<form>: Cria um formulrio que pode possuir vrias caractersticas diferentes como caixas de textos, caixas de seleo, reas de texto, botes de envio de informaes. Os principais atributos de um formulrio so: action: indica qual o script ir processar as informaes enviadas pelo formulrio method: indica o mtodo de envio das informaes (Post ou Get). O mtodo GET usado para enviar pequenas quantidades de informao, visto que sua capacidade de envio limitada. Utiliza a barra de endereos do navegador para enviar informaes para o servidor. . o mtodo de envio mais rpido e tambm o menos seguro, pois as informaes enviadas atravs deste mtodo ficam explicitamente visveis na barra de endereos.
12
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Neste mtodo a URL do site assume o seguinte aspecto: http://www.sitequalquer.com?informao1=valor1&informao2=valor2 O sinal ? indica que o fim do endereo do site e o incio das informaes que sero enviadas atravs do mtodo GET. Informao1 e Informao2 so as variveis, que contm os valores que sero enviados para o servidor Valor1 e valor2 so os valores. O mtodo POST envia informaes de forma mais segura possibilitando o uso de recursos de ssegurana, porm ele mais lento. Exemplo (Execute procurando conhecer as vrias funcionalidades de um formulrio):
<form action=processa.php method=post> <input type=text> Nome </input> <input type=text> Email </input> <input type=textarea> Comentarios </input> <input type=submit value=Enviar /input> </form>
2.2 Estilos
A linguagem HTML define apenas a estrutura de uma pgina Web. Entretanto, as pginas ficam sem vida, sem estilos. Para contornar isso, existem propriedades que so definidas em uma outra linguagem, denominada CSS. Esse assunto foge do escopo desta apostila, mas algo essencial no desenvolvimento de um web site.
13
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
As propriedades das CSS definem estilos como cor de fundo, largura do corpo da pgina, margens, enchimentos, cor do texto e muitas outras coisas. Tendo em vista as vrias aplicaes de CSS, recomendvel que a conhea para que a pgina possua uma apresentao bem mais agradvel.
2.3.1 Client-Side Scripts As aes so executadas no browser, sem utilizar o servidor. So muito teis em processamento de formulrios, no qual se evita um possvel trfego na rede. A linguagem Java script utiliza esse tipo de execuo e hoje uma das mais utilizadas em sites dinmicos.
14
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
So scripts executados diretamente no servidor e responsveis pela criao de pginas em tempo real. Esse tipo de script muito utilizado em sistemas de busca. Neste caso existe um modelo de pgina de respostas, que alterada e exibida dependendo dos dados inseridos pelo usurio. O PHP uma linguagem Server-Side, ou seja, os scripts so executados no servidor. Depois do script finalizado, uma pgina HTML enviada para o navegador que fez a solicitao e exibida.
3. A linguagem PHP
A linguagem HTML no o suficiente para atender s vrias funcionalidades da maioria dos sites. Afinal, ela s cria pginas estticas, sem que o usurio possa inserir e armazenar informaes no servidor. Dessa forma, existem outras linguagens que abordam esses aspectos, como o caso do PHP.
3.1 Histria
A linguagem de programao PHP, foi criada em 1995 por Ramus Lerdorf. Essa primeira verso chamava-se PHP/FI (Personal Home Page Tools-Form Interpreter) e aos poucos as pessoas passaram a contribuir com o projeto. Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo e em 1997, Ramus lanou a verso 2 do PHP/FI, que contava com scripts melhorados. Nessa fase, cerca de 50.000 sites utilizavam PHP.
15
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Com o aumento das contribuies, o PHP sofreu mudanas no desenvolvimento. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a verso 3, chamada de PHP: Hypertext Preproocessor Em 2000 foi lanado o PHP 4, que trouxe muitas novidades para os programadores de PHP. Uma das mais importantes foi o suporte a sesses, til para identificar o cliente que solicitou determinada informao. Em 2002, foi lanada a verso 4.3.0 que trouxe algumas novidades como suporta a streams ( camada de entrada e sada de arquivos e de rede), CLI (Interface de Linha de Comando) e a biblioteca GD (tratamento de imagens). Depois disso, surgiu a demanda por funcionalidades orientada a objetos fazendo com o que o PHP tivesse uma nova verso. A verso PHP 5 foi lanada em 2004 trazendo como principal novidade a orientao a objetos. Alm disso, ela trouxe funcionalidades muito importantes como SOAP, MySQLi e vrias outras extenses importantes. Atualmente o PHP est na verso 5.4.0 e continua crescendo e evoluindo muito a cada verso afim de atender as novas necessidades dos desenvolvedores PHP.
16
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
17
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Em PHP, todas as variveis devem ser iniciadas pelo caractere $ e por uma string iniciada por letra ou pelo caractere _. uma linguagem CASE SENSITIVE, ou seja, ela diferencia letras minsculas de maisculas. Assim sendo, as variveis $nome e $NOME so diferentes. O PHP define o tipo da varivel no momento em que ela declarada. Isso diferencia um pouco de outras linguagens de programao, nas quais o programador deve informar o tipo da varivel previamente.
3.3.2 Comentrios Assim como em muitas outras linguagens, o PHP possui dois tipos de comentrios. Quando o mecanismo que executa o php, encontra um comentrio, ele passa a ignorar tudo dentro dele. Comentrios de uma linha : So adicionados com os caracters // e marcam o comentrio at o final da linha de cdigo. Exemplo:
<?php $a = string1; $b = 12; ?> // $a recebe a primeira string // $b recebe o valor 12
Comentrios de vrias linhas : So delimitados no incio pelos caracteres /* e finalizados com */ . So muito teis quando se deseja comentar grandes trechos de cdigos. Exemplo:
18
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<?php echo teste; ?> A funo echo utilizada acima serve para imprimir na tela uma mensagem ou uma varivel. Ela muito utilizada, pois quase sempre se deseja enviar mensagens na tela do usurio. 3.3.4 Script de exemplo Abaixo temos um script PHP, que serve para ilustrar algumas das coisas j faladas at agora. importante observar que o script misturado com o cdigo HTML. Na maioria dos casos isso que acontece, mas sempre importante deixar o cdigo legvel. <html> <head> <title> <?php echo Pagina principal ?></title> </head> <body> <?php $a = Sejam bem-vindos ao Curso de PHP e MySql; echo $a; $b=40; $c=3; $d= $c * $b; echo O resultado da multiplicao foi + $d; /*Este um comentrio com mais de uma linha */
19
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
?> </body> </html> Considerando a ltima impresso do cdigo acima, o operador + serve para juntar a string anterior com um valor numrico, passado como uma varivel. Ao executar esse cdigo no navegador, pode-se visualizar seu cdigo fonte. No entanto, s aparecer o HTML da pgina, pois o script PHP executado no servidor e somente o resultado enviado para o browser.
3.3.5 Quebra de linha em PHP Em HTML, foi visto que para quebrar uma linha em uma pgina basta usarmos a tag <br />. Porm, se tivermos muitas linhas de cdigo PHP que necessitem de quebras de linha, fica invivel mesclar o HTML com o PHP. Por isso, em PHP existe uma funo especial para realizar esse procedimento chamada nl2br (o que pode ser entendido como new line to br). Exemplo: <?php $texto = $_POST[texto]; pelo mtodo post echo nl2br($texto); tela j com as quebras de linha ?> //Com o uso dessa funo, os dados so exibidos na //Recebe um texto enviado por um formulrio
20
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
3.3.6 Erros em PHP Os scripts PHP geram erros, principalmente para iniciantes, e importante que se tenha uma noo de onde se encontra esse erro e mais ainda, uma noo de como consert-lo. Muitos sites so construdos, e nem sempre so entregues funcionando perfeitamente. Alis, ocorrem muitos erros quando o sistema j est sendo utilizado. So os chamados erros em tempo de execuo e so mais difceis de ser encontrados, pois no simplesmente uma sintaxe incorreta. Existem algumas funes no PHP que tentam amenizar os efeitos causados por esses erros. O sinal de arroba(@) utilizado precedendo uma expresso em PHP. Se esta expresso gerar um erro, este sinal no permitir que sejam enviadas mensagens de erro do PHP, que so muito confusas para o usurio. O que se pode fazer ento testar se houve o erro e em seguida enviar uma mensagem mais amigvel. O tratamento de erro serve para preparar o script para rodar em qualquer situao, ou se no for possvel, avisar o motivo do erro. Existem validaes simples que podem ser adicionadas ao script para que diversos erros sejam evitados. Abaixo so listadas algumas delas:
file_exists - serve para verificar se um arquivo existe defined - serve para verificar se uma constante foi definida. isset - verifica se uma varivel existe. is_array - verifica se a varivel um array (Arrays sero melhor explicados adiante) is_numeric - verifica se a varivel um nmero ou uma string numrica. is_writable - verifica se pode escrever para o arquivo (writable). version_compare - Compara a verso do php.
21
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Essas funes so extremamente teis. Por exemplo, antes de tentar abrir um arquivo, pode-se verificar se ele existe. Caso no exista, uma mensagem amigvel pode ser exibida ao usurio, ao invs de uma mensagem gerada pelo prprio mecanismo de PHP. Alm disso, pode-se verificar se uma varivel foi definida antes de tentar us-la. So diversas as vantagens do tratamento de erros e fundamental, para um bom script PHP, que essas funes sejam utilizadas sempre.
3.3.7 Variveis, constantes e tipos de dados PHP suporta os seguintes tipos de dados:
Ao declarar uma varivel, o programador no tem a necessidade de especificar esse tipo, pois, diferentemente de algumas linguagens de programao, PHP utiliza checagem de tipos dinmica. Dessa forma, declarando : $a = Uma string qualquer A varivel $a se torna do tipo string. Ao mesmo tempo, fazendo:
22
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
$a = 256 A varivel $a se torna um inteiro. O PHP decide o tipo da varivel em tempo de execuo. possvel converter um tipo de varivel em outro utilizando typecasting (converso de tipos). Existe tambm duas outras funes muito importantes: - settype ( ): Esta funo define o tipo de uma varivel, passando esse tipo em um parmetro em sua chamada. Seu prottipo : settype ($var , $tipo) Dessa forma, o programador pode definir um tipo para uma varivel qualquer. - gettype ( ): Funo que retorna o tipo de uma varivel. Seu prottipo : gettype ($var)
Inteiros Uma varivel inteira possui valores pertencentes ao conjunto dos nmeros
inteiros. Alguns exemplos: $valor = 256 //Inteiro positivo na base decimal $valor = -256 //Inteiro positivo na base decimal $valor = 0x34 //Inteiro na base hexadecimal
Float Uma varivel do tipo float possui valores pertencentes ao conjunto dos nmeros
23
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Em PHP essas strings possuem duas formas diferentes de representao. So elas: Utilizando aspas simples ( ): dessa maneira, qualquer cadeia de caracteres ou varivel dentro das aspas sero exibidos exatamente do modo que se encontram. Utilizando aspas duplas ( ): dessa maneira, caso exista alguma varivel dentro das aspas, ela ser substituda pelo valor que ela armazena. Para que fique mais claro, acompanhe os exemplos: <?php $valor = 240; echo O valor : $valor; ?> A sada neste exemplo : O valor $valor. Ou seja, a varivel no substituda pelo seu valor, ela escrita da forma que se encontra entre as aspas simples. <?php $valor = 240; echo O valor : $valor; ?> A sada neste exemplo : O valor 240.
24
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Ou seja, neste caso a varivel no impressa da maneira que est realmente escrita entre as aspas. As duas formas de representao de strings so vlidas. O uso de aspas simples ou duplas depende da aplicao. Existem diversas funes que lidam com strings que so muito importantes em PHP e sero mais detalhadas adiante.
Arrays Os arrays (ou vetores) so um tipo de dados muito utilizado para representar listas de valores. Os elementos individuais so acessados por sua posio no array que dada por um ndice. Existem os arrays unidimensionais (vetores) e os arrays multidimensionais (matrizes). Para se ter uma ideia melhor sobre os arryas, o desenho abaixo ilustra a estrutura e os ndices de cada posio.
Array (vetores) 0 1 2 3 4 5 6
As posies do vetor so indexadas a partir do 0. O vetor acima possui 7 posies e cada uma pode armazenar um dado qualquer. Para acessar um dado em determinada posio do vetor, basta utilizar o nome da varivel seguida por [ ], e entre os colchetes informar o ndice que deseja buscar. Exemplo:
25
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<?php $vetor = array(1,30,32,"teste",12.34); for($i=0;$i<sizeof($vetor);$i++) { echo $vetor[$i]."\n"; } ?> O script acima cria um vetor utilizando a varivel $vetor. Em PHP basta digitar array( ) e inserir os elementos entre parnteses. Observe que inserimos inteiros, strings e floats. Isso possvel pois como j foi comentado, PHP s define o tipo da varivel no momento da declarao e isso vale tambm para posies dos vetores. Em seguida, feito um lao for, que vai de 0 at o tamanho do vetor e imprime cada elemento presente em cada ndice.
(1). So extremamente importantes para verificao de strings vazias, estruturas condicionais, comparaes de valores e tomadas de deciso.
3.3.8 Operadores Aritmticos So operadores responsveis por operaes matemticas, por isso, os operandos devem ser nmeros. Caso contrrio, tero seus valores convertidos em nmeros antes da realizao da operao. Por exemplo, duas strings com valores 3 e 5, se fossem somadas, seus valores passariam de string para integer. Porm, nem
26
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
sempre essa transformao ocorre de forma correta e podem ocorrer erros durante a execuo do script. + * / % Adio Subtrao Multiplicao Diviso Resto da diviso
Operador de string Existe apenas um operador para strings, que o operador de concatenao, ou
Todas as informaes armazenadas no computador so constitudas de bits (0 ou 1). Esse operador realiza operaes lgicas sobre cada bit individual de um nmero. & | ^ ~ << >> e lgico ou lgico ou exclusivo no (inverso) Deslocamento para esquerda Deslocamento para direita Operadores lgicos Possuem como resultado inteiros representando valores booleanos, ou seja, valores verdadeiros ou falsos.
27
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
! && ||
Comparao So comparaes feitas entre variveis e retornam valores true (1) ou false (0).
Igual Exatamente igual a Diferente Menor que Maior que Menor ou igual a Maior ou igual a A diferena entre os operadores == e === pode ser vista pelo exemplo:
28
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
como PHP, possuem uma ordem de precedncia. Por exemplo, a expresso 5*4+10 avaliada como 30 realizando primeiramente a multiplicao que deve ser executada primeiro. A tabela abaixo mostra a ordem de precedncia entre os operadores de PHP. Ordem 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 Operador , Or Xor And Print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === !== < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object)@
Existem diversos operadores diferentes em PHP, por isso importante conhecer a precedncia de cada um deles para que no ocorram erros difceis de serem encontrados. importante ressaltar que essa precedncia influencia pelo uso de parnteses ( ), colchetes [ ] chaves {}.
29
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
3.3.9 Constantes
Definindo constantes
Constantes so valores que no se alteram durante a execuo de um cdigo. Em PHP, essas constantes so definidas utilizando a funo define. Ela tem o seguinte prottipo. int define (string nome_da_constante, mixed valor); Se a funo for bem sucedida ela retorna o valor true (1). A palavra mixed indica que podem ser definidas variveis de qualquer tipo. Porm, constantes s podem possuir valores escalares, ou seja, arrays por exemplo no podem ser constantes. Exemplo: define (taxa, 6.12); $valor_total = 100.00 + taxa;
Variveis alfanumricas
Existem vrias funes relacionadas a strings e caracteres. Estas funes so muito importantes para facilitar o processo de escrita do cdigo e recuperao de informao enviada pelo usurio. Sero vistas as principais funes, visto que existe uma diversidade muito grande desse tipo de funo.
30
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Formatando strings Frequentemente necessrio manipular strings fornecidas pelo usurio, principalmente em formulrios, antes de utiliz-las. A primeira operao bsica realizada com strings a concatenao, que basicamente une duas strings com o operador ( . ) . Exemplo: $nome = Walter; $sobrenome = Silva; $nome_completo = $nome . . $sobrenome; Neste exemplo, a varivel nome e sobrenome compe o nome completo, utilizando a concatenao do nome, com um espao em branco e em seguida o sobrenome. O primeiro passo na organizao eliminar todo o excesso de espaos em branco da string. O PHP fornece trs funes para esse propsito.
Utilizando trim ( ) A funo trim ( ) elimina todos os espaos em branco do incio e do final da
31
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Dependendo da aplicao, pode-se utilizar as funes ltrim ( ) e rtrim ( ), que so pequenas variaes da funo trim ( ). A primeira delas elimina somente os espaos inseridos no incio da string (left trim) e a segunda elimina somente os espaos inseridos no final da string (right trim). muito importante utilizar essas funes quando for necessria a comparao entre strings ou armazenamento em banco de dados.
Utilizando strtoupper ( ), strtolower ( ), ucfirst ( ), ucwords ( ) So funes que alteram a caixa de uma string, ou seja, trocam letras
maisculas por minsculas e vice versa. A tabela abaixo exemplifica a utilizao destas funes. Suponha que a string de teste seja Curso de PHP + MySql Funo strtoupper ( ) strtolower ( ) ucfirst ( ) ucwords ( ) Descrio Coloca a string toda em letras Exemplo CURSO DE PHP + MYSQL
maisculas Coloca a string toda em letras curso de php + mysql minsculas Coloca o primeiro caractere da string Curso de php + mysql em letra maiscula Coloca o primeiro caractere de cada Curso De Php + Mysql palavra em letra maiscula
Unindo e dividindo strings Entre as diversas operaes que precisamos fazer com strings, uma das mais
32
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
exemplo, podemos separar todas as palavras de uma frase, ou texto. So inmeras as possibilidades e facilidades que estas funes podem trazer para o programador PHP.
Utilizando explode ( ) e implode ( ) Essa funo aceita uma entrada de string e a divide em partes de acordo com
um separador que passado por parmetro. Seu prottipo : array explode (string separador, string entrada); A funo retorna um array, contendo as vrias partes da string. Exemplo: $email_array = explode (@, email); Essa chamada divide o e-mail do cliente em duas partes: o nome do usurio, armazenado em $email_array[0] e o nome de domnio que armazenado em $email_array [1]. A funo implode ( ), faz o efeito contrrio. Ela recebe um array como parmetro e um unificador. Exemplo: $novo_email = implode (@,$email_array); Os elementos de $email_array so unificados na nova varivel adicionado o caractere @.
Utilizando substr ( )
33
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Essa funo permite o acesso a uma determinada parte de uma string. Ela possui o seguinte prottipo: string substr (string string_de_entrada, int inicio [, int comprimento] ); Os parmetros da funo so a string de entrada, o incio da parte da string que se deseja acessar e por ltimo, um parmetro opcional que determina um comprimento mximo para a substring. Os caracteres [ ] no prottipo de uma funo indicam que esse parmetro opcional. O exemplo abaixo ilustra o uso desta funo: $string = Funes de manipulao de strings $string1 = substr ($string, 3); $string2 = substr ($string, 3, 7); echo $string1; echo $string2; Como resultado, este script retornar es de manipulao de strings como resultado da $string1 e es de como resultado da $string2.
Comparando strings com strcmp ( ) O prottipo para strcmp ( ) : int strcmp (string1, string2); A funo recebe duas strings e as compara. Caso elas sejam iguais, a funo
retorna 0. Se string1 vier depois que string2 na ordem lexicogrfica a funo retorna um nmero maior que 0 e caso contrrio, a funo retorna um nmero menor que 0.
34
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Utilizando strlen ( ) Essa funo retorna o comprimento de uma string. muito til quando se deseja
fazer laos testando cada caractere da string, mas no previamente conhecido o seu tamanho. Seu prottipo : int strlen (string string_de_entrada);
Outras funes de strings Existem diversas outras funes de strings, cada uma com uma funcionalidade.
strpos ( ) : Retorna a posio da primeira ocorrncia de uma string dentro de outra string mais longa. strrpos ( ): Quase idntica a strpos ( ) exceto pelo fato que retorna a posio da ltima ocorrncia da string. str_replace ( ): Substitui todas as ocorrncias de uma string, por uma nova, em uma string mais longa. strstr ( ): Pode ser utilizada para encontrar uma correspondncia de uma string dentro de outra string mais longa. stristr ( ): Quase idntica strstr ( ) porm no faz distino entre maisculas e minsculas.
35
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Frequentemente, no desenvolvimento Web, surge a necessidade de se trabalhar com datas e horas. Quando um formulrio preenchido, geralmente, enviado para o banco de dados ou sistema de arquivos, a data e a hora que o usurio enviou os dados. Isso muito til para que se tenha um controle maior do sistema desenvolvido. Um caso tpico um sistema de inscries com vagas limitadas. As vagas vo sendo preenchidas pelos usurios que se cadastram primeiro, e quem no se consegue realizar o cadastro, pelo fato das vagas terem sido preenchidas, o usurio fica numa lista de espera. O sistema ento deve ter o controle de quando (em qual data e hora) os usurios se inscreveram a fim de comparar cada valor e reservar as vagas da maneira correta. Nesta parte da apostila aprenderemos como lidar com datas e horas realizando comparaes e manipulando esses dados essenciais em sistemas Web.
36
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
d - dia do ms, sempre com 2 dgitos: "01" a "31" h - hora, formato de 12 horas "01" a "12" H - hora, formato de 24 horas "00" a "23" i - minutos, sempre com 2 dgitos: "00" a "59" L - boolean indicando se o ano bissexto: "0" ou "1" m - ms, sempre com 2 dgitos: "01" a "12" s - segundos, sempre com 2 dgitos: "00" a "59" t - nmero de dias do ms: "28" a "31" w - dia da semana: "0" (Domingo) a "6" (Sbado) Y - ano com 4 dgitos: "1999" y - ano com 2 dgitos: "99" z - dia do ano: "0" a "365" Como exemplos, temos: echo date(d/m/Y H:i:s); echo date(m/y h:i:s); As sadas destas funes dependem da hora em que o script foi executado. O formato da sada da primeira instruo echo idntico : 20/03/2012 15:30:12 . A segunda instruo echo tem a sada: 03/2012 03:30:12.
37
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Vamos definir a seguinte funo: <?php function intervalo ($inicio, $fim) { $dataInicio = strtotime($inicio); $dataFim = strtotime($fim); $intervalo = $dataFim - $dataInicio return date('d', $intervalo); } echo intervalo ('2012-12-10','2012-12-30'). " dias"; ?> A funo calcula o nmero de dias entre uma data e outra que so passadas por parmetro para a funo intervalo. importante que as datas sejam passadas neste formato YYYY-mm-dd. A funo retorna atravs da funo date ( ), o nmero de dias entre as duas datas.
38
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
39
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
uma condio for satisfeita. Para isso existem as estruturas IF, else que so estruturas condicionais. Outro ponto importante diz respeito repetio de trechos de cdigo. As estruturas de repetio como for, while, do while, controlam essas repeties. Estruturas condicionais Os scripts sempre devem ser capazes de tomar decises em relao a algum dado ou condio. Vamos ver como funcionam as estruturas de desvios condicionais.
5.1 Instrues If
Essa instruo utiliza uma condio. Se a condio, que fica entre parnteses, a ser testada for true, o bloco de cdigo seguinte ser executado. Por exemplo, em um formulrio de e-mail, o usurio pode se esquecer de digitar seu nome no remetente e isso algo que no deve ser feito. Por isso, em PHP pode-se verificar se esse dado foi digitado e em seguida alertar o usurio, caso ocorra algum problema. O cdigo abaixo de uma pgina que recebe os dados pelo mtodo post e faz a validao dos dados com instrues if simples. <?php $email = $_POST[email]; $nome = $_POST[nome]; $assunto = $_POST[assunto]; if($email == ) { echo Erro: Seu e-mail deve ser informado; exit(0); } if($nome == ) {
40
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
echo Erro: Seu nome deve ser informado; exit (0); } ?> O cdigo faz a validao dos dados, da maneira mais simples possvel, apenas verificando se o usurio deixou de digitar um dos dois campos obrigatrios. As chaves depois da condio if indicam o incio e o fim de um bloco de cdigo que ser executado caso essa condio seja satisfeita.
41
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
//Redireciona para a rea de administradores } else { //Redireciona para a rea de usurios } ?> As instrues if e else podem ser utilizadas quantas vezes for necessrio.
42
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
$area_produto = $area2; break; case 3 : $area_produto = $area3; break; case 4 : $area_produto = $area4; break; case 5 : $area_produto = $area5; break; default : $area_produto = $area0; break; ?> Quando um caso da instruo switch for ativado, o PHP executar o cdigo at encontrar uma instruo break. O ltimo valor default selecionado sempre que nenhum dos valores definidos for selecionado.
43
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
6.2 O loop do while Essa estrutura funciona basicamente da mesma forma que a instruo while. A nica diferena que o bloco de cdigo dentro das chaves ser executado pelo menos uma vez. A estrutura geral de uma instruo do..while :
44
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
do expresso while(condio); A condio s testada no final, fazendo que a expresso seja executada ao menos uma vez. Exemplo: $num = 100; do { echo $num; } while ($num<=0); O exemplo acima ilustra bem a diferena entre o while e o loop do..while. A instruo echo $num ser executada pelo menos uma vez. Somente no final a comparao feita e o lao encerrado.
45
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
condio: Esta condio testada antes de cada iterao. Caso ela retorna true, o bloco de
cdigo executado novamente, caso contrrio o lao encerrado. expresso2: executada no final de cada iterao e normalmente ela ajusta o valor de um contador.
O exemplo abaixo ilustra o uso do loop for. Ele imprime todos os nmeros pares entre 0 e 100 em ordem decrescente. Exemplo: $inicio = 100; for($inicio ; $inicio>=0 ; $inicio--){ if($inicio%2 == 0 ) echo $inicio; }
46
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
echo $item; } A ideia deste lao muito simples. A cada iterao, a varivel $item recebe um valor do array $valores e o imprime. O foreach permite o caminhamento no vetor, sem que isso necessite ser explicitamente declarado pelo programado.
47
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
48
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
indicando o cdigo PHP somente para iniciar o loop for e abrir as chaves. No final do script necessrio abrir novamente os delimitadores de PHP para que a chave seja fechada. Tudo que estiver entre as chaves ser executado 10 vezes. Neste caso, existe a criao de uma linha com 3 colunas. Isso feito repetidamente e no final criada uma tabela com as 10 linhas e 3 colunas. Esta no a nica maneira de se construir tabelas grandes com loops em PHP e HTML, porm uma maneira bem simples e que funciona muito bem.
7. Funes
comum em sistemas Web, e em qualquer outro sistema, o uso e funes, visando reutilizao de cdigo. Existem trechos de cdigo dos programas que so utilizados vrias vezes. Esses trechos podem ser inseridos em pequenos mdulos, que so as funes, e reutilizados onde for preciso. As funes trazem grandes vantagens. Alm da reutilizao, o cdigo que utiliza funes se torna mais consistente, fcil de manuteno e mais confivel. A sintaxe bsica para um funo : function nome_da_funcao (arg1,arg2,arg3,...){ //Comandos return valor_a_ser_retornado; } recomendado que toda funo esteja bem documentada para facilitar a leitura e compreenso do cdigo. funo do programador cuidar do tipo de retorno de uma
49
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
funo. Pode-se, por exemplo, atribuir a uma varivel este valor de retorno. Como a definio de tipos em PHP dinmica, isso pode gerar erros se no for bem monitorado. Toda funo pode retornar um valor qualquer, porm isso no regra geral. No possvel que uma funo retorne mais de um valor, mas permitido que sejam retornados arrays ou listas.
7.1 Parmetros
Um parmetro ou argumento, so valores que podem ser passados para as funes, para que estas realizem alguma operao com esses valores. Eles devem ser declarados logo aps o nome da funo e entre os parnteses. Assim, na sintaxe bsica mostrada acima, os parmetros so arg1, arg2, arg3. Podem ser passados quantos parmetros forem necessrios. Exemplo:
function verificaDados($nome,$email) { $mensagem = ; if($nome == ) $mensagem = O nome no foi preenchido; if($email == ) $mensagem = O email no foi preenchido; return $mensagem; } Poderamos utilizar a funo acima em vrios formulrios diferentes. Quando o usurio clicar em enviar os dados, pode ser feita essa verificao muito simples, se os dados foram preenchidos e retornar a mensagem correta.
50
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
51
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Exemplo: function alteraValor (&$num1,$num2) { $num1 +=5; $num2 +=5; } $a = 1; $b = !; alteraValor ($a,$b); echo Valor de a: .$a. Valor de b: . $b; alteraValor ($a,&$b); echo Valor de a: .$a. Valor de b: . $b; Na primeira impresso na tela, teremos somente o valor de $a alterado para 5, pois foi passado por referncia. J na segunda impresso, temos os dois valores alterados. O valor de $a na funo j espera uma varivel sendo passada por referncia, e o valor de $b, foi passado utilizando o modificado &;
52
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Todo o cdigo que estiver dentro das chaves dessa funo sero executados. Se a funo necessitar de algum parmetro, estes devem ser informados tambm no momento da chamada da funo. Por exemplo, para chamar a funo do exemplo anterior, considerando que os dados foram passados pelo mtodo POST , temos a chamada: verificaDados($_POST[nome],$_POST[email]); Existem vrias funes j definidas no PHP, bastando assim cham-las da maneira correta. J fizemos isso em exemplos anteriores com as funes gettype( ), settype ( ) , vrias funes de string e arrays. Portanto, possvel utilizar estas funes j prontas, ou criar novas funes de acordo com as necessidades do programador.
Variveis declaradas dentro de uma funo so chamadas de variveis locais. Estas variveis s so visveis e utilizveis dentro desta funo. Variveis declaradas fora de funes, so chamadas de variveis globais. Estas variveis so utilizadas e visveis por todo o script, mesmo dentro de funes. A utilizao das instrues include ( ) e require ( ) no afetam o escopo, valendo assim as mesmas regras descritas acima. Uma varivel local a uma funo, pode ter seu escopo global, utilizando-se a palavra chave global.
53
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<?php echo Este cdigo se encontra em um arquivo de script reutilizvel; ?> O prximo cdigo um arquivo chamado index.php <?php echo Este o arquivo principal; require (reutilizavel.php); echo Este o fim do arquivo principal; ?> Ao executar o arquivo ndex.php teremos a seguinte sada: Este o arquivo principal Este cdigo se encontra em um arquivo de script reutilizvel Este o fim do arquivo principal
54
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Dessa forma, quando a instruo require ( ) executada, ela substituda pelo contedo do arquivo solicitado. Essa instruo muito importante em casos de sistemas grandes ou sites que possuem vrias pginas parecidas. Se estas pginas possuem o mesmo cabealho, o mesmo rodap ou uma mesma barra lateral, o cdigo para estes elementos podem ser escritos em um arquivo .inc (arquivo require ou include). Ao construir cada pgina, basta utilizar a instruo require( ) e obter o contedo de cada arquivo.
include( ) Esta instruo quase idntica a require ( ) . A nica diferena entre elas que
require ( ) retorna um erro fatal quando falha, enquanto include( ) retorna apenas um aviso.
require_once ( ) e include_once ( ) So duas variaes de require( ) e include( ) cujo objetivo garantir que um
arquivo possa ser includo apenas uma vez (once). Para os exemplos com cabealhos, rodaps, essas funes no so muito teis. Elas se tornam teis quando se comea a utilizar bibliotecas de funes. Utilizando estas construes, existe uma proteo para que o programador no inclua acidentalmente a mesma biblioteca duas vezes.
55
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Armazenar e acessar informaes em um banco de dados no uma tarefa difcil. Existem os sistemas de gerenciamento de banco de dados (SGBD) que permitem ao programador uma grande facilidade na manipulao dos dados. Algumas das principais vantagens na utilizao desse sistema esto descritas abaixo:
Os SGBDs fornecem acesso rpido aos dados armazenados Os SGBDs podem ser facilmente consultados para extrair conjuntos de dados e apresent-los da maneira que for necessria. Os SGBDs tem sistemas predefinidos de privilgios aumentando assim a segurana dos dados armazenados.
8.1.1 Tabelas Os bancos de dados relacionais so compostos de relaes chamadas de tabelas. Como o nome sugere, so tabelas de dados, semelhantes a uma planilha eletrnica, compostas por linhas e colunas. Exemplo:
56
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Alunos id_aluno 1 2 3 nome Fred Paulo Andr matrcula 3452341-3 3452245-6 3452232-5 curso Matemtica Engenharia Eltrica Histria
Os elementos da tabela so: - Nome (Alunos) - Colunas, cada uma representando um diferente tipo de informao - Linhas que correspondem a alunos individuais. 8.1.2 Colunas Cada coluna na tabela possui um nome nico e possui dados diferentes. Esses dados podem tambm ser de tipos diferentes, como na tabela anterior, onde a coluna id_aluno possui dado8.1.2 Colunass do tipo inteiro enquanto a coluna nome formada por strings. As colunas podem tambm ser chamadas de campos ou atributos.
8.1.3 Linhas So chamadas de registros e cada uma representa um aluno diferente, no caso da tabela anterior. 8.1.4 Valores Cada linha consiste em um conjunto de valores individuais que correspondem s colunas. Cada valor tem o tipo correspondente ao tipo de dados especificado na coluna.
57
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
8.1.5 Chaves O campo id_aluno chamado de chave primria. Essa chave funciona como um identificador nico para cada aluno. O nome do aluno no servir como identificador nico visto que vrios alunos podem ter o mesmo nome. Uma chave tambm pode consistir de vrias colunas. Por exemplo, poderamos utilizar como chave primria os campos id_aluno e matricula. Os bancos de dados em sua maioria consistem de vrias tabelas e utilizam a chave como referncia de uma tabela para outra. Adicionamos uma outra tabela ao banco de dados, que consiste nas disciplinas cursadas por cada aluno. Exemplo:
Alunos id_aluno 1 2 3 nome Fred Paulo Andr matrcula 3452341-3 3452245-6 3452232-5 curso Matemtica Engenharia Eltrica Histria
Disciplinas id_disciplina 1 2 3 4 5 id_aluno 1 3 2 2 1 disciplina Clculo Diferencial e Integral I Histria Moderna Fsica Experimental Programao de Computadores Geometria Analtica
58
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Cada linha na tabela de disciplinas representa uma nica disciplina cursada por um nico aluno. Para saber qual aluno est cursando determinada disciplina, basta olhar o campo id_aluno. Quando o campo id_aluno aparece na tabela Alunos, ele referenciado como chave primria. Porm, quando ele aparece em outra tabela, com a qual ele tem alguma relao, referenciado como chave estrangeira.
8.2 Relacionamentos
As chaves estrangeiras representam um relacionamento entre duas tabelas. No exemplo anterior, o campo id_aluno representa a chave estrangeira na tabela de disciplinas. Em bancos de dados relacionais existem trs tipos bsicos de relacionamento.
Relacionamento de um para um: Esse tipo de relacionamento indica que h um de cada item do relacionamento. Expressam relaes nas quais um item em uma tabela tem apenas um item correspondente em outra tabela. Por exemplo, se tivssemos duas tabelas, chamadas Alunos e Matriculas. Cada aluno possui somente uma matrcula e cada matrcula, por sua vez, pertence a somente esse aluno.
Relacionamento de um para muitos: Neste relacionamento, uma linha de uma tabela vinculada a muitas linhas de outra tabela. Temos como exemplo duas tabelas Alunos e Livros. Elas representam uma relao de alunos com livros alugados por estes na biblioteca. Um aluno pode estar relacionado a vrios livros simultaneamente.
59
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Relacionamento de muitos para muitos: Neste relacionamento, muitas linhas de uma tabela esto relacionadas com muitas linhas de outra tabela. Como exemplo temos duas tabelas Alunos e Disciplinas. Um aluno pode cursar vrias disciplinas e cada disciplina pode ser cursada por diversos alunos diferentes.
9. Linguagem SQL
SQL significa Structured Query Language e a linguagem padro para acessar sistemas de gerenciamento de bancos de dados relacionais. utilizada em vrios sistemas de bancos de dados como, por exemplo, o MySQL.
60
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Atravs de comandos SQL, so construdos os bancos de dados, alm da insero, remoo e atualizao de informaes. Para que seja possvel criar um banco de dados necessrio um servidor, que pode ser um servidor local. Utilizaremos nesta apostila o PhpMyAdmin que uma ferramenta que lida com o banco de dados, de uma forma visual muito simples.
61
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
create table nome_da_tabela (colunas); Voc deve substituir nome_da_tabela por um nome da tabela que deseja criar e colunas por uma lista de nomes de colunas separados por vrgula. Alm do nome das colunas, necessrio especificar o tipo de dados que essa coluna armazenar. Como exemplo, temos abaixo a criao de uma tabela Cliente: create table cliente (id_cliente int not null auto_increment primary key, nome char(40) not null, cpf char (15) not null, cidade char (50) not null ); Vrios pontos so importantes nesse comando. Primeiramente, criamos uma tabela com nome cliente. A primeira coluna o identificador nico do cliente, que um inteiro no nulo. Alm disso, ele possui o atributo auto_increment que faz com que o sistema se encarregue de incrementar seus valores. preciso especificar tambm que este campo ser a chave primria. Nas outras colunas temos dados do tipo char( ) que so cadeias de caracteres. O tamanho mximo de armazenamento dessas cadeias especificado entre os parnteses. Com estes comandos bsicos, podemos criar nosso banco de dados e acrescentar vrias tabelas. Utilizando o PhpMyAdmin pode-se criar esses comandos de forma grfica, sem a necessidade da criao de comandos SQL explicitamente.
62
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Para que qualquer banco de dados se torne til, necessrio que dados sejam inseridos nele. Para isto utiliza-se a instruo INSERT de SQL. A forma normal dessa instruo : insert into nome_da_tabela (coluna1,coluna2,...,colunaN) values (valor1,valor2,...,valorN); Primeiro so listadas as colunas da tabela e em seguida os valores que preenchero essas colunas. muito importante que a ordem em que as colunas esto listadas, sejam as mesmas dos valores que deseja adicionar. Entretanto, a ordem em que as colunas so listadas no importa, desde que o valor correspondente seja o valor correto. Existe uma variao para essa instruo que a seguinte: insert into nome_da_tabela values (valor1,valor2,...,valorN); Ou seja, a listagem das colunas no obrigatria. Quando a instruo utilizada dessa forma, essencial que os valores sejam listados na ordem em que aparecem na estrutura do banco de dados. possvel tambm inserir vrias linhas em uma tabela de uma s vez. Cada linha deve estar no prprio conjunto de parnteses e cada conjunto destes deve estar separado por vrgula. Como exemplo, criaremos um banco de dados chamado Livros. Em seguida adicionaremos uma tabela esse banco e vamos inserir valores, para aplicar os conceitos j vistos anteriormente: As instrues SQL so: create database Livros;
63
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
use Livros; create table lista_livros (id_livro int not null auto_increment primary key, titulo varchar (50) not null, cdigo int not null. autor varchar(50), preo float(4,2) ); insert into lista_livros values (null,Java 2 Professional,672, Michal Morgan, 34.99), (null,Instalando Debian GNU/Linux, 763,Thomas Down,24.99), (null,Aprendendo GIMP em 24 horas,450,Thomas Schenk,31.20); O banco de dados Livros foi criado e adicionamos uma tabela chamada lista_livros. Nesta tabela criamos uma chave primria denominada id_livro, e outras colunas como titulo, cdigo, autor e preo. No tipo float, especificado o nmero de dgitos do valor (4) e o nmero de dgitos depois da vrgula(2). Nesse exemplo poderamos representar nmeros de 00,00 ate 99,99. A insero foi feita de uma maneira mais prtica, sem listar as colunas, e criando vrias linhas de uma vez.
64
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
select itens from nome_da_tabela [condies]; A instruo SELECT permite filtrar de vrias maneiras as buscas por dados, por isso, descrevemos as principais formas de se fazer isso. Utilizando o banco de dados que criamos anteriormente, vamos buscar por todos os ttulos de livros cadastrados no banco com a seguinte instruo: select titulo from lista_livros; Estamos selecionando os ttulos de todos os livros que se encontra nesta tabela. Se quisermos recuperar todas as informaes sobre todos os livros poderamos utilizar o caractere * , para especificar que queremos todos os itens. Dessa forma, a instruo ficaria desta forma: select * from lista_livros;
Na maioria das aplicaes, no necessitamos de recuperar todos os itens de todos os elementos cadastrados no banco de dados. Para isso, existem opes de filtragem, e entre todas, a mais importante a clusula WHERE. Vejamos um exemplo: select titulo from lista_livros where preo = 34.99; Essa instruo diz ao sistema de gerenciamento de banco de dados para selecionar o ttulo dos livros da tabela lista_livros ONDE o preo igual a 34.99. O sistema ento faz a busca baseando-se nestas informaes e retorna o ttulo do livro:
65
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Java 2 Professional A clusula WHERE muito importante pois ela especifica o critrio utilizado para selecionar linhas particulares. O sinal de igual utilizado, pode ser substitudo por qualquer operador de comparao, visto anteriormente, como por exemplo, maior que, menor que e todos os outros.
66
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Frequentemente, para responder a uma pergunta a partir do banco de dados, se torna necessrio utilizar dados de mais de uma tabela. As tabelas abaixo esto em um banco de dados que armazena informaes de clientes de uma loja de informtica e seus pedidos. So criadas duas tabelas clientes e pedidos, conforme ilustrado abaixo: clientes id_cliente 1 2 3 pedidos id_pedido 1 2 3 4 5 6 id_cliente 2 3 1 2 1 1 pedido Mouse ptico Notebook Pen Drive Fonte de Alimentao Carto de Memria Mochila para Notebook nome Fred Antnio Carlos Tiago endereo Avenida Central, n 34 Rua Jos Guimares, n762 Rua So Paulo, n 134
Cada cliente pode possuir vrios pedidos, por isso existe a chave estrangeira id_cliente na tabela de pedidos. Imagine ento uma situao na qual o banco de dados precise retornar todos os pedidos feitos por Fred. Para isso se tornar possvel, preciso fazer uma juno de tabelas (JOIN). Isso significa simplesmente unir duas ou mais tabelas para seguir os relacionamentos entre os dados. A instruo SQL que retorna todos os pedidos feitos por Fred pode ser expressada da seguinte maneira: select pedidos.pedidos from clientes, pedidos where clientes.nome = Fred and
67
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
clientes.id_cliente = pedidos.id_pedido; A sada dessa consulta : ---------------------Pen Drive Carto de Memria Mochila para Notebook -----------------------------Como so necessrias informaes das duas tabelas, precisamos primeiramente list-las no incio da consulta. J na clusula WHERE, especificamos qual atributo de qual tabela estamos nos referenciando. Por exemplo: clientes.nome especifica que estamos pegando o nome da tabela clientes. Da mesma forma: clientes.id_cliente = pedidos.id_pedidos compara o id_cliente, presente na tabela clientes com o id_pedidos, da tabela de pedidos. Para unir mais de duas tabelas, deve-se proceder de maneira anloga, sempre citando as tabelas que iro fazer parte da consulta e especificar os atributos de cada tabela.
68
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
select * from clientes order by name; Essa consulta retorna o seguinte resultado -------------------------------------------------------------------------------1 2 3 Fred Avenida Central, n 34 Antnio Carlos Rua Jos Guimares, n 762 Tiago Rua So Paulo, n 134
-----------------------------------------------------------------------------------Os dados foram ordenados em ordem crescente em relao ao nome. Podemos orden-los de forma decrescente, apenas acrescentando a palavra-chave DESC. A consulta seria a seguinte. select * from clientes order by name desc; Existem vrias aplicaes para DESC. Por exemplo, em um site de notcias, podemos listar as notcias ordenadas por datas, nas quais as mais recentes aparecerem primeiro. Em sites comerciais, possvel ordenar os produtos pelo menor ou maior preo, mais vendidos ou mais requisitados.
69
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
update nome_da_tabela set coluna1 = expressao1, coluna2 = expressao2,... where condies; Com essa instruo, podemos atualizar a tabela nome_da_tabela e definindo valores para cada coluna que se deseja alterar. Pode-se limitar UPDATE para linhas particulares com uma clusula WHERE. Como exemplo, vamos supor que Fred tenha mudado de endereo. Agora seus dados precisam ser atualizados no banco de dados da loja. A instruo SQL seria a seguinte: update clientes set endereco =novo_endereco where id_cliente = 1;
70
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Todas as linhas da tabela sero excludas. Por isso necessrio muita ateno ao criar este comando. A clusula WHERE serve, mais uma vez, para filtrar os resultados a serem deletados Para excluir uma tabela inteira, utiliza-se o comando: drop table nome_da_tabela; Esta consulta exclui todas as linhas da tabela e a prpria tabela. Temos a opo tambm de excluir o bando de dados inteiro. Nesse ponto preciso maior cuidado, pois todos os dados sero perdidos. A instruo : drop database nome_do_banco;
71
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
O mecanismo de PHP faz acesso ao banco de dados, quando isso for necessrio. Em um sistema de uma empresa existem os administradores e os usurios. Os administradores possuem acesso partes restritas do sistema, como realizao de alteraes no sistema, excluso de usurios cadastrados, acesso ao banco de dados e outras funcionalidades especficas. J os usurios comuns, se cadastram no sistema e so direcionados para as reas que possuem permisso de acesso. O sistema utiliza um banco de dados que possuem cadastrados os administradores e os usurios. Criaremos este banco e o chamaremos de banco_de_usuarios. Criaremos ento uma tabela neste banco, chamada tabela_de_cadastro que armazenar um identificador nico, o login, a senha e o nvel de permisso (usurio ou admin).
72
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
(mysql_error()); $query = "create database banco_de_usuarios "; mysql_query($query); ?> Crie este arquivo e o salve como cria_banco.php. Na primeira linha do script temos a conexo com o servidor. A instruo mysql_connect ( ) implementada no PHP e funciona para realizar a conexo. Os parmetros so, o nome do servidor, o login cadastrado e a senha para ter acesso ao banco. O comando or die serve para exibir uma mensagem caso a conexo no tenha obtido sucesso. Em seguida, cria-se uma query, ou uma instruo SQL, que cria o banco de dados, da mesma forma como vimos anteriormente. Por fim, o comando mysql_query ( ) executa a query, descrita na varivel $query. Com este pequeno script, conseguimos estabelecer a conexo com o sistema de banco de dados e j criamos o banco banco_de_usuarios. Em outro arquivo PHP adicionaremos a criao da tabela de cadastro, de uma forma bem simples. <?php include("Untitled-1.php"); mysql_select_db("banco_de_usuarios"); $query = "create table tabela_de_cadastro (id int not null auto_increment primary key, login char(30) not null, senha char (25) not null, nivel_permissao char (10) not null) "; mysql_query($query);
73
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
?> Salve este arquivo como cria_tabela.php. necessrio que o banco de dados e a tabela j estejam criados antes de executar esse arquivo. A primeira coisa a ser executada neste script a incluso do arquivo cria_banco.php para que fosse possvel selecionar este banco e adicionar uma tabela. A instruo mysql_select_db ( ) seleciona o banco que queremos usar. Possui o mesmo efeito que a instruo USE, vista anteriormente. Em seguida foi utilizada uma query SQL da mesma forma que utilizamos para a criao do banco de dados, s alterando o comando, que desta vez foi para criar uma tabela com quatro colunas. Finalizando, o comando mysql_query ( ) executa a query criada e a nossa tabela j est inclusa no banco de dados.
74
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<body> <form method="POST" action="cadastra_bd.php"> <table border="0" align="center" cellpadding="2" cellspacing="2"> <tr> <th colspan="2" >Cadastro de usurio</th> </tr> <tr> <td >Digite um login para cadastro</td> <td > <input type="text" name="login" /></td> </tr> <tr> <td>Digite a senha:</td> <td><input type="password" name="senha" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Cadastrar" /></td> </tr> </table> </form> </body> </html> Neste formulrio, o usurio vai se cadastrar utilizando um login e uma senha qualquer. Clicando em Cadastrar ele ser redirecionado para a pgina cadastra_bd.php que efetivar o seu cadastro ou exibir uma mensagem de erro. Crie o cdigo para o cadastro da forma que se encontra abaixo e o salve como cadastra_bd.php.
75
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<?php mysql_connect("localhost","login","senha"); mysql_select_db("banco_de_usuarios"); $login = $_POST["login"]; $senha = $_POST["senha"]; $query = "insert into tabela_de_cadastro (login,senha,nivel_permissao) values ('$login','$senha','usuario')"; if (mysql_query($query)) { echo "Usurio cadastrado com sucesso"; } else { mysql_error(); } ?> Neste cdigo criamos a conexo com o banco de dados, selecionamos o banco que desejamos, recuperamos as variveis login e senha e as inserimos no banco de dados. Observe que o campo id no foi listado na instruo INSERT, visto que ele auto_increment, ou seja, o prprio gerenciador do banco de dados define os valores corretos para este atributo. A pgina para cadastrar administradores idntica a esta, mudando somente o nvel de permisso na instruo insert.
76
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Imagine que no banco de dados temos os seguintes dados cadastrados. id 1 2 3 4 5 login A_Carlos FlavioRP MarisaBernandes RobsonPV Anderson123 senha 23405 34099 34333 45521 34520 nvel_permissao usurio admin usurio admin usuario
Temos cadastrados trs usurios e dois administradores. Na pgina inicial teremos que implementar uma interface de login. Faremos ento a verificao se o visitante um administrador ou usurio comum. Dependendo dessa verificao, ele ser direcionado para uma parte diferente do sistema. Agora criaremos a interface para o login do visitante de uma forma muito simples, apenas para exemplificar o sistema criado. Crie uma nova pgina chamada ndex.html e execute o cdigo. <html> <head> <title>Pgina Inicial </title> </head> <body> <form method="POST" action="identifica_usuario.php"> <table border="0" align="center" cellpadding="2" cellspacing="2"> <tr> <th colspan="2" >Efetue o Login</th> </tr> <tr>
77
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
<td >Login:</td> <td > <input type="text" name="login" /></td> </tr> <tr> <td>Senha:</td> <td><input type="password" name="senha" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Entrar" /></td> </tr> </table> </form> </body> </html> Por fim, na pgina identifica_usuario.php, precisamos direcionar os visitants da forma correta. Faremos isso de uma maneira bem simples e inocente. Pesquisaremos no banco de dados o login e a senha, e ento faremos a verificao quanto ao nvel de permisso. Crie a pagina identifica_usuario.php de acordo com o script abaixo: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php $login = $_POST["login"]; $senha = $_POST["senha"];
78
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
mysql_connect("localhost","root","vertrigo"); mysql_select_db("banco_de_usuarios"); $query = "select * from tabela_de_cadastro where login = '$login' and senha = '$senha' "; $resultado = mysql_query($query); if( mysql_num_rows($resultado)==0){ echo "Este login e senha no esto cadastrados. Por favor, cadastre-se no nosso sistema!"; } else { $valor = mysql_fetch_array($resultado); $nivel = $valor['nivel_permissao']; echo "Seu nvel de permissao ".$nivel; } ?> Este script permite pesquisar no banco de dados pelos dados inseridos no formulrio inicial pelo visitante. Primeiramente ele pesquisa pelo usurio cadastrado no banco com o login e senha inseridos. A varivel $resultado guarda o resultado da consulta. verificado ento se o nmero de resultados foi nulo com a funo msqyl_num_rows( ). Se a consulta encontrar resultados, a varivel $valor receber estes resultados. Utiliza-se para isso a funo mysql_fetch_array ( ). Em seguida, pegamos o valor cadastrado no atributo nivel_permissao utilizando a varivel $valor e entre colchetes o nome da coluna. Desta forma, podemos recuperar o valor de qualquer coluna. Finalmente, impresso o nvel do usurio que fez o login. Com essas informaes pode-se direcionar o visitante para a rea correta do sistema de acordo com as necessidades.
79
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br
Este um sistema muito simples para login, mas que exemplifica muito bem o conceito de insero, pesquisa e conexo com o banco de dados utilizando PHP
80
Linked Empresa Jnior - http://www.linkedej.com.br - (032) 3373-3985 Av. Visconde do Rio Preto Universidade Federal de So Joo del-Rei CTAN DCOMP Sala 3.12 contato@linkedej.com.br