Você está na página 1de 180

PHP e MySQL

PHP e MySQL

PHP e MySQL

Sumrio
Reviso de HTML.....................................................................................................8 Estrutura HTML...................................................................................................8 Atributos.............................................................................................................9 Principais Tag's HTML........................................................................................10
<!-- e -->.......................................................................................................10 <Hn>............................................................................................................10

<br>.............................................................................................................10 <p>...............................................................................................................10
<a> ..............................................................................................................10

<font>..........................................................................................................11 <table>.........................................................................................................11 <tr>..............................................................................................................11 <td>.............................................................................................................11


Formulrios.......................................................................................................12 Mtodo GET...................................................................................................12 Mtodo POST.................................................................................................12 Formulrios usando GET e POST...................................................................13 Elementos do Formulrio..............................................................................13 Campo de Texto............................................................................................13 Campo de Senha...........................................................................................13 rea de Texto................................................................................................13 Listbox e Combobox......................................................................................14 Checkbox.......................................................................................................14

Boto radio....................................................................................................14
Botes Submit e Reset..................................................................................15 Exerccios:.........................................................................................................15 PHP.......................................................................................................................16 O que PHP?....................................................................................................16 Caractersticas do PHP......................................................................................16 ASP X PHP.........................................................................................................16

Requisitos..........................................................................................................16
Instalao do PHP.................................................................................................17 Ambiente Windows........................................................................................17

Ambiente Linux.............................................................................................17 Scripts Client-Side e Server-Side.......................................................................18 Sintaxe PHP.......................................................................................................18


Comentrios .....................................................................................................19 Comentrios de uma linha............................................................................19 Comentrios de vrias linhas........................................................................19

Variveis em PHP..................................................................................................19
Tipos de variveis.........................................................................................19 Atribuindo valor uma varivel....................................................................20 Exibindo o contedo na tela..........................................................................21

Arrays...........................................................................................................21
Arrays superglobais.......................................................................................22

PHP e MySQL Operaes aritmticas......................................................................................23 Operaes com Strings e Atribuio.................................................................23 Operador ...................................................................................................23 Operador .= .............................................................................................23
Operadores ++ e --...............................................................................24

Operadores += e -=...............................................................................24
Operadores *= e /=................................................................................24

Operador %=.............................................................................................24
Operadores de comparao..............................................................................24 Operadores lgicos...........................................................................................25

Operaes lgicas............................................................................................25 Operao AND...............................................................................................26


Operao OR.................................................................................................26

Operao XOR...............................................................................................27
Operao NOT...............................................................................................27 Exerccios..........................................................................................................27

Blocos de comandos.............................................................................................28
Estruturas de controle.......................................................................................28

Estrutura if....................................................................................................28
Estrutura while..............................................................................................29 Estrutura do...while.......................................................................................30 Estrutura for..................................................................................................30 Estrutura foreach..........................................................................................30 Comandos break e continue........................................................................32 Estrutura switch............................................................................................32 Funes.............................................................................................................33 Valor de retorno............................................................................................33 Argumentos ou parmetros..........................................................................34 Passagem de parmetros por referncia......................................................34 Variveis globais e locais..................................................................................35

Processando Formulrios com PHP.......................................................................35


Array superglobal $_GET...................................................................................36 Array Superglobal $_POST...............................................................................37 Formatao de dados........................................................................................37 Funo htmlspecialchars()............................................................................37 funes addslashes() e stripslashes()...........................................................38 funes urlencode() e urldecode()................................................................38 funes intval() e doubleval().......................................................................39 funes trim(), ltrim() e chop().....................................................................39 Validao de formulrios com javascript..........................................................39 Validao com PHP............................................................................................41 Espaos em branco.......................................................................................41 Quantidade mnima de caracteres................................................................41 Correo automtica.....................................................................................41 Valores numricos........................................................................................42 Arquivos de texto..............................................................................................45 Manipulando Arquivos ......................................................................................45 Abertura........................................................................................................45

PHP e MySQL Fechamento..................................................................................................46 Leitura...........................................................................................................46 Escrita...........................................................................................................48


Funes Require e Include................................................................................49 MySQL e PHP.........................................................................................................49 Estrutura de um Banco de Dados.....................................................................50 Acessando MySQL.............................................................................................50 Comandos sql...................................................................................................50 Comando create............................................................................................50 Chave primria e chave estrangeira.............................................................52 Criando tabelas.............................................................................................52

Comando insert.............................................................................................53 Clusula where..............................................................................................54


Comando update...........................................................................................54 Comando alter table.....................................................................................54

Comando delete...........................................................................................55
Comando select............................................................................................55 Chaves estrangeiras.....................................................................................58 Tipos de tabelas ...........................................................................................58

Relacionando tabelas................................................................................60
Relacionamentos entre tabelas.....................................................................60 Configurando usurios no MySQL.....................................................................61 Sistema de privilgios...................................................................................61 Concedendo privilgios comando GRANT..................................................62 Conectando-se ao MySQL com o PHP...............................................................62 Conexo........................................................................................................63 Executando query's SQL...............................................................................63 Organizando os dados da consulta...............................................................64 Retornando o nmero de linhas....................................................................64 Fechando a conexo.....................................................................................65

Aplicaes em PHP e MySQL.................................................................................66


Mdulo de cadastro.......................................................................................67

Mdulo de excluso.......................................................................................67
Mdulo de pesquisa parte 1.......................................................................68 Mdulo de pesquisa parte 2.......................................................................69 Mdulo de alterao......................................................................................70 Cookies e Sesses - Autenticao.....................................................................73 Cookies..........................................................................................................73

Sesses.........................................................................................................73 PHP Orientado a Objetos......................................................................................77


Principais componentes ...................................................................................77 Classes, atributos e mtodos........................................................................77 Mtodos construtores e destrutores.............................................................81

Modificadores de Acesso...................................................................................82 Modificador public.........................................................................................82


Modificador private.......................................................................................82 Modificador protected...................................................................................83

Herana.........................................................................................................83 4

PHP e MySQL Sobrescrever mtodos..................................................................................84 Glossrio de funes do PHP................................................................................85 Datas.................................................................................................................85


Date()............................................................................................................85

Getdate.........................................................................................................86
Gmmktime()..................................................................................................86

Gmstrftime()..................................................................................................86 Microtime()....................................................................................................86
Mktime()........................................................................................................87

Strftime().......................................................................................................87 Time()............................................................................................................88 Diretrios..........................................................................................................88 Chdir()...........................................................................................................88


Closedir().......................................................................................................88 Opendir().......................................................................................................88

Readdir().......................................................................................................88 Execuo de Programas....................................................................................88 Escapeshellcmd()..........................................................................................88


Exec()............................................................................................................89 Passthru()......................................................................................................89

System()........................................................................................................89
Sistema de arquivos do servidor ......................................................................89

Basename()...................................................................................................89 Chgrp()..........................................................................................................90 Chmod()........................................................................................................90


Chown().........................................................................................................90 Copy()............................................................................................................90

Delete().........................................................................................................90
Dirname()......................................................................................................90

Fclose()..........................................................................................................90 Feof().............................................................................................................90 File()..............................................................................................................91


File_exists()...................................................................................................91

Filesize()........................................................................................................91
Filetype().......................................................................................................91 Fopen()..........................................................................................................91 Fputs()...........................................................................................................92

Fread()...........................................................................................................92 Fwrite()..........................................................................................................92 Readfile().......................................................................................................92


Rename().......................................................................................................93 Matemtica.......................................................................................................93

Abs()..............................................................................................................93
Base_convert()..............................................................................................93

Max().............................................................................................................93
Min()..............................................................................................................93 Mt_rand().......................................................................................................93

Pi().................................................................................................................93 5

PHP e MySQL Pow().............................................................................................................93 Rand()...........................................................................................................93


Round()..........................................................................................................94 Sin()...............................................................................................................94

Sqrt().............................................................................................................94
Tan()..............................................................................................................94 Funes diversas...............................................................................................94 Eval().............................................................................................................94

Die()..............................................................................................................94 Exit()..............................................................................................................94 Mail().............................................................................................................94 Pack()............................................................................................................95 Sleep()...........................................................................................................95


Tratamento de sesses.....................................................................................95 Session_decode()..........................................................................................95

Session_destroy()..........................................................................................95
Session_encode()..........................................................................................96 Session_start()..............................................................................................96 Session_is_registered()..................................................................................96 Session_module_name()...............................................................................96

Session_name().............................................................................................96
Session_register()..........................................................................................96 Session_unregister()......................................................................................96

Strings...............................................................................................................96 Addslashes()..................................................................................................96 Chop()...........................................................................................................97 Crypt()...........................................................................................................97


Echo()............................................................................................................97

Explode().......................................................................................................97
Htmlentities()................................................................................................97 Htmlspecialchars()........................................................................................97

Implode().......................................................................................................97 Ltrim()...........................................................................................................98
Md5().............................................................................................................98

Parse_str().....................................................................................................98 Strcmp()........................................................................................................98 Strip_tags()....................................................................................................98


Stripslashes()................................................................................................98 Strlen()..........................................................................................................98

Strrev()..........................................................................................................99
Strtolower()...................................................................................................99 Strtoupper()..................................................................................................99

Str_replace()..................................................................................................99 Trim().............................................................................................................99 Ucfirst().........................................................................................................99 Ucwords()......................................................................................................99 Variveis.........................................................................................................100


Doubleval()..................................................................................................100

PHP e MySQL Empty().......................................................................................................100 Gettype().....................................................................................................100


Intval().........................................................................................................100 Is_array().....................................................................................................100 Is_double()...................................................................................................100 Is_float()......................................................................................................100 Is_int().........................................................................................................100 Is_object()....................................................................................................101 Is_real().......................................................................................................101

Is_string()....................................................................................................101
Isset()..........................................................................................................101 Settype().....................................................................................................101 Strval()........................................................................................................101 Referncias Bibliogrficas...................................................................................102

PHP e MySQL

Reviso de HTML
HTML significa Hiper Text Markup Language Linguagem de Marcao de Hiper Texto. Com ela, podemos formatar documentos inteiros para exibio na Internet, transformado textos simples em hipertexto.
A Internet nada mais do que uma grande rede de computadores, formada por

outras redes menores, compartilhando informaes. Para que essas informaes sejam compartilhadas entre os mesmos, preciso que sejam disponibilizadas de forma que todo e qualquer computador possa interpretar. HTML uma linguagem padro para divulgao de documentos na rede, portanto, qualquer computador deve ser capaz de interpret-lo. Um documento escrito em HTML , em geral, chamado de pgina web. O conjunto dessas pginas forma um site (lugar, em ingls). Seu contedo chamado de hipertexto, pois pode ser compreendido por qualquer computador, enquanto que o texto comum pode ser visto em um computador de uma forma e em outro de outra forma. Um site pode conter quaisquer informaes que se queira disponibilizar via internet, mas para que ele seja visto, preciso que seja publicado. Para isso, existem os servidores web. Trata-se de computadores que armazenam e disponibilizam esses sites para visitao, a custos relativamente baixos. Alm disso, 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. HTML uma linguagem esttica, ou seja, uma vez escrito, sua estrutura permanece inalterada.

Estrutura HTML
HTML composto por tag's, que so marcaes delimitadas pelos smbolos < e >, usados para indicar uma formatao. Ex: Todo documento HTML deve iniciar com a tag <html> e terminar com a tag </html>. Essas tags delimitam o documento, sendo que o que estiver fora delas no ser considerado um documento HTML, e portanto no ser interpretado como hiper texto, e sim como texto comum. Ex:
<html> ... pgina web ...

</html>

Um documento HTML formado basicamente por cabealho e corpo. No cabealho, fornecemos informaes, como o nome da pgina, autor, palavras-chave para pesquisa, etc. Essas informaes no ficam expostas no navegador do usurio. Cabealhos iniciam com a tag <head> e terminam com </head>. A maioria tas tags HTML possuem incio e final. Dentro do cabealho da pgina definimos o ttulo da mesma. O ttulo da pgina ser 8

PHP e MySQL o contedo entre as tags <title> e </title>. Esse ttulo aparecer na barra de ttulo do navegador. Vejamos nosso exemplo:
<html> <head> <title>Minha Pgina Web!!!</title> </head> ... </html>

Digite o cdigo acima e salve como pagina.html e abra-o usando o navegador de sua preferncia. Agora, definiremos o corpo da pgina. Todo seu contedo ser visualizado dentro do navegador. O corpo da pgina comea com a tag <body> e termina com </body>.
<html> <head> <title>Minha Pgina Web!!!</title> </head> <body> ... </body> </html>

Altere o arquivo pagina.html para que fique como o cdigo acima, depois salve. J temos a estrutura de um documento HTML. Agora, vamos adicionar contedo a esta pgina.

Atributos
A grande maioria das tag's HTML possuem atributos, que so valores passados a elas para que as mesmas assumamuma formatao diferente. Exemplo: Se quisermos o corpo da pgina azul, podemos alterar o atributo bgcolor da tag body, alterando seu valor para blue.
<html> <head> <title>Minha Pgina Web!!!</title> </head> <body bgcolor=blue> ... </body> </html>

PHP e MySQL

Principais Tag's HTML


Vamos agora conhecer as tag's mais utilizadas na criao de uma pgina HTML e seus principais atributos. H uma vasta quantidade de tag's que podem ser utilizadas, dependendo do resultado desejado. Aqui, faremos apenas um breve resumo das principais, mas sinta-se vontade para pesquisar e descobrir novas tag's e atributos para adicionar sua pgina web.
Digite os exemplos dentro do corpo da pgina do exemplo acima. Salve, depois abra-

o no navegador de sua preferncia, ou atualize o navegador usando a tecla F5.

<!-- e -->
Usados para indicar um comentrio. comentrios no so exibidos no navegador. So utilizados para uma melhor orientao pelo cdigo HTML.
<body> <!-- incio do corpo da pgina --> <!-- colocar um ttulo aqui --> </body> <!-- fim do corpo da pgina -->

<Hn>
Define um ttulo. n pode ser qualquer valor entre 1 e 6. Quanto maior o nmero, menor o tamanho do ttulo.
<h1>Ttulo tamanho 1</h1> <h2>Ttulo tamanho 2</h2>

<br>
Adiciona uma quebra de linha ao texto. forando-o a continuar na linha de baixo. Mesmo que o texto dentro do documento ocupe apenas uma linha, o navegador far a quebra de linha sempre que encontrar a tag <br>.
Este um texto que <br> recebeu uma quebra de linha <br> aqui

<p>
Inicia um novo pargrafo, separando assim, blocos de texto distintos.
<p> Iniciei um pargrafo. Dentro dele, posso adiconar qualquer contedo e usar <br> quebra de linha para que no ocupe apenas uma linha. <br> Quando o pargrafo terminar, eu posso simplesmente iniciar outro <p> Pargrafos no precisam ser encerrados, pois o incio do prximo o final do anterior.</p>

<a>
Essa tag indica a presena de um link. Links so ligaes entre documentos HTML. Eles direcionam o navegador para um ponto dentro do documento, para outro

documento 10

PHP e MySQL HTML, para outro arquivo ou at para outro site. Seu principal atributo href, que determina para qual documento o link direcionado. O contedo contido entre as tag's <a> e </a> torna-se o link em si. Pode ser uma frase, uma imagem ou um campo do documento.
<a href=pagina2.html>Pagina 2</a> <a href=pasta/arquivo.jpg>Abre uma imagem no navegador</a> <a href=http://www.umsitequalquer.com>Direciona para outro site</a>

<font>
Usada para formatar texto do documento. Seus principais atributos so:

face: Nome da fonte; size: tamanho da fonte; color: cor da fonte;

<font face=Times New Roman size=14 color=red>Texto Formatado</font>

<table>
Tabelas so estruturas utilizadas para organizar e posicionar os elementos na pgina. Tabelas contm linhas, que por sua vez, contm clulas. Dentro das clulas, adicionamos o contedo da pgina. Seus principais atributos so:

bgcolor: cor de fundo width: largura (pode ser indicada em pixels ou em percentuais) height: altura border: espessura da borda

<tr>
Marca o incio de uma linha da tabela

<td>
Marca o incio de uma clula dentro de uma linha. Seus principais atributos so:

cellspacing: espao entre as clulas cellpadding: distncia entre o contedo e a borda da clula colspan: indica que a clula ocupa o espao de n clulas (colunas) rowspan: ocupa o espao de n linhas

<table border=1 width=100% height=500 bgcolor=gray> <tr> <td cellpadding=0 colspan=3 bgcolor=pink>Clula Rosa</td> </tr> <tr> <td cellpadding=0 cellspacing=0 bgcolor=blue>Clula Azul</td>

11

PHP e MySQL
<td cellpadding=0 cellspacing=0 bgcolor=red>Clula Vermelha</td> <td cellpadding=0 cellspacing=0 bgcolor=green>Clula Verde</td> </tr> </table>

Formulrios
Formulrios so estruturas usadas para que o visitante possa interagir com o site, enviando informaes para o site. Essas informaes so processadas por scripts que capturam as informaes enviadas e as processam, retornando um resultado, gravando-as no banco de dados do site, etc.... O campo pertencente ao formulrio delimitado pelas tag's <form> e </form>. Dentro dessas tag's inserimos os elementos do formulrio (campos de texto, botes, etc).
Esses elementos iro capturar a informao fornecida pelo visitante e enviar ao script para

processamento. Cada elemento possui um nome que referenciado pelo script na captura de informaes. Os principais atributos da tag form so:

action: indica o script que ir processar as informaes enviadas pelo formulrio method: indica o mtodo de envio das informaes As informaes de um formulrio podem ser enviadas atravs de dois mtodos:

GET e POST.

Mtodo GET
Usado para enviar pequenas quantidades de informao, visto que sua capacidade de envio limitada. O mtodo GET usa a barra de endereos do navegador para enviar informaes para o servidor. Possui um limite de 256 caracteres, sendo que o excedente pode ( e acaba) se perdendo durante a transmisso. 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, o que o torna um mtodo pouco seguro, visto

que informaes confidenciais (senhas, nmeros de cartes, etc) tornam-se visveis a qualquer pessoa. 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 das respectivas variveis. O sinal & usado para separar uma varivel da outra.

Mtodo POST
Oposto ao anterior, as informaes so enviadas de forma mais segura,

possibilitando o uso de criptografia e outros recursos de segurana. No h um limite para a quantidade de informaes que pode ser enviada atravs deste mtodo, porm, o mais lento. Para us-lo. 12

PHP e MySQL

Formulrios usando GET e POST


Para utilizar qualquer um dos dois mtodos mencionados acima para enviar informaes de um formulrio, devemos declar-lo dentro da tag <form>, como nos exemplos a seguir:
<form action=script.php method=GET> <!-- usando GET --> <form action=script.php method=POST> <!-- usando POST -->

Elementos do Formulrio
A seguir, veremos os principais elementos de um formulrio. Os elementos do formulrio possuem um atributo comum chamado name. Ele indica o nome de cada elemento. Este nome ser tratado pelo script como uma varivel (algo que contm uma informao), portanto, cada elemento deve ter um atributo name distinto, para que seja diferenciado pelo script.

Campo de Texto
Permite a entrada de texto pelo usurio. Usado para preenchimento de nomes, endereos e outras informaes simples. Seus principais atributos so:

name: nome do campo de texto value: valor padro para o campo size: tamanho do campo maxlenght: quantidade mxima de caracteres aceitos pelo campo

Nome: <input type=text name=nome_do_visitante size=50 maxlenght=50 value=Digite aqui seu nome>

Note que usamos a tag <input>. Esta tag pode assumir formas diversas, como campos de texto, senhas, botes, etc. O que torna-a um campo de texto o valor do atributo type. Quando indicamos o valor text, a tag input tornou-se um campo de texto. Outras formas desta tag sero vistas a seguir.

Campo de Senha
Semelhante ao campo de texto, porm no aceita o atributo value. Utilizado para a digitao de informaes confidenciais, principalmente senhas.
Senha: <input type=password name=senha size=12 maxlenght=12>

rea de Texto
Abre uma rea para digitao de texto. Devemos informar o nmero de linhas e colunas que a rea de texto ir ocupar. Isto feito atravs dos atributos rows (linhas) e cols (colunas).
Comentrio: <textarea name=comentario rows=10 cols=10>comentrio:</textarea>

13

PHP e MySQL

Listbox e Combobox
Cria uma lista de opes para serem selecionadas. O combobox mostra apenas um valor de cada vez em um menu tipo cortina, enquanto o listbox mostra mais de um valor, em forma de lista. Ambos utilizam a mesma tag (<select>), porm, o listbox recebe o atributo size, informando quantos valores sero mostrados por ele. Ambos recebem o atributo multiple, que permite a seleo de mltiplos valores.
<!-- exemplo de listbox --> <select name=cidade size=5 multiple> <option value=guaira>Guaira</option> <option value=umuarama>Umuarama</option> <option value=lovat>Lovat</option> <option value=cascavel>Cascavel</option> <option value=cianorte>Cianorte</option> </select> <!-- mesmo exemplo, agora como combobox --> <select name=cidade> <option value=guaira>Guaira</option> <option value=umuarama>Umuarama</option> <option value=lovat>Lovat</option> <option value=cascavel>Cascavel</option> <option value=cianorte>Cianorte</option> </select>

Checkbox
Cria caixas de seleo, possibilitando ao visitante selecionar mais de uma opo. O atributo checked faz com que a opo aparea marcada no formulrio. O atributo value obrigatrio.
Selecione uma cidade:<br> <p align=center> <input type=checkbox name=pesquisa[] value=umuarama>Umuarama<br> <input type=checkbox name=pesquisa[] value=guaira checked>Guaira<br> <input type=checkbox name=pesquisa[] value=curitiba>Curitiba<br> </p> Obs: Note que o atributo name possui em seu valor, o nome pesquisa, seguido de colchetes. Isso ser
discutido mais adiante...

Boto radio
Semelhante ao Checkbox, porm, permite a seleo de apenas uma opo dentre as oferecidas. (Diferencia-se do checkbox pelo formato arredondado).
Enquete:<br> Que nota voc daria ao nosso formulrio?<br> <p align=center> <input type=radio name=nota value=5>Otimo <input type=radio name=nota value=4>Bom

<input type=radio name=nota value=3>Regular <input type=radio name=nota value=2>Ruim <input type=radio name=nota value=1>Pssimo

14

PHP e MySQL
</p> Obs: Note que o atributo name de cada boto radio possui o mesmo valor. Isso ser discutido mais adiante...

Botes Submit e Reset


O boto submit envia as informaes do formulrio para o script indicado, utilizando o mtodo indicado (GET ou POST). O boto reset apaga tudo o que foi digitado no formulrio. indicado colocar um boto reset no formulrio, caso o usurio desista de enviar o formulrio ou no queira manter suas informaes no computador (Ex: quando estiver usando um computador pblico). O atributo name opcional, mas pode ser usado, caso haja necessidade de se ter mais de um boto submit ou reset dentro de um mesmo formulrio.
<input type=submit name=botao value=enviar><!-- boto 'enviar' --> <input type=reset name=limpar value=limpar><!-- boto 'limpar' -->

Exerccios:

Monte o layout do seu site. Use tabelas para organizar o contedo. O site deve um banner na parte superior, uma coluna para o contedo, outra coluna para o menu de navegao do usurio e um rodap contendo seu nome;

ter

No espao destinado ao contedo, monte seu curriculum vitae. Na coluna ao lado, crie uma tabela contendo 3 linhas e uma coluna. Abaixo dela,

crie um formulrio de enquete e pea para que o visitante d uma nota ao seu site

Abaixo de seu curriculum, crie outro formulrio para que o visitante possa

adicionar comentrios ao contedo do site. O visitante deve informar o nome, localidade, email de contato, uma nota para o contedo e um comentrio.

15

PHP e MySQL

PHP
O que PHP?
PHP (Hypertext PreProcessor) uma linguagem de programao de scripts para manipulao de pginas HTML. Criada por Rasmus Lerdorf em 1994, amplamente utilizada na programao de web sites dinmicos, especialmente para manipulao de banco de dados.

Caractersticas do PHP

PHP gratuito: Distribudo sob a licena GPL, possui seu cdigo-fonte (cdigo utilizado para sua criao) aberto, o que facilita a correo de eventuais erros no cdigo, permitindo seu rpido desenvolvimento PHP multiplataforma: Inicialmente foi desenvolvido para ser usado em
Unix/Linux (que compreendem 70% dos servidores web), ganhando uma verso para

servidores Windows e para Macintosh posteriormente. Isso faz do PHP uma linguagem capaz de ser executada independente da plataforma utilizada.

PHP compatvel com a a maioria dos servidores web disponveis no mercado,

tendo suporte nativo para o servidor Apache (atualmente o mais utilizado no mercado).

PHP suporta banco de dados: Possui suporte nativo ao MySQL, porm pode

utilizar outros sistemas de gerenciamento de banco de dados (SGBD), dentre eles, Oracle, Sybase, mSQL, Firebird, PostgreSQL e DB2. Permite tambm o uso de mais de um banco de dados na mesma aplicao.

PHP suporta uma grande variedade de protocolos, dentre eles, IMAP, POP3, SMTP, XML, LDAP, HTTP e FTP.

ASP X PHP
A linguagem ASP foi desenvolvida sob os mesmos objetivos do PHP, porm, por ter sido desenvolvida pela Microsoft, funciona apenas em plataformas Microsoft, exigindo que seu servidor tenha Windows 2003 Server instalado, por exemplo. Isso faz do ASP invivel, devido a custos de licena, podendo variar entre US$2.500,00 e US$10.000,00. Alm disso, o fato do ASP ter seu cdigo fechado dificulta seu desenvolvimento e a correo de bugs, tornando a linguagem suscetvel a erros.

Requisitos
PHP exige apenas a instalao de um servidor web compatvel. Caso queira utilizar um banco de dados, instale um que seja compatvel. Recomendamos a utilizao do Servidor web Apache e do banco de dados MySQL, por terem suporte nativo ao PHP.

16

PHP e MySQL

Instalao do PHP
Ambiente Windows
A instalao em ambiente Windows simples. O instalador ir configurar o ambiente completo para o PHP. Voc s dever informar o nome do servidor (na dvida, deixe localhost, seu nome e seu e-mail para contato. Existe um instalador para Windows que contm o servidor Apache, o PHP e o banco de dados MySQL, alm de outros recursos para administrao de sites. Trata-se do Xampp. O instalador pode ser baixado em www.xampp.org. Para saber se a instalao foi concluda com sucesso, abra o editor de texto de sua preferncia e adicione as seguintes linhas:
<? phpinfo() ?>

Salve com o nome de info.php e coloque-o na pasta C:\xampp\htdocs. Abra seu navegador de internet preferido e digite na barra de endereos: http://localhost/info.php. O resultado ser uma lista detalhada da configurao do PHP em seu computador. Esta lista gerada pelo prprio php. Este script ser explicado mais adiante.

Ambiente Linux
Ao contrrio do que muita gente pensa, a instalao em ambiente Linux pode ser to simples quanto a instalao em ambiente Windows, especialmente se houver conexo com a internet. Sistemas operacionais Linux so baseados em pacotes, ou seja, cada programa um pacote ou um conjunto de pacotes que podem ser instalados, atualizados e removidos atravs de comandos simples ou utilitrios grficos, como o Synaptic. A instalao atravs da linha de comando varia em cada caso. Se voc usa um sistema baseado em Debian, como Ubuntu, Kurumin ou Knoppix, voc pode utilizar o comando apt da seguinte forma:

Abra o terminal; Digite su e aperte Enter para poder logar-se como administrador do sistema; Digite a senha do administrador; Digite o seguinte comando:
apt-get install apache2 php5 mysql5 mysqladmin phpmyadmin

Caso seu sistema seja baseado em Red Hat, como Fedora, Mandriva ou CentOS, substitua o apt-get do comando acima por Yum. Caso use Mandriva, substitua-o por urpmi.
yum install apache2 php5 mysql5 mysqladmin phpmyadmin urpmi install apache2 php5 mysql5 mysqladmin phpmyadmin

Este comando far com que o sistema instale o servidor Apache, o PHP, o banco de dados MySQL, o administrador do MySQL e o PhpMyAdmin, usado para administrar remotamente o site.

17

PHP e MySQL Caso prefira uma maneira mais fcil de realizar esta tarefa, basta usar o gerenciador de pacotes Synaptic. Se sua distribuio no o possui, ele pode ser instalado atravs do mtodo acima. O Synaptic est disponvel para qualquer distribuio Linux. Aps instalado, abra-o, digite a senha do Administrador (root), marque, clicando com o mouse, os pacotes que voc quer instalar. Depois clique em aplicar. Ele ir baixar os pacotes necessrios e instalar em seu sistema. Para saber se a instalao foi concluda com sucesso, abra o editor de texto de sua preferncia e digite o seguinte cdigo:
<? phpinfo() ?>

Em seguida, salve com o nome de info.php e mova-o para a pasta /var/www. Em seguida, abra o navegador de sua preferncia e digite o seguinte endereo: http://localhost/info.php. O resultado ser uma lista detalhada da configurao do PHP em seu computador. Esta lista gerada pelo prprio php. Este script ser explicado mais adiante.

Scripts Client-Side e Server-Side


Scripts Client-Side (Lado-Cliente) so executados no computador do prprio cliente, por exemplo, o cdigo HTML, que executado direto no navegador. So muito utilizados para o processamento de pequenas tarefas, tirando essa responsabilidade do servidor web, que fica livre para executar os scripts Server-Side (Lado-Servidor), que so, por exemplo, os scripts PHP. Quando o usurio clica em um boto de busca, o pedido de busca enviado ao servidor, que encontra o script responsvel pela busca e o processa. O resultado colocado em pacotes e enviado de volta ao computador que requisitou a pesquisa. Um servidor pode ter muitos clientes realizando requisies desse tipo, portanto, recomendado que pequenas verificaes e tarefas menores sejam executadas por aplicaes Client-Side, deixando as requisies mais importantes (como conferir senhas por exemplo) para o Servidor. PHP uma linguagem Server-Side, ou seja, sempre ser o servidor que ir executar. Se sua pgina contm muitos scripts PHP desnecessrios, pode acabar prejudicando o servidor, tornando a conexo mais lenta. Use o PHP com cuidado ;-)

Sintaxe PHP
A linguagem PHP pode ser usada de duas formas: incorporado ao HTML ou de forma

pura, em scripts separados das pginas HTML. Em ambos sua sintaxe a mesma. Todo cdigo PHP delimitado por tags de abertura e fechamento (como o html), como mostrado abaixo:
Estilo php 'longo' <?php ... ?> Estilo php 'curto' <? ... ?> Estilo Javascript <script language= PHP> ... </script> Estilo ASP <% ... %>

Tudo que estiver dentro dessas tag's PHP ser considerado script PHP, e no HTML. Cdigo PHP digitado fora das tag's ser interpretado como erro. 18

PHP e MySQL Obs: Cada linha de cdigo PHP deve terminar com ; para que a linguagem reconhea o fim de uma linha de comando e o comeo de uma nova.

Comentrios
Comentrios no PHP podem ser de duas formas:

Comentrios de uma linha


Usamos duas barras ou asterisco para iniciar um comentrio de uma linha. Tudo o que for digitado aps estes caracteres (incluindo cdigo PHP) no ser interpretado pelo servidor, lembrando que comentrios do cdigo sero visveis apenas dentro do cdigo, ou seja, o navegador no imprime um comentrio na tela.
<?php //este um comentrio de uma linha #este tambm um comentrio de uma linha ?>

Comentrios de vrias linhas


Usados quando o comentrio ocupa mais de uma linha, so delimitados pelos sinais '/*' e '*/'. Tudo que estiver entre estes dois sinais ser considerado comentrio e no ser interpretado pelo servidor.
<?php /*Este um exemplo de comentrioque ocupa mais de uma linha. Aqui eu no preciso colocar o delimitador em todas as linhas. O comentrio se encerra aqui */ ?>

Variveis em PHP
Variveis so recipientes, com a funo de armazenar dados a fim de serem utilizados a qualquer momento pelo programa. Diferente de muitas linguagens de programao, no necessrio declarar a existncia de uma varivel, ou mesmo o tipo de informao que ela armazenar. Variveis no PHP so identificadas pelo sinal $ antes de seu nome. Os nomes de variveis no podem possuir caracteres especiais (espaos, acentos, etc), com exceo do underline (_). De preferncia, use nomes que indiquem o tipo de informao que a varivel ir armazenar. Exemplo de nomes vlidos:
$nome, $endereco, $idade, $data_inscricao, $20assustar, $123;

PHP Case Sensitive, ou seja, diferencia maisculas e minsculas. A varivel $a diferente da varivel $A.

Tipos de variveis

Variveis devem armazenar um determinado tipo de informao. PHP no exige que este tipo seja informado, pois reconhece-o automaticamente. Os tipos so:

Nmeros inteiros (int ou integer): Nmeros naturais positivos e negativos. Ex: 25,

-7; 19

PHP e MySQL

Nmeros Fracionrios (float, double ou real): Nmeros fracionrios, tambm chamados de ponto flutuante ou dupla preciso. Ex: 3,14; Caracteres alfanumricos (String): Valores literais. Ex: Joo da Silva. Valores do

tipo String devem estar dentro de aspas ou apstrofos. Mesmo valores numricos, se informados como strings, sero tratados como tal;

Valores booleanos (bool): So do tipo Verdadeiro ou Falso. PHP interpreta

Verdadeiro como 1 e Falso como 0. Valores booleanos sero vistos mais adiante;

Vetores (array): Vetores so um conjunto ordenado de variveis. Cada varivel

possui um ndice, que pode ser numrico ou literal (no caso de array associativo). Ex: $lista[]. Os colchetes servem para que determinada posio do vetor seja referenciada. Ex: $lista[2]. Vetores no PHP iniciam em 0.

Objeto (objetc): Utilizados na programao orientada a objetos, onde definimos

uma classe, e dentro dela as variveis e funes que estaro disponveis aos seus objetos. Uma varivel do tipo objeto pode conter uma classe com diversas variveis e funes para serem utilizadas. Este conceito ser visto mais adiante;

Atribuindo valor uma varivel


Como vimos anteriormente, variveis podem guardar qualquer tipo de valor, mas para isso preciso que indiquemos o valor que deve ser guardado dentro delas. Para isso, utilizamos um operador responsvel por inserir na varivel um determinado valor. Trata-se do sinal =. Ex:
$salario = 700,00;

Na linha acima, a varivel salrio recebe o valor 700,00 que do tipo float (fracionrio). Cada linha de cdigo do PHP (como em muitas linguagens de programao) termina com o sinal ;. Ele indica o fim de uma linha de cdigo. Voc pode forar a varivel a receber um tipo especfico de valor, indicando o tipo desejado entre parnteses, antes da atribuio. Ex: Se quisermos que a varivel $salario receba o valor como uma String em vez de um inteiro, podemos realizar a converso do valor para String da seguinte forma:
$salario = (string) 700,00;

Dessa forma, o contedo da varivel $salario no ser um valor numrico e sim um valor literal, ou seja, no h mais o valor 700,00 e sim a string 700,00. Para atribuir a uma varivel um valor do tipo String, deve-se colocar este valor entre aspas ou apstrofo (aspas simples). Valores dentro destes sinais so considerados Strings (as diferenas entre elas sero comentadas adiante). Ex:
$nome = SENAC; $nome = 'senac';

20

PHP e MySQL

Exibindo o contedo na tela


Podemos exibir o contedo de uma varivel na tela com o uso do comando echo. Ele imprime na tela o contedo de uma varivel. Tambm pode ser usado para imprimir cdigo HTML. Sua sintaxe :
echo conteudo $variavel <tag>;

No exemplo acima, imprimimos um valor literal, o valor de uma varivel e uma tag html. Tambm podemos utilizar apstrofos no lugar de aspas, porm, apstrofos mostram o nome de uma varivel em vez de seu contedo. Ex:
$variavel = qualquer; echo 'Valor $variavel';

O exemplo acima imprimir na tela: Valor: $variavel em vez do valor contido na varivel. Para contornar este problema, podemos utilizar o operador de concatenao Ponto (.). Sua funo concatenar (unir) as expresses s variveis. Dessa forma, o exemplo acima ficaria:
echo 'Valor '.$variavel;

Dessa forma, $variavel fica unida ao comando echo, que imprime seu valor na tela. Com o uso da concatenao, a varivel no precisa ficar entre apstrofo ou aspas. O resultado ser:
Valor qualquer

Arrays
Array (ou Vetor) um conjunto ordenado de variveis. Em um array, todas as variveis possuem um ndice, que pode ser um nmero ou texto. O ndice deve aparecer entre [ e ], logo aps o identificador do array. Ex: $lista[] ou $lista[0]. No PHP, os arrrays iniciam-se em zero. Diferente de outras linguagens, voc no precisa definir um nmero limite de posies dentro de um array, pois ele se expande dinamicamente. Caso o vetor no seja indicado entre os colchetes, o PHP ir procurar pelo ltimo elemento do array e atribuir o novo valor na posio seguinte.
$lista[]; //isso indica que a varivel lista um array $lista[0] = 10; //valor 10 na posio zero; a primeira posio do array $lista[1] = 11; //valor 11 na posio 1 $lista[] = 12; //valor 12 colocado logo em seguida, na posio 2 $lista[] = 13; //valor 13 colocado na posio 3 $lista[7] = 14; //valor 14 colocado na posio 7, deixando as anteriores vazias $lista[] = 15; //valor 15 colocado na posio 8 do array

Podemos utlizar a funo array para atribuir valore a um vetor. Os valores devem estar entre parnteses e separados por vrgula. Ex:
$lista = array(10, 11, 12, 13, 14, 15);

Tambm possvel utilizar nomes em vez de nmeros para referenciar um array,

criando assim um array associativo. Ex:


$usuario['nome'] = Joo; $usuario['idade'] = 25; $usuario['cidade'] = Guaira;

21

PHP e MySQL
$usuario['estado'] = Paran;

Podemos utilizar a funo array para arrays associativos, indicando uma chave e um valor, separados pelo sinal => (igual e maior, formando uma seta). Ex:
$usuario = array(nome => Joo, idade => 25, cidade => Guaira, estado =>Parana);

Cada posio do array possui um nome, em vez de um valor numrico. Podemos exibir seu contedo dessa forma:
echo O usurio .$usuario['nome']., de .$usuario['idade']. anos mora em . $usuario['cidade']. - .$usuario['estado']..;

O resultado do exemplo acima ser: O usurio Joo, de 25 anos mora em Guara Paran Podemos utilizar mais de um ndice em um array, tornando-o um array multidimensional (Matriz). Uma matriz pode ser comparada a uma tabela, formada de linhas e colunas. Ex:
$tabela[0][0]; $tabela[0][1]; $tabela[0][2]; $tabela[1][0]; $tabela[1][1]; $tabela[1][2];

No exemplo acima, teramos uma tabela com 3 linha e 3 colunas. Podemos tambm combinar ndices associativos matriz. Ex: Uma lista de times de futebol de cada cidade de cada estado:
$time['MG']['BeloHorizonte'] = Atletico Mineiro; $time['SP']['SaoPaulo'] = Corinthians; $time['RS']['PortoAlegre'] = Gremio; $time['PR']['Curitiba'] = Coritiba;

Arrays superglobais
So arrays pertencentes ao PHP, entre eles esto o array $_GET e $_POST que armazenam o valor das variveis enviadas pelos formulrios atravs dos respectivos mtodos GET e POST. Alm deles, temos o array $GLOBALS, que armazena variveis globais definidas no script e os arrays $_SESSION e $_COOKIE, utilizados em sesses. Todos eles sero vistos em detalhes mais adiante. A sintaxe para a utilizao destes array : $ARRAY['variavel_ou_valor']; Onde ARRAY o nome do array superglobal que ser utilizado e 'variavel_ou_valor' o nome da varivel ou do valor a ser extrado do array.

22

PHP e MySQL

Operaes aritmticas
Para realizar operaes aritmticas no PHP utilizamos os seguintes operadores:
* para o exemplo abaixo, consideramos $a contendo o valor 4 e $b o valor 2 Operao adio subtrao multiplicao diviso mdulo (resto da diviso) Operador + * / % Exemplo $a + $b $a - $b $a * $b $a / $b $a % $b Resultado 6 2 8 2 0

Podemos realizar uma operao aritmtica e de atribuio em uma nica linha. Para isso, precisamos apenas fazer com que uma varivel receba o valor da operao. Ex:
$resultado = $a + $b * 2;

Lembrando que voc tambm pode usar sinais como parnteses para indicar a ordem de procedncia na operao aritmtica. Ex: Qual a metade de dois mais dois? O resultado pode ser diferente, conforme a ordem de procedncia dos operadores.
$valor = 2+2/2; /* nesse caso, a diviso possui procedncia na operao, sendo executada antes da adio. O resultado ser 3 */ $valor = (2+2)/2; /* j neste caso, o que est entre parnteses possui procedncia maior do que a diviso, ou seja, deve ser realizado primeiro. Neste caso, o resultado ser 2 */

Operaes com Strings e Atribuio Operador .


Utilizamos o operador . para concatenar (unir) dois valores (geralmente Strings). Ex: quando queremos unir o valor de uma varivel a uma string qualquer.
echo Meu nome .$nome. e moro em .$cidade. desde .$data..;

Operador .=
Utilizamos operadore de atribuio para adicionar a uma varivel um novo contedo, sem que o contedo antigo seja perdido. Ex: Atribumos varivel $nome o nome do usurio.
$nome = Leopoldo;

O contedo da varivel Leopoldo. Agora, queremos adicionar o sobrenome varivel, mas devemos fazer isso sem que o nome seja perdido. Para isso, utilizamos o operador .=, que tem a funo de atribuir o valor varivel, sem que seu contedo seja perdido.

$nome .= da Silva;

23

PHP e MySQL Agora, o contedo da varivel $nome Leopoldo da Silva.

Operadores ++ e --
O operador ++ tem a funo de incrementar em 1 o valor da varivel. Utilizado em variveis contadoras, equivalente expresso $varivel = $varivel + 1. Em oposio, o operador -- decresce o valor da varivel em 1. Ex: iniciamos a varivel $contador como tendo o valor 1 e utilizamos os operadores ++ e --. O resultado :
$contador = 1; //varivel $contador possui valor 1 $contador++; //agora, $contador vale 2 $contador++; //$contador passa a valer 3 $contador--; //$contador volta a valer 2 $contador--; //$contador vale 1

Operadores += e -=
Sua funo incrementar ou decrementar varivel o valor de outra varivel. Equivalente expresso $variavel1 = $variavel1 + $variavel2 e $variavel1 = $variavel1 variavel2, respectivamente. Ex:
$valor1 = 1; //inicia variveis $valor2 = 2; $valor3 = 3; $cont = $valor3; //$cont agora vale 3 $cont += $valor2 //$soma $cont o valor em $valor2. $cont vale 5 $cont -= $valor1 //subtrai de $soma o valor de $valor1. $cont vale 4

Operadores *= e /=
Semelhante aos anteriores, porm o operador *= multiplica o valor das variveis, enquanto o operador /= divide-os. Ex:
$valor1 = 4; $valor2 = 2; $cont = valor1; //$cont vale 4 $cont *= $valor2; //equivale a $cont = $cont * $valor2. $cont vale 8 $cont /= $valor1; //equivale a $cont = $cont / $valor1. $cont vale 2

Operador %=
Como podemos supor, semelhante aos anteriores, porm, o valor acrescentado varivel o resto da diviso. Ex:
$valor1 = 2; $valor2 = 4; $cont = $valor2; //$cont vale 4 $cont %= $valor1 /*o resto da diviso entre $cont e $valor1 (4 e 2) acrescentado $cont, ou seja. $cont = $cont + ($cont % $valor1). Como o resto da diviso entre 4 e 2 zero, a expresso seria equivalente a $cont = $cont + 0; */

Operadores de comparao
So utilizados para comparar dois valores ou duas expresses. Retorna o valor 1

em caso verdadeiro e 0 em caso de falso. atravs dos operadores de comparao que 24

PHP e MySQL construmos testes lgicos e estruturas de deciso, que permitem ao script executar determinada funo se determinada condio for satisfeita. So operadores de comparao:
Operao igual diferente maior/menor maior ou igual/menor ou igual operador == != < ou > >= ou <= Sintaxe $a == $b //retorna verdadeiro se forem iguais $a != $b //retorna verdadeiro se forem diferentes $a > $b //verdadeiro se $a maior que $b $a >= $b //verdadeiro se $a for maior ou igual a $b

A operaes de comparao utilizando os dois ltimos exemplos deve ser utilizada com cuidado. Ex: Se possumos duas variveis $a e $b contendo o mesmo valor (ex: o valor 10), as seguintes operaes retornaro resultados diferentes:
operao
$a == $b

resultado verdadeiro falso falso falso verdadeiro verdadeiro

$a != $b $a > $b $a < $b
$a >= $b $a <= $b

Os dois ltimos exemplos retornaram o valor verdadeiro, pois a expresso avaliou se $a era maior ou igual e menor ou igual a $b.

Operadores lgicos
Comparaes como as citadas no exemplo acima so possveis graas aos operadores lgicos. Eles avaliam se uma expresso verdadeira ou falsa e retornam o resultado, sendo valor 1 para verdadeiro e 0 para falso. Os operadores lgicos so:
Operador and ou && or ou || xor ! & ^ | ~ Operao E lgico OU lgico OU exclusivo NO (negao ou inverso) E lgico (bit a bit) XOR lgico (bit a bit) OR lgico (bit a bit) NO lgico (bit a bit)

Operaes lgicas
Em todas as linguagens de programao existem as estruturas chamadas

estruturas de deciso, que so blocos de comandos, escritos de forma que executem determinada funo caso uma condio seja verdadeira e outra caso seja falsa. A prpria estrutura avalia 25

PHP e MySQL a condio e se for verdadeira, executa determinada(s) funo(es); Caso seja falsa, executa funo(es) diferentes. Porm, existem casos em que mais de uma condio deve ser avaliada. Para isso, utilizamos operaes lgicas. Elas avaliam duas ou mais condies e, atravs de operaes lgicas, determinam qual ser o resultado das condies avaliadas. O programa, ento, ir utilizar este valor para determinar o que fazer. Existem basicamente, quatro operaes lgicas chamadas: AND, OR, XOR e NOT (E, OU, OU EXCLUSIVO e NO). Operaes lgicas permitem que o programa avalie se uma condio verdadeira ou falsa e execute funes especficas com base nos resultados. Veremos agora as principais operaes lgicas:

Operao AND
O operador AND retorna verdadeiro apenas quando todas as condies forem verdadeiras. Uma tabela de possveis resultados mostrada abaixo.
condio 1 V
V F F

AND AND AND AND AND

condio 2 V
F

resultado V F F F

V
F

Podemos comparar a operao lgica AND a uma multiplicao. Substituindo o Verdadeiro por 1 e Falso por 0, teremos o AND funcionando como um operador de multiplicao.
valor 1 1
1

* * * * *

valor 2 1 0 1 0

Resultado 1 0 0 0

0 0

Operao OR
A operao OR no to rgida. O resultado ser verdadeiro caso uma das condies seja verdadeira. Seria idntico uma operao de adio, porm com uma exceo: Na operao OR, a soma 1 + 1 igual a 1. Vejamos a tabela:
condio 1 V
V F F

OR OR OR OR OR

condio 2

resultado V
F

26

V
F

PHP e MySQL Transformando Verdadeiro em 1 e Falso em 0, teremos:


condio 1 1
1 0 0

+ + + + +

condio 2 1 0 1 0

resultado 1 1 1 0

Lembrando que no h o valor 2 na operao, portanto, 1 + 1 torna-se 1.

Operao XOR
A operao XOR (OU EXCLUSIVO) tem uma particularidade: Seu resultado ser verdadeiro apenas se e somente se uma das condies for verdadeira, retornando falsa caso as duas tenham o mesmo valor.
condio 1 V
V F F

XOR XOR XOR XOR XOR

condio 2 V
F

Resultado F V V F

V
F

Operao NOT
Trata-se da mais simples de todas: Ela apenas inverte o resultado de uma operao, ou seja, verdadeiro torna-se falso e vice-versa.
condio V
F

NOT NOT NOT

resultado F V

Exerccios

Escreva um script php que armazene em variveis o nome e a idade de uma

pessoa. Depois escreva na tela, em uma nica mensagem, o nome e a idade da pessoa.

Escreva um script que mostre o valor de 3 variveis numricas. Depois atribua primeira varivel o valor das outras duas variveis. Logo aps, acrescente 1 ao valor da segunda varivel e decresa em 1 o valor da terceira varivel. Escreva um script que armazene em variveis o seu nome e o nome de 5 cores

(em ingls). Utilizando apenas o comando echo, escreva seu nome 5 vezes na tela. Cada ocorrncia do nome deve ser de uma das cores previamente armazenadas nas variveis. Utilize a tag <font> para formatar os nomes.

27

PHP e MySQL

Blocos de comandos
Blocos so um conjunto de linhas de cdigo delimitadas pelos sinais { e }. Seu objetivo agrupar comandos responsveis por determinada funo. Vejamos como blocos de comando podem ser utilizados:

Estruturas de controle
Utilizamos estruturas a fim de executar determinados blocos de comandos quando necessrio, possibilitando a reutilizao do cdigo. Existem 3 tipos de estruturas:

Estruturas de Deciso: Utilizadas pelo programa para possibilitar a execuo de determinado bloco de comandos caso uma condio seja satisfeita. Dessa forma, o programa executa tarefas baseado em condies pr-estabelecidas. Ex: Escrever uma mensagem na tela, caso um valor seja par e outra mensagem caso seja mpar. Estruturas de Repetio: Possibilitam a execuo de um determinado bloco de comandos em uma quantidade de vezes pr-determinada. Isso evita que o mesmo bloco de comandos seja reescrito diversas vezes, facilitando a compreenso do cdigo. Estruturas de deciso podem ser combinadas estrutura de repetio para tornar a execuo mais dinmica. Funes: Blocos de comandos e estruturas podem ser colocadas dentro de

funes e chamadas pelo programa principal quando necessrias, tornando o programa principal mais rpido, limpo e organizado. Tambm facilita sua posterior manuteno. Cada funo deve possuir um nome nico, que segue as mesmas regras de um nome de variveis. Vamos agora conhecer as estruturas que podemos utilizar no PHP:

Estrutura if
A estrutura if (do ingls: se) executa um determinado bloco, caso uma condio seja verdadeira. Sua sintaxe :
<?php if(condio){ comandos; } ?>

A utilizao dos delimitadores { e } obrigatria, exceto se o bloco contiver apenas uma linha de cdigo. Podemos colocar quantas linhas de cdigo precisarmos dentro

da estrutura. Ex:
<?php if($valor1 == 2){ echo Estrutura if<br>; echo valor da varivel 2; } ?>

No exemplo acima, a estrutura executar os comandos quando o valor da varivel $valor1 for igual a 2. 28

PHP e MySQL Existem casos em que precisamos que a estrutura execute um determinado bloco de comandos caso uma condio seja verdadeira e outro caso seja falsa. Para isso existe uma variao da estrutura if chamado de if...else (se...ento).Essa estrutura executa um determinado bloco caso a condio seja verdadeira e outro caso seja falsa. Ex:
<?php if($a == $b){ echo Valor da varivel: $valor<br>; echo Varivel um nmero par!<br>; }else{ echo Valor da varivel: $valor<br>; echo Varivel mpar!<br>; } ?>

A condio a ser avaliada pela estrutura if faz um teste na varivel $a. Caso o resultado seja verdadeiro ($a igual a $b), a estrutura executar o primeiro bloco de comandos. Caso seja falsa, ela ir direto para o segundo bloco de comandos, ou seja, ir pular a primeira parte da estrutura. Isso evita que o teste seja feito novamente, deixando o programa duas vezes mais rpido.

Estrutura while
A estrutura while uma estrutura de repetio. Ela avalia a expresso e executa o bloco de comandos enquanto a condio for verdadeira. caso a condio retorne falsa, o while deixa de execut-la. Sua sintaxe :
<?php while(expresso){ comandos; } ?>

Devemos ter um cuidado especial a utilizar estruturas de repetio, como while. Temos que ter certeza de que h uma chance da expresso avaliada retornar o valor Falso, do contrrio, ir se tornar um lao infinito, ou seja, no vai parar de executar. Ex:
<?php $cont = 1; while($cont < 10){ echo Valor de \$cont: $cont<br>; $cont++; } ?>

Na estrutura acima, definimos o valor de $cont como sendo 1. O lao while executar um pequeno bloco de comandos enquanto o valor de $cont for menor que 10. O bloco do while escrever uma frase informando o valor de $cont, depois ir acrescentar 1 ao seu

valor. Assim, o valor de $cont ir aumentar at chegar a 10, encerrando a execuo do while.

29

PHP e MySQL

Estrutura do...while
A estrutura do...while semelhante a while, porm, enquanto a estrutura while avalia a condio antes de executar, a estrutura do...while executa o bloco antes de fazer o teste. Ex:
<?php $cont = 1; do{ echo Valor de \$cont: $cont<br>; $cont++; }while($cont < 10) ?>

Estrutura for
A utilizao do for idntica a do while, entretanto, sua sintaxe diferenciada. Nele, definimos uma varivel contadora, uma condio para o final da repetio e uma regra de modificao do contador. Sua sintaxe :
<?php for(inicializao;condio;operador){ comandos } ?>

Na inicializao, definimos e inicializamos o contador. Depois, criamos uma condio para o trmino da execuo do for. Em seguida definimos o parmetro de atualizao da varivel de controle do for. Ex:
<?php for($cont=0;$cont<10;$cont++){ echo Valor da varivel \$cont $cont<br>; } ?>

No exemplo acima, definimos dentro do for uma varivel $cont e atribumos o valor 0 a ela. Em seguida, dizemos ao for para executar o bloco de comandos enquanto o valor de $cont for menor que 10. Por ltimo, dizemos que cada vez que a estrutura for executada, a varivel $cont receber + 1 (em virtude do operador ++). Aps a atribuio, a condio testada novamente (como no while) at que a condio para o trmino do for seja satisfeita.

Estrutura foreach
Esta estrutura oferece uma maneira mais simples de percorrer os elementos de um array. Possui duas sintaxes:

<?php foreach($array as $elemento){ comandos; } ?> ou <?php foreach($array as $chave => $valor){ comandos; } ?>

30

PHP e MySQL No primeiro exemplo, a estrutura vai do primeiro ao ltimo elemento do array, e a cada iterao o valor corrente do array atribuido a varivel $elemento, e o ponteiro interno do array avanado. Dessa forma, podemos manipular os valores de $array atravs da varivel $elemento.Ex:
<?php $valor = array(1, 2, 3, 4); foreach($valor as $v){ echo Valor : $v <br>; } ?>

A estrutura foreach atribui a $v o valor da primeira posio de $valor e o imprime na tela. Em seguida, vai segunda posio de $valor, atribui seu contedo a $v e o imprime novamente. Por isso o comando echo mostra o contedo em $v, em vez do contedo em $valor. No caso de um array associativo, teramos:
<?php $lista = array(um=>1, dois=>2, tres=>3, quatro=>4); foreach($a as $chave => $valor){ echo \$a[$chave] => $valor<br>; } ?>

O exemplo acima imprime a chave associativa e o valor de cada posio do array. O resultado ser: $a[um] => 1 $a[dois] => 2 $a[tres] => 3 $a[quatro] => 4

31

PHP e MySQL

Comandos break e continue


O comando break utilizado para parar a execuo de um determinado script, bloco ou funo. Ao encontrar o comando break, PHP ir direto ao final do bloco, deixando a estrutura. Ao contrrio, o comando continue faz com que o PHP mantenha a execuo do script. Ex:
<?php for($i=0; $i < 10; $i++){ if($i == 5){ echo \$i == 5! Parou de executar!; break; } echo Executando: Valor de \$i => $i; } ?>

O resultado ser: executando: Valor de $i => 0 executando: Valor de $i => 1 executando: Valor de $i => 2 executando: Valor de $i => 3 executando: Valor de $i => 4 $i == 5! Parou de executar!

Estrutura switch
Essa estrutura executa um determinado bloco de instrues de acordo com o valor obtido pela expresso avaliada. Sua sintaxe :
<?php switch(condicao){ case valor1 : comando1 break; case valor2 : comando2 break; case valorn : comandon break; default: comando_default break; } ?>

Se a condio retornar o valor1, executar o comando1, ento no precisar conferir as demais condies, podendo deixar a estrutura. Para isso, utiliza-se o comando break entre cada condio. Caso a condio no retorne nenhum dos valores contidos na estrutura, ser executada a opo default. Ex:
<? switch($cor){ case 'vermelho' : echo cor vermelha<br>; break; case 'verde' : echo cor verde<br>; break; case 'azul' : echo cor azul<br>;

32

PHP e MySQL
break; default : echo escolha uma cor<br>; break; } ?>

Caso o valor de $cor seja vermelho, a frase cor vermelha ser escrita na tela, ento o comando break termina a execuo da estrutura, visto que a condio foi satisfeita. Em caso contrrio, far a prxima verificao. Se nenhuma das condies for satisfeita, executar a opo default, escrevendo na tela: escolha uma cor. O uso do default no obrigatrio no switch, nem mesmo o uso de break, visto que a ltima verificao a ser feita.

Funes
Funes so blocos de cdigos destinados a executar uma determinada tarefa. A sintaxe de uma funo :
<?php function nome_funcao(argumento1, argumento2, argumento_n){ comandos; } ?>

Qualquer cdigo PHP vlido pode ser colocado dentro de uma funo. Ex:
<?php function mensagem(){ echo Escreve uma mensagem.<br>; echo Este um exemplo de funo<br>; for($i=0;$i<5;$i++){ echo Usando for em uma funo<br>; echo valor de \$i => $i<br>; } } ?>

Aps criarmos uma funo, podemos fazer com que o script a execute com uma simples chamada. Ex:
<?php echo pgina web em php<br>; echo Vamos chamar a funo mensagem()<br>; mensagem(); echo funo executada com sucesso!!!<br>; ?>

Quando o PHP encontra a chamada funo, interrompe a execuo do script atual e inicia a execuo da funo chamada. Quando terminar de execut-la, retornar ao ponto onde a funo foi chamada e continuar a execuo do script.

Valor de retorno
Uma funo pode ou no retornar um valor. Para isso necessrio usar o comando return no final da funo, indicando o valor que ser retornado.Ex:
<?php function retorna_valor(){ return 10; //funo rvalor retorna o valor 10

33

PHP e MySQL
} $valor = 3; echo "\$valor => $valor<br>"; $valor = retorna_valor();
echo "\$valor => $valor<br>";

//varivel inicializada //valor antes da funcao //$valor recebe o retorno da funo //valor depois da funcao

?>

Argumentos ou parmetros
So valores passados funo para serem manipulados pela mesma. A passagem de parmetros no obrigatria. Os parmetros devem ser declarados entre parnteses, aps o nome da funo. Os parmetros sero recebidos de acordo com a ordem de passagem e transformados em variveis locais para que a funo possa utiliz-los. Ex:
<?php function imprime($parametro){ echo $parametro<br>; } $argumento = argumento torna-se parmetro da funo.; imprime($argumento); ?>

No exemplo acima, a funo imprime() recebe como argumento a varivel $argumento para que seja manipulada. Dentro da funo, o valor do argumento agora torna-se a varivel $parametro, que impressa na tela atravs do comando echo. O argumento passado funo no precisa necessariamente estar dentro de uma varivel. Ex: a chamada imprime(frase pra imprimir) tambm vlida para o exemplo acima.

Passagem de parmetros por referncia


Os exemplos anteriores mostram a passagem de parmetros por valor, ou seja, o valor da varivel passado funo, porm, quando a funo termina de executar, o valor da varivel passada funo como parmetro permanece inalterado. Para que uma funo possa alterar o valor de uma varivel (ou mais de uma), necessrio fazer a passagem de parmetros por referncia, ou seja, a funo ir receber a prpria varivel como parmetro e poder assim alterar seu valor. Ex:
<?php function soma10($num){ $num += 10; } $a = 5; soma10($a); echo $a; ?>

O resultado do script acima ser 5, pois houve uma passagem de parmetro por valor para a funo soma10(). Neste caso, o valor de $a foi copiado e enviado funo, porm, o contedo de $a foi mantido pelo PHP. Para que a funo possa alterar o valor de $a, a

varivel deve ser passada por referncia, ou seja, o endereo de memria da varivel deve ser passado para a funo (afinal, variveis so endereos de memria que armazenam determinado valor). A passagem por referncia feita utilizando o sinal &. Veja o exemplo acima utilizando a passagem por referncia:

34

PHP e MySQL
<?php function soma10(&$num){ //O & antes de $num indica passagem por referncia $num += 10; } $a = 5; soma10($a); echo $a; ?>

O resultado agora ser 15.

Variveis globais e locais


O escopo de uma varivel a poro do script em que ela pode ser utilizada. Em geral, as variveis tem escopo global, ou seja, podem ser utilizadas em qualquer poro do script, porm, quando declaramos funes, criado um escopo local e a funo passa a utilizar apenas as variveis declaradas dentro dela. Uma varivel global no pode ser utilizada dentro de uma funo sem que seja declarada. Ex:
<?php $frase = uma frase qualquer...; function mostra_frase(){ echo $frase; } mostra_frase(); ?>

A varivel $frase dentro da funo mostra_frase() considerada uma varivel diferente da que foi declarada anteriormente. Para que a funo possa utilizar a varivel
$frase declarada fora dela, devemos declar-la dentro da funo como uma varivel global,

para que a funo possa reconhec-la. O exemplo acima ficaria assim:


<?php $frase = uma frase qualquer...; function mostra_frase(){ global $frase; echo $frase; } mostra_frase(); ?>

Outra forma de acessar uma varivel global no PHP recorrendo ao array $GLOBALS. Este array parte do prprio PHP (uma constante) e registra todas as variveis globais declaradas no script. Podemos utilizar o array $GLOBALS da seguinte forma:
<?php $frase = uma frase qualquer...; function mostra_frase(){ echo $GLOBALS[frase]; } mostra_frase(); ?>

O valor dentro de [ e ] o nome da varivel global a ser utilizada.

Processando Formulrios com PHP


A linguagem PHP muito utilizada para o tratamento de formulrios. Como visto

35

PHP e MySQL anteriormente, formulrios so utilizados para que o usurio possa enviar informaes pgina, como seu endereo de e-mail, ou um nome a pesquisar. As informaes so enviadas pelo formulrio atravs dos mtodos GET ou POST, processadas pelo servidor e armazenadas em arquivos ou bancos de dados. Muitas vezes, esse processamento retorna um resultado (Ex: uma pesquisa) que enviado ao usurio. A linguagem HTML no capaz de manipular essas informaes, exigindo para isso o uso de scripts, como o PHP. Para compreendermos melhor o funcionamento do PHP no tratamento de formulrios, vamos construir um exemplo simples. Faremos uma pgina chamada info.html, onde colocaremos um formulrio que enviar informaes do visitante para o servidor. Faremos tambm um script PHP que ir receber as informaes enviadas pelo formulrio e far um processamento simples, retornando uma mensagem ao usurio. O cdigo para o formulrio mostrado abaixo:
<html> <head> <title>informaes do usurio</title> </head> <body> <form action="info.php" method="GET"> <p align="center">Nome: <input type="text" name="nome" size="30"></p> <p align="center">E-mail: <input type="text" name="mail" size="30"></p> <p align="center"><input type="submit" value="enviar"></p> </form> </body> </html>

A pgina info.html contm um formulrio que pede ao usurio para que digite seu nome e seu endereo de e-mail. Note que especificamos na tag <form> o atributo action como info.php. Este o nome do script que ir processar as informaes enviadas pelo formulrio. Tambm atruibumos tag method o valor GET, indicando que este ser o mtodo utilizado para o envido das informaes ao servidor. Se nenhum valor for atribudo a essa tag, o mtodo GET ser utilizado. Como vimos anteriormente, o mtodo GET envia informaes ao servidor atravs de uma cadeia de variveis, indicada logo aps o endereo de destino. Isso impe um limite no tipo e na quantidade de informaes que podem ser enviadas ao servidor (Ex: no possvel enviar fotos via mtodo GET), alm de tornar visveis as informaes enviadas, sendo assim um mtodo pouco seguro de envido de dados.

Array superglobal $_GET


O PHP disponibiliza o array $_GET para tratar as informaes enviadas pelo mtodo

GET. As informaes enviadas so mantidas dentro destes arrays e o nome dos campos utilizado como chave associativa para que o script possa acessar os valores. No nosso exemplo, seria $_GET['nome'] e $_GET['mail']. Vamos agora escrever o script info.php que ir tratar as informaes enviadas pelo formulrio. O script de info.php mostrado a seguir:
<?php //captura as informaes enviadas pelo formulrio $nome = $_GET['nome']; $mail = $_GET['mail'];

36

PHP e MySQL
//mostra as informaes na tela echo <p align='center'>Meu nome $nome</p>; echo <p align='center'>Meu e-mail $mail</p>; ?>

O script acima captura as informaes enviadas pelo formulrio e as armazena dentro de variveis, para facilitar seu processamento. Em seguida, os valores das variveis so mostrados ao usurio. Caso os campos do formulrio sejam preenchidos com os valores Umuarama e umuarama@senac, a URL ser: http://localhost/info.php?nome=umuarama&mail=umuarama%40senac Onde:

http://localhost/: o endereo do site; info.php o script que processa as informaes do formulrio; ? indica o incio das variveis do formulrio; nome=umuarama : varivel nome contendo o valor 'umuarama' ; & : usado para separar uma varivel da outra; mail=umuarama%40senac : varivel mail contendo o valor umuarama%40senac. Note que o smbolo @ foi substitudo pelo smbolo %40, para que possa ser transmitido atravs do mtodo GET.

Array Superglobal $_POST


Semelhante ao GET, o array superglobal $_POST armazena informaes enviadas atravs do mtodo POST. Para utilizar o mtodo POST no exemplo anterior, devemos fazer pequenas alteraes no formulrio e no script. Ex:
<form action=info.php method=POST>

Isso far com que o formulrio envie as informaes atravs do mtodo POST, em vez do GET. Agora, basta alterar o script info.php para que possa capturar as informaes do array $_POST:
<?php $nome = $_POST['nome']; $mail = $_POST['mail']; ... ?>

Formatao de dados Funo htmlspecialchars()


Os dados enviados por formulrios no possuem nenhum tipo de controle ou formatao, permitindo que ocorram diversos erros e/ou situaes indesejadas. Ex: Voc cria um web site para seu comrcio e disponibiliza um espao para que os visitantes comentem sobre seu trabalho. Um belo dia voc encontra entre os recados, um banner da

concorrncia. Isso aconteceu porque no foi implantado nenhum tipo de controle ou formatao das mensagens, permitindo assim que o visitante adicionasse HTML 37

PHP e MySQL mensagem. Para evitar esse tipo de transtorno, utilizamos a funo htmlspecialchars, que converte HTML para texto simples, exibindo-o em forma de texto comum. No caso, o banner do concorrente apareceria como <img src=http://www.concorrente.com/banner.jpg> . Ex:
<?php $mensagem = <a href=www.senac.pr.gov.br>SENAC</a>; echo $mensagem; //mostra link $mensagem = htmlspecialchars($mensagem); echo $mensagem; //mostra cdigo html ?>

O primeiro comando echo mostrar o link que levar pgina correspondente. o segundo mostrar o cdigo html contido na varivel.

funes addslashes() e stripslashes()


Em alguns casos, o usurio pode digitar caracteres especiais em um campo onde eles no devam ser utilizados. Ex: Um usurio pode preencher o campo nome do formulrio como Jos da Silva, popular Zezinho. As aspas contidas no campo podem causar erros na gravao e/ou interpretao das informaes. Para evitar isso, utilizamos a funo addslashes, que adiciona uma \ antes de cada ocorrncia de caracteres especiais. O campo ficaria: Jos da Silva, popular \Zezinho\. A presena da \ faz com que as aspas sejam interpretadas como caracteres especiais, e no sejam executadas como parte do script (Ex: poderia causar problemas com o comando echo). Utilizamos addslashes da seguinte forma:
$nome = addslashes($nome);

Para reverter o efeito da funo addslashes, utilizamso a funo stripslashes, que remove os caracteres de controle adicionados pela funo addslashes, fazendo com que a string volte sua composio original. Ex:
$nome = stripslashes($nome);

Dessa forma, o nome volta a ser Jos da Silva, popular Zezinho.

funes urlencode() e urldecode()


Ao utilizar o mtodo GET, caracteres especiais so substitudos pelo seu cdigo hexadecimal correspondente, precedido de % (Ex: espaos em branco so substitudos por %40). Para que os cdigos sejam convertidos para os caracteres especiais que representam, usamos urldecode. Para realizar a operao inversa, utilizamos a funo urlencode. Ex:
<?php $site = http://localhost/?nome=Jose%40Silva $site = urldecode($site); echo $site;

$site = urlencode($site); ?>

Isso far com que os cdigos hexadecimais sejam removidos, mostrando na tela: http://localhost/?nome=Jose Silva. Em seguida, a funo urlencode aplicada e o link volta ao seu estado normal. Isso pode ser til caso o script precise retransmitir o link.

38

PHP e MySQL

funes intval() e doubleval()


Muitas vezes precisamos que o usurio fornea um valor numrico para o formulrio, porm os campos aceitam apenas texto. Para a devida converso, podemos utilizar as funes intval() e doubleval() que, respectivamente convertem o valor da varivel em inteiro e em double. Ex: No formulrio html temos:
<input type=text name=idade> <input type=text name=peso>

O script PHP deve tratar os dois valores como inteiro e double, respectivamente. Para isso podemso ter o seguinte cdigo:
<?php $idade = intval($_GET['idade']); $peso = doubleval($_GET['peso']); ?>

funes trim(), ltrim() e chop()


Freqentemente, usurios preenchem formulrios colocando espaos em branco antes e depois dos valores. Para o formulrio, isso no significa muito, mas para o script (ex: no momento de gravar as informaes em um banco de dados) isso pode se tornar um problema, pois espaos em branco so interpretados como valor. Para evitar problemas, podemos remover os espaos em excesso que o usurio envia utilizando uma das funes citadas acima. Apesar de possurem o mesmo objetivo, essas funes possuem pequenas diferenas: A funo chop() remove espaos apenas no final da string. A funo ltrim() remove espaos no incio da string e a funo trim() remove espaos no incio e no final da string. A utilizao depende do resultado desejado. Ex:
<?php $nome = trim($nome); $mail = chop($mail); ?>

Validao de formulrios com javascript


At agora, nossos formulrios no receberam nenhum tipo de validao, nada que impedisse o envio de informaes incorretas ou campos em branco. Criar funes PHP para fazer esse tipo de validao perfeitamente possvel, no entanto, exige muito processamento do servidor, tornando o acesso lento e o retorno demorado. Para evitar esse tipo de transtorno, faremos com que uma parte das validaes necessrias seja feita no navegador do cliente, usando Javascript.

Javascript uma linguagem de programao que funciona diretamente no navegador do cliente (por isso chamado de tecnologia cliente). Um script javascript pode ser escrito em meio ao cdigo html dentro da tag <script> ou fora, em documentos de texto separados. Javascript s precisa de um editor de texto para ser escrito e um navegador para ser executado. Apesar dos grandes esforos para que ele seja executado de forma padro, apenas o navegador netscape executa-o com preciso. No nos aprofundaremos em javascript, pois no o foco deste documento. Conheceremos apenas o bsico para a validao de formulrios. 39

PHP e MySQL Vamos criar a funo que ir validar os campos do formulrio. Essa funo deve ser escrita no cabealho do cdigo html da pgina do formulrio. Todo o cdigo deve estar dentro da tag <script>, que indicar que o cdigo javascript dessa forma:
<head> <script language=Javascript> function valida(nomeform){ ... } </script> ... </head>

Na tag <form>, devemos indicar que o formulrio dever passar pela funo valida antes de ser enviada para o servidor. Essa condio definida configurando o atributo onsubmit da seguinte forma:
<form method=POST action=form.php onsubmit=return valida(this)>

O formulrio utilizar o mtodo POST para envio das informaes. o script que ir tratar as informaes do formulrio o form.php. O atributo onsubmit (ao enviar) desviar a sada do formulrio para a funo valida. A palavra this indica que ser este formulrio que ser tratado pela funo. A palavra return indica que a funo retornar um valor (no caso, booleano). Se a funo retornar falso, o formulrio no ser enviado. Vamos implementar a funo valida com as devidas validaes a serem feitas. Vamos comear fazendo com que o formulrio no seja enviado caso o campo nome no tenha sido preenchido, ou seja, seu valor nulo:
if(formulario.nome.value==) alert(Nome no foi preenchido);

Se o valor no campo nome do formulrio no possuir nada, uma janela de alerta ser mostrada na tela com a mensagem Nome no foi preenchido. O formulrio no ser enviado. Para descobrir se o usurio digitou o @ no campo de e-mail:
if(formulario.email.value.indexOf('@',0) == -1) alert(E-mail invlido);

Para limitar o nmero de caracteres mnimo e mximo para o campo de senha:


if(formulario.senha.value.lenght<5 || formulario.senha.value.lenght >15) alert(senha deve ter entre 5 e 15 caracteres);

Agora vamos unir as condies de teste dentro da funo valida:


<script language=javascript> function valida(formulario){ if(formulario.nome.value==){ alert(Nome no foi preenchido); return false; } if(formulario.email.value.indexOf('@',0)== -1){ alert(E-mail incorreto!);

return false; } if(formulario.senha.value.lenght<5 || formulario.senha.value.lenght>15){ alert(Senha deve conter entre 5 e 15 caracteres); return false;

40

PHP e MySQL
} return true; {

Antes de ser enviado ao servidor, os valores do formulrio so submetidos funo valida. Caso alguma irregularidade seja encontrada, a funo retorna false e o formulrio no enviado ao servidor. Caso contrrio, a funo retorna true e o formulrio enviado.

Validao com PHP


Muitas vezes, a validao feita com javascript no suficiente (ex: o cdigo foi modificado pelo cliente), exigindo assim uma segunda validao atravs do PHP. Vamos adaptar o script form.php para fazer a validao do formulrio. Vejamos as validaes mais importantes a serem feitas:

Espaos em branco
Em muitos casos, devemos evitar que o usurio envie espaos em branco dentro do campo (ex: campo de e-mail ou senha). Para remover os espaos em branco, utilizamos a funo strstr(), que busca a ocorrncia de um caracter dentro de uma string. Ex:
<?php if(strstr($senha,' ')==TRUE) echo A senha no pode conter espaos em branco; ?>

A funo strstr buscou por espaos em branco na varivel $senha. Em caso de haver espaos, uma mensagem de alerta enviada ao usurio (O cdigo tambm pode ser adaptado para que mostre uma janela de alerta, usando javascript).

Quantidade mnima de caracteres


Para verificar se um nmero mnimo de caracteres foi digitado, usamos a funo strlen(), que retorna o nmero de caracteres de uma string. Ex:
<?php if(strlen($senha)<5) echo Senha deve ter, no mnimo 5 caracteres; ?>

Correo automtica
Em muitos casos, especialmente no campo de e-mail, alguns caracteres so digitados incorretamente, como vrgula no lugar de ponto, espaos antes e depois do @, etc. O script PHP pode corrigir automaticamente estes erros com a funo str_replace(). Sua sintaxe :
str_replace(caracter_antigo,caracter_novo,string).

Ex: para substituirmos os hfens por underlines, temos:


<?php $mail = str_replace( - , _ , $mail); ?>

Isso far com que toda ocorrncia de hfen dentro da varivel $mail seja substituda por underline. Se quisermos remover um caracter (ex: espao em branco), basta indicar que o novo caracter ser 'nada'. Ex: 41

PHP e MySQL
<?php $mail = str_replace( , ,$mail); ?>

Valores numricos
Para saber se um campo recebeu apenas valores numricos (ex: idade, telefone, CEP), podemos utilizar a funo is_numeric(). Ela retorna 'verdadeiro' se o campo for numrico. Ex:
<?php if(!is_numeric($cep)) echo cep deve conter apenas nmeros; ?>

Aps as devidas validaes, as informaes podem ser tratadas (ex: gravadas em um banco de dados). O cdigo completo do formulrio de cadastro (cadastro.html) e seu script PHP (cadastro.php) so mostrados a seguir:
<html> <head> <title>Cadastro</title> <script language=javascript> function valida(form){ if(form.nome.value==){ alert(Nome no foi preenchido); return false; } if(form.mail.value== || form.mail.value.indexOf('@',0) == -1 || form.value.indexOf('.',0) == -1){ alert(Campo de e-mail invlido); return false; } if(form.estado.selectedIndex == 0){ alert(Selecione um estado); return false; } if(form.login.value.lenght<5 || form.login.value.lenght>15){ alert (Login deve conter entre 5 e 15 caracteres); return false; } if(form.senha.value.lenght<5 || form.senha.value.lenght>15){ alert(Senha deve conter entre 5 e 15 caracteres); return false; } if(form.senha.value.indexOf(' ',0)!= -1){ alert(Senha no deve conter espaos em branco); return false; } if(form.senha.value != form.confirmasenha.value){ alert(senhas no conferem); return false; } return true; } </script> </head> <body> <form method=POST action=cadastro.php onsubmit=return valida(this)>

42

PHP e MySQL
<p>Nome: <input type=text name=nome size=20></p> <p>E-mail: <input type=text name=email size=20></p> <p>Estado: <select name=estado> <option value=AC>AC</option> <option value=AL>AL</option> <option value=AM>AM</option> <option value=AP>AP</option> <option value=BA>BA</option> <option value=CE>CE</option> <option value=DF>DF</option> <option value=ES>ES</option> <option value=GO>GO</option> <option value=MA>MA</option> <option value=MG>MG</option> <option value=MS>MS</option> <option value=MT>MT</option> <option value=PA>PA</option> <option value=PB>PB</option> <option value=PE>PE</option> <option value=PI>PI</option> <option value=PR>PR</option> <option value=RJ>RJ</option> <option value=RN>RN</option> <option value=RO>RO</option> <option value=RR>RR</option> <option value=RS>RS</option> <option value=SC>SC</option> <option value=SE>SE</option> <option value=SP>SP</option> <option value=TO>TO</option> </select></p> <p>Login: <input type=text name=login size=20></p> <p>Senha: <input type=password name=senha1 size=20></p> <p>Confirma Senha: <input type=password name=senha2 size=20></p> <p><input type=submit value=enviar name=enviar></p> </form> </body> </html>

Quando o usurio clicar no boto enviar, as informaes do formulrio sero enviadas para a funo valida(), que verifica o preenchimento correto dos campos e retorna um valor booleano. Caso seja encontrada uma irregularidade, a funo retorna false (falso) e os dados no sero enviados ao servidor. Caso todas as informaes estejam corretas, a funo retorna true (verdadeiro) e o formulrio enviado para o servidor. Vamos agora ao script cadastro.php:
<?php //captura as informaes do formulrio atravs do array POST $nome = $_POST['nome']; $email = $_POST['email']; $estado = $_POST['estado']; $login = $_POST['login']; $senha1 = $_POST['senha1']; $senha2 = $_POST['senha2']; //elimina erros na digitao de e-mails $email = str_replace( ,,$email);

43

PHP e MySQL
$email = str_replace(/,,$email); $email = str_replace(@.,@,$email); $email = str_replace(.@,@,$email); $email = str_replace(,,.,$email); $email = str_replace(;,.,$email); //varivel que informar a ocorrncia de erros $erro = 0; //verifica se foi digitado o nome if(empty(nome)){ $erro = 1; $msg = Informe seu nome; } //verifica tamanho mnimo do e-mail e se existe @ e ponto. elseif(strlen($email)<8 || substr_count($email, @)!=1 || substr_count($email,.)==0){ $erro = 1; $msg = E-mail no foi digitado corretamente; } //verifica se o estado foi selecionado elseif(strlen($estado)!=2){ $erro = 1; $msg = Informe o estado; } //verifica o tamanho do login elseif(strlen(login)<5 || strlen(login)>15){ $erro = 1; $msg = Login deve ter entre 5 e 15 caracteres; } //verifica se a senha contm espaos em branco elseif(strstr($senha,' ')!=false){ $erro = 1; $msg = A senha no deve conter espaos em branco; } //compara senha1 e senha2 elseif($senha1 != $senha2){ $erro = 1; $msg = Senhas digitadas no conferem; } //se h erro, exibe mensagem: if($erro){ echo <html><body>; echo <p align='center'>$msg</p>; //cria um link 'voltar' usando javascript echo <p align='center'><a href='javascript:history.back()'>Voltar</a></p>; echo </body></html>; }else{ //aqui podemos realizar o tratamento das informaes. Ex: gravando em arquivo //ou banco de dados echo <html><body>; echo <p align='center'>Cadastro Realizado com sucesso!</p>; echo </body></html>; } ?>

O script acima verifica o preenchimento do formulrio. Caso algum erro seja encontrado, a varivel $erro recebe o valor 1, e a varivel $msg recebe uma mensagem relacionada irregularidade encontrada, que exibida junto com um link, que utiliza uma funo Javascript para levar o usurio ltima pgina visitada (no caso, o formulrio). Caso 44

PHP e MySQL o preenchimento esteja correto, o script apenas escreve a mensagem Cadastro realizado com sucesso e finaliza. At ento, este script tem apenas a funo de validao do formulrio, mas podemos acrescentar funes para o tratamento de formulrios, como a gravao em arquivos de texto ou bancos de dados.

Arquivos de texto
A soluo mais simples para o tratamento de informaes grav-las em arquivos de texto. PHP disponibiliza funes para a criao e manipulao de arquivos de texto. A utilizao de arquivos de texto recomendada quando o volume de informaes pequeno e no exige um tratamento mais complexo. Ex: podemos utilizar arquivos de texto para criar contadores de acesso para o site em geral ou para pginas especficas, criao de livros de visitas, listas de discusso, anncios on-line ou qualquer outra aplicao simples, que no exija um tratamento mais refinado, como oferecido por sistemas de gerenciamento de banco de dados (SGBD), como o MySQL por exemplo, que deixaria o acesso ao site mais lento. Entretanto, no aconselhvel utilizar arquivos de texto para tratar de informaes sigilosas, como senhas de usurios, devido a limitaes de segurana (arquivos texto podem ser lidos por qualquer pessoa). Nesses casos aconselhamos o uso de bancos de dados.

Manipulando Arquivos
As quatro operaes bsicas que podemos realizar em um arquivos so abertura, leitura, escrita e fechamento. PHP oferece diversas funes para o tratamento de arquivos. Vejamos as principais:

Abertura
Utilizamos a funo fopen() para realizar a abertura de um arquivo. Sua sintaxe :
fopen(nome_arquivo, modo);

O parmetro nome_arquivo o nome do arquivo que ser criado. Se for informado uma URL iniciando em http://, ser criada uma conexo http com o servidor informado antes da abertura do arquivo. Caso seja informado uma URL iniciada em ftp://, uma conexo ftp ser criada antes da abertura do arquivo. Isso possibilita a manipulao de arquivos em servidores remotos. Caso a funo seja executada com sucesso, ela retornar um ponteiro para o arquivo recm aberto, para que possamos manipular o arquivo em si.

O segundo parmetro da funo o modo de abertura do arquivo. Uma relao dos modos de abertura mostrada a seguir:

45

PHP e MySQL
Modo 'r' 'r+' 'w' 'w+' 'a' 'a+' 'x' 'x+' Descrio Somente leitura, posiciona ponteiro no incio do arquivo Leitura e escrita, posiciona ponteiro no incio do arquivo Somente escrita, posiciona ponteiro no incio do arquivo e deixa-o com tamanho zero. Se o arquivo no existir, tenta cri-lo
Leitura e escrita, posiciona ponteiro no incio do arquivo e deixa-o com tamanho

zero. Se o arquivo no existir, tenta cri-lo Somente escrita, posiciona ponteiro no final do arquivo. Se o arquivo no existir, tenta cri-lo Leitura e escrita, posiciona ponteiro no final do arquivo. Se o arquivo no existir, tenta cri-lo Cria e abre arquivo somente para escrita, posiciona ponteiro no incio do arquivo. Se arquivo existir, retorna falso e gera um erro. Usado apenas em arquivos locais Cria e abre arquivo para leitura e escrita, posiciona ponteiro no incio do arquivo. Se arquivo existir, retorna falso e gera um erro. Usado apenas em arquivos locais

Existem tambm os parmetros 't' e 'b', informados como ltimo caracter do parmetro modo. O parmetro 't' usada em sistemas Windows, para traduzir as quebras de linha (\n) para \r\n. O parmetro 'b' fora o uso do modo binrio, usado em sistemas que diferenciam o modo binrio do modo texto. Ex:
$ponteiro = fopen(/pasta/teste.txt, r); $ponteiro = fopen(/var/www/texto.txt, wb); $ponteiro = fopen(http://www.server.com, r+);

Em caso de problemas na abertura de arquivos em sistemas Unix (Linux, BSD, etc) verifique as permisses do diretrio onde o arquivo est sendo criado. Em sistemas Windows, deve-se usar caracteres de escape para a utilizao das barras invertidas. Ex:
$ponteiro = fopen(c:\\pasta\\arquivo.txt, rt);

Fechamento
Para fechar um arquivo, devemos usar a funo fclose() da seguinte forma:
fclose(ponteiro);

O parmetro ponteiro a varivel que armazena o ponteiro do arquivo criado com a funo fopen. Caso o arquivo no possa ser fechado, a funo retornar o valor falso. Ex:
<?php $ponteiro = fopen(testes.txt, r); fclose($ponteiro); $arquivo = fopen(contador.txt, 'r+'); fclose($arquivo); ?>

Leitura
A leitura de um arquivo pode ser feita utilizando-se a funo fread(), que possui a seguinte sintaxe:
fread(arquivo,tamanho);

onde arquivo o nome do arquivo que deve ser lido e tamanho o tamanho em bytes que

46

PHP e MySQL deve ser lido. Ex:


<?php $arq = fopen('texto.txt', 'r'); $conteudo = fread($arq,4096); echo $conteudo; fclose($arq); ?>

No exemplo acima, o arquivo texto.txt aberto no modo leitura (r). Em seguida, a funo fread faz a leitura de 4096 bytes do arquivo e armazena na varivel $conteudo, que exibida na tela com o comando echo. Depois, o arquivo fechado. Se o parmetro 'tamanho' no for informado para a funo fread(), ela utilizar o valor padro de 1024 bytes. A leitura ser encerrada quando o nmero de bytes informado for lido ou quando o final do arquivo for alcanado. Outra alternativa para a leitura de arquivos de texto o uso da funo file_get_contents(). Essa funo dispensa o uso de fopen(), fread() e fclose(), j que faz a abertura, leitura e fechamento do arquivo de uma nica vez. Ex:
<?php $texto = file_get_contents(comentario.txt); echo $texto; ?>

O arquivo 'comentario.txt' foi aberto pela funo, que armazenou seu contedo na varivel $texto e logo depois o fechou. Outra alternativa seria o uso da funo readfile(). Ela abre o arquivo, exibe seu contedo e o fecha, dispensando o uso de qualquer outra funo extra. Ex:
<?php $texto = readfile(comentario.txt); ?>

Esse simples exemplo abre o arquivo comentario.txt, exibe seu contedo e o fecha. Para ler apenas uma linha do arquivo, usamos a funo fgets(). Essa funo tambm recebe um tamanho como parmetro, porm ela ir ler o arquivo at que o tamanho informado seja alcanado ou at alcanar o final da linha. Ex:
<?php $arq = fopen(comentario.txt, r); $linha = fgets($arq,2048); echo $linha; fclose($arq); ?>

No exemplo acima, o arquivo comentario.txt aberto em modo leitura e sua primeira linha lida com a funo fgets() e armazenada na varivel $linha. Se a funo fosse chamada novamente, retornaria a segunda linha do arquivo. Para ler apenas um caracter por vez, usa-se a funo fgetc(). Ex:
<?php $arq = fopen(comentario.txt,r); while(($char = fgetc($arq))!= false) echo $char;

fclose($arq); ?>

47

PHP e MySQL No exemplo acima, uma atribuio feita dentro do while, onde a funo fgetc l um caracter do arquivo e armazena na varivel $char, que exibida com echo. Em seguida o prximo caracter lido e assim at que no haja mais caracteres a serem lidos (retorna false). Ento, o arquivo fechado. Existem casos em que o arquivo possui tag's html e php em seu contedo e elas devem ser removidas para que o arquivo possa ser exibido ao usurio. Para eliminar essas tag's, usamos a funo fgetss(), que possui a mesma sintaxe de fgets(), com a diferena de eliminar tags do contedo. Ex: O arquivo texto.txt possui o seguinte contedo:
exemplo de <b>negrito</b> e </i> itlico</i>

Seria visualizado como:


exemplo de negrito e itlico

Vamos realizar a leitura do arquivo usando a funo fgetss(), no exemplo abaixo:


<?php $arq = fopen(texto.txt, r); $conteudo = fgetss($arq, 2048); echo $conteudo; fclose($arq); ?>

O resultado seria:
exemplo de negrito e itlico

Podemos tambm atribuir cada linha de um arquivo a uma posio de um array, para que seu contedo seja exibido atravs de um lao for ou foreach. Para isso, utilizamos a funo file(), que armazena cada linha do arquivo em uma posio do vetor. Ex:
<?php $vetor = file(comentario.txt); foreach( $vetor as $v) echo $v<br>; ?>

O exemplo acima coloca cada linha do arquivo comentario.txt em uma posio do vetor. Em seguida cada posio exibida com o uso do foreach.

Escrita
Para escrever dados em um arquivo, utilizamos a funo fwrite. Seus parmetros so o ponteiro do arquivo que deve receber os dados e a string que ser gravada no arquivo: fwrite(ponteiro,string); a string informada ser gravada no arquivo especificado pelo seu ponteiro. Ex: <?php
$conteudo = Um pequeno exemplo de contedo que pode ser gravado em um arquivo;

$arq = fopen(exemplo.txt,w); fwrite($arq,$conteudo); fclose($arq); ?>

No exemplo acima, a string contida na varivel $contedo foi gravada no arquivo exemplo.txt. 48

PHP e MySQL Como foi visto anteriormente, podemos utilizar arquivos de texto para guardar pequenas informaes e criar pequenas aplicaes, como contadores de acesso, livros de visitas, mural de recados, entre outras. Entretanto, algumas aplicaes exigem um gerenciamento mais completo das informaes, alm de uma maior segurana e organizao, como um cadastro de clientes.

Funes Require e Include


Escrever scripts em php pode ser mais simples do que nas demais linguagens CGI, porm, no uma boa prtica colocar todoscript dentro de um nico documento. O ideal que se tenha documentos separados e que estes sejam chamados quando necessrios (assim como as funes). Para que um script contido em um arquivo separado possa ser usado, devemos cham lo utilizando as funes require() e include(). Essas funes agem como chamadas funes, carregando o script php que recebem como parmetro e executando-o dentro do script que o chamou. Ex: Temos um script chamado data.php, cuja funo imprimir na tela a data atual. Seu contedo :
<?php $data = date(d-m-Y); echo Hoje $data <br>; ?>

Se quisermos que a data seja exibida em todas as pginas de nosso site, no precisaremos escrever este script novamente. Basta que o chamemos, atravs da funo include:
<?php echo Pgina Principal<br>; include(data.php); ?>

A funo include incluir o script data.php na execuo, desviando o processamento para o script e retornando em seguida. Em alguns casos, precisamos chamar o script apenas uma vez, ento usamos a funo inlcude_once(), que realiza a chamada apenas uma vez. As funes require() e require_once() so idnticas, porm, aconselhvel utilizar include em vez de require(), por questes de desempenho e confiabilidade.

MySQL e PHP
Como dito anteriormente, informaes que precisam ser manipuladas com mais segurana e flexibilidade exigem o uso de um banco de dados. Esse banco de dados exige um sistema de gerenciamento (SGBD Sistema de Gerenciamento de Banco de Dados). Existem muitos SGBD's disponveis no mercado, de forma gratuita ou atravs de

pagamento de licenas. Entre eles, est o MySQL, um sistema desenvolvido pela Sun Microsystems que roda nativamente no PHP. A linguagem PHP suporta diversos SGBD's como Oracle, Sybase, Interbase(Firebird), mSQL, Microsoft SQL Server, MSSQL, MySQL, PostgreSQL, entre outros. Entretanto, o MySQL, como SGBD nativo do PHP, no exige instalao de nenhum recurso adicional (driver, extenso, etc), bastando apenas que o sistema esteja funcionando no servidor. 49

PHP e MySQL

Estrutura de um Banco de Dados


Um banco de dados constitudo de tabelas, tambm chamadas de entidade, que so constitudas de colunas, onde cada coluna representa um atributo da entidade. Ex: Em um banco de dados de uma loja virtual, podemos encontrar as tabelas cliente, produto, fornecedor e pedido. Na tabela cliente, podemos encontrar atributos, como Nome, endereo, nmero do CPF, etc. As tabelas representam entidades existentes no mundo real e so constitudas de colunas que representam atributos relevantes de cada entidade. Uma vez definidas as tabelas, podemos preench-las com as informaes necessrias, ex: podemos cadastrar clientes enviando tabela cliente as informaes necessrias, conforme pede a tabela cliente (nome, endereo, cpf,...).

Acessando MySQL
Podemos acessar o MySQL atravs do terminal utilizando o comando mysql. Sua sintaxe :
prompt> mysql -u root -h localhost -p

A opo -u indica o usurio (no caso, root ou superusurio). A opo -h indica o servidor onde se encontra o MySQL (nesse exemplo o servidor local ou localhost) e a opo -p indica que o mysql deve exigir a senha de acesso para o usurio. Se o usurio informado possuir uma senha de acesso, a mesma deve ser informada e ento o sistema far o login no MySQL. A tela do terminal ter agora a seguinte aparncia:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.0.32-Debian_7etch5-log Debian etch distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

Isso indica que o login foi efetuado e que voc se encontra agora dentro do MySQL.

Comandos sql
A linguagem sql (Struct Query Language) uma linguagem padro para a manipulao de dados dentro de um SGBD. Desenvolvida pela IBM, possibilita o armazenamento, organizao, atualizao e excluso de informaes dentro do banco de dados. A linguagem sql dividida em duas: Linguagem de Definio de Dados (DDL) e
Linguagem de Manipulao de Dados (DML). As DDL's so utilizadas para montar o banco

de dados e suas tabelas, enquanto as DML's so utilizadas para manipular os dados contidos no banco.

Comando create
Este comando utilizado para criar novos bancos de dados ou tabelas. Sua sintaxe :
create database nome_do_banco ; //cria um novo banco de dados create table nome_da_tabela(atributos); //cria uma nova tabela

50

PHP e MySQL Ex: Vamos criar um novo banco de dados:


mysql> create database exemplo; Query OK, 1 row affected (0.00 sec)

A linha abaixo do comando indica que a Query (comando SQL) executou com sucesso, afetando uma linha, levando 0,00 segundos para ser executado. Agora vamos informar ao MySQL que pretendemos utilizar este banco de dados Isso feito atravs do comando use:
mysql> use exemplo; Database changed

A mensagem abaixo indica que o MySQL passar a utilizar o banco de dados 'exemplo' para executar os prximos comandos. Se quisermos ver os bancos de dados existentes no servidor, podemos utilizar o comando show da seguinte forma:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | exemplo | | mysql | | testes | +--------------------+ 4 rows in set (0.00 sec)

O MySQL mostrar uma pequena tabela com a relao dos bancos de dados existentes no servidor. Para uma melhor demonstrao, vamos criar uma tabela chamada Aluno. Essa tabela ir armazenar os dados dos alunos de um curso on-line. Os atributos dessa tabela sero: Nome do aluno, E-mail, data de nascimento, e sua matrcula. Cada um dos atributos
descrito ser uma coluna da tabela Aluno. Assim como as variveis, atributos de uma tabela

tambm possuem um tipo de dados que poder armazenar. Os tipos de cada atributo devem ser informados no momento da criao da tabela, mas podem ser alterados posteriormente (como veremos mais adiante). Os tipos de dados mais importantes so descritos na tabela abaixo:
atributo char varchar int float, double date not null auto_increment

t i

nmeros inteiros nmeros fracionrios (ponto flutuante)

caracteres (string) de tamanho fixo caracteres (string) de tamanho varivel

data no formato do mysql (ano-mes-dia) p indica que o atributo no pode ser nulo (deve possuir um valor) o indica que valor do campo ser incrementado automaticamente

51

PHP e MySQL
primary key foreign key text indica que o atributo uma chave primria (identificador nico) indica que o atributo uma chave estrangeira (chave primria de outra tabela) armazena texto (no deve ser do tipo not null)

Atributos definidos como varchar podem ocupar menos espao fsico no servidor, visto que seu tamanho pode variar de acordo com o valor informado. Ex: um campo varchar de 30 caracteres pode ter o tamanho mximo de 30 caracteres, mas se for informado um valor menor, o campo se adaptar ao valor indicado, desde que no exceda o valor mximo indicado. Ao contrrio, atributos do tipo char tem o tamanho fixo. O uso do atributo varchar torna a tabela mais lenta em suas operaes. Campos definidos como not null obrigatoriamente devem receber um valor. Em geral, definido um valor padro atravs do parmetro 'default', que define um valor padro para o campo.

Chave primria e chave estrangeira


As chaves primrias (primary key) so utilizadas para identificar um registro dentro de uma tabela. Ex: A matrcula de cada aluno pode ser utilizada para identific-lo dentro da classe. Colunas definidas como primary key devem obrigatoriamente ser do tipo not null e no podem ter seu valor repetido, afinal, trata-se de um identificador nico para cada elemento cadastrado. Preferencialmente utilizam-se campos numricos para chaves primrias (ex: id, matrcula) ou outro atributo que respeite os argumentos citados. As chaves estrangeiras so usadas quando queremos relacionar tabelas entre si. Ex: Cada aluno cadastrado ser colocado em uma determinada turma. Podemos ter uma tabela chamada turma, com informaes das turmas existentes e uma chave primria para identificar cada turma, assim como na tabela aluno. Ento, s precisamos criar uma terceira
tabela (ex: matriculado), contendo apenas a chave primria que identifica o aluno e a turma

em que ser matriculado. Para a tabela matriculado, esses atributos so chaves estrangeiras, pois no so identificadores da prpria tabela, e sim identificadores pertencentes outras tabelas (da o nome de chaves estrangeiras). Essa tcnica faz com que as pesquisas tornem-se mais eficientes, agiliza o funcionamento do banco de dados, organiza melhor as informaes e possibilita melhor gerenciamento das informaes cadastradas. Veremos o uso de chaves estrangeiras mais adiante.

Criando tabelas
Para a tabela aluno de nosso exemplo, teremos os atributos matricula, nome, email e data de nascimento. Os atributos nome e e-mail sero do tipo varchar de 40 caracteres. Data de nascimento ser do tipo date e a matrcula ser uma chave primria do tipo inteiro. O uso de chaves primrias no obrigatrio no MySQL, mas muito til para aplicaes, como o exemplo anterior. Para montar essa estrutura, o comando create ficar dessa forma:
mysql> create table aluno( -> matricula int not null auto_increment primary key, -> nome varchar(40) not null, -> email varchar(40),

52

PHP e MySQL
-> dataNasc date -> ); Query OK, 0 rows affected (0.02 sec)

Note que cada linha termina com uma vrgula, exceto a ltima linha que antecede o sinal );. Ele indica o fim dos parmetros do comando create. Tudo o que estiver entre estes parnteses far parte da estrutura da tabela aluno. O comando show pode mostrar as tabelas dentro do banco de dados:
mysql> show tables; +-------------------+ | Tables_in_exemplo | +-------------------+ | aluno | +-------------------+ 1 row in set (0.00 sec)

Para averiguar a estrutura da tabela, podemos utilizar o comando desc, que fornecer uma descrio da tabela:
mysql> desc aluno; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | matricula | int(11) | NO | PRI | NULL | auto_increment | | nome | varchar(40) | NO | | | | | email | varchar(40) | YES | | NULL | | | dataNasc | date | YES | | NULL | | +-----------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)

Comando insert
Utilizamos esse comando para inserir dados em uma tabela. Para cadastrarmos um aluno, utilizamos insert e informamos os valores na ordem em que as colunas foram definidas. Para cadastrar um aluno, devemos informar a matrcula, nome, e-mail e data de nascimento nessa ordem, pois como se encontra na tabela. Ex:
mysql> insert into aluno values(null,'Z da feira','feira@localhost','1974-1217'); Query OK, 1 row affected (0.00 sec)

O comando acima insere um novo registro na tabela aluno, informando seu nome, email e data de nascimento. Note que o parmetro relativo sua chave primria foi definido como null. Isso far com que o MySQL numere automaticamente o campo. Por ser o primeiro registro da tabela, ter a matrcula nmero 1. Existem casos em que a insero de dados em uma tabela ocorre apenas em alguns campos especficos. Podemos informar os campos que sero preenchidos, lembrando que todos os campos que so do tipo NOT NULL devem receber um valor obrigatoriamente. Em nosso exemplo, a tabela aluno deve receber obrigatoriamente os valores matricula e nome:
mysql> insert into aluno(matricula,nome) values (null,'maria bonita');

Query OK, 1 row affected (0.01 sec)

Os registros em nossa tabela ficaro dessa forma: 53

PHP e MySQL
+-----------+--------------+-----------------+------------+
| matricula | nome | email | dataNasc | +-----------+--------------+-----------------+------------+ | 1 | Z da feira | feira@localhost | 1974-12-17 | | 2 | maria bonita | NULL | NULL | +-----------+--------------+-----------------+------------+

Note que os campos em que no foram especificados valores receberam o valor padro NULL.

Clusula where
A clusula where adicionada quando queremos que o comando seja executado dentro de uma condio. Essa condio pode ser uma comparao entre valores, uma ocorrncia especial, etc. Podemos utilizar o where dentro dos comandos insert, update, drop, etc. Veremos o where sendo utilizado no comando update:

Comando update
O comando update utilizado para atualizar um registro da tabela. Caso a clusula where no seja informada, todos os registros da tabela sero atualizados com o valor informado:
mysql> update aluno set email='bonita@localhost' where matricula = 2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

No exemplo acima, o comando update ajustou o e-mail para 'bonita@localhost'. A clusula where determina que a atualizao somente deve ocorrer quando o nmero da matrcula for igual a 2. Se essa condio no fosse informada, todos os registros da tabela teriam o e-mail ajustado para 'bonita@localhost':
+-----------+--------------+------------------+------------+ | matricula | nome | email | dataNasc | +-----------+--------------+------------------+------------+ | 1 | Z da feira | feira@localhost | 1974-12-17 | | 2 | maria bonita | bonita@localhost | NULL | +-----------+--------------+------------------+------------+

Comando alter table


Utilzamos para alterar a estrutura de uma tabela. Podemos adicionar (add), ajustar (set), excluir (drop) uma coluna, etc:
mysql> alter table aluno add cidade varchar(100) after dataNasc; Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0

O comando acima altera a tabela aluno, adicionando a coluna endereo, do tipo varchar(100) depois da coluna dataNasc. A estrutura da tabela pode ser vista com o comando desc aluno; :
mysql> desc aluno;

54

PHP e MySQL
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | matricula | int(11) | NO | PRI | NULL | auto_increment | | nome | varchar(40) | NO | | | | | email | varchar(40) | YES | | NULL | | | dataNasc | date | YES | | NULL | | | cidade | varchar(100) | YES | | NULL | | +-----------+--------------+------+-----+---------+----------------+

5 rows in set (0.01 sec)

Vamos agora excluir a coluna cidade:


mysql> alter table aluno drop cidade; Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0

A tabela aluno volta a ter a estrutura anterior:


mysql> desc aluno; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | matricula | int(11) | NO | PRI | NULL | auto_increment | | nome | varchar(40) | NO | | | | | email | varchar(40) | YES | | NULL | | | dataNasc | date | YES | | NULL | | +-----------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)

Comando delete
Utilizado para excluir um registro da tabela. Se aplicado sem a clusula where, elimina todos os registros da tabela:
mysql> delete from aluno where matricula=2; Query OK, 1 row affected (0.00 sec)

Resultado:
+-----------+--------------+-----------------+------------+ | matricula | nome | email | dataNasc | +-----------+--------------+-----------------+------------+ | 1 | Z da feira | feira@localhost | 1974-12-17 | +-----------+--------------+-----------------+------------+

Comando select
Utilizado para realizar pesquisas dentro de uma tabela. Considerado um comando complexo devido a grande gama de combinaes possveis para a realizao da pesquisa. Para auxiliar na compreenso do comando select, alguns registros foram adicionados tabela aluno. Para pesquisarmos todos os registros dentro de uma tabela, a sintaxe :
mysql> select * from aluno; +-----------+--------------------+------------------------+------------+ | matricula | nome | email | dataNasc | +-----------+--------------------+------------------------+------------+ | 1 | Z da Feira | feira@localhost | 1973-12-17 | | 2 | Maria Bonita | bonita@localhost | 1945-05-24 | | 3 | Virgulino Ferreira | lampiao@localhost | 1947-06-19 | | 4 | Getlio Vargas | vargas@localhost | 1910-04-12 | | 5 | Raul Seixas | malucobeleza@localhost | 1957-06-28 |

55

PHP e MySQL
+-----------+--------------------+------------------------+------------+ 5 rows in set (0.00 sec)

O sinal ' * ' diz para o comando select buscar todos os valores da tabela. Podemos especificar uma ou mais colunas para que a pesquisa seja realizada: mysql> select nome,email from aluno;
+--------------------+------------------------+ | nome | email | +--------------------+------------------------+ | Z da Feira | feira@localhost | | Maria Bonita | bonita@localhost | | Virgulino Ferreira | lampiao@localhost | | Getlio Vargas | vargas@localhost | | Raul Seixas | malucobeleza@localhost | +--------------------+------------------------+ 5 rows in set (0.00 sec)

No exemplo acima, foram pesquisados apenas os campos nome e email da tabela aluno, que retornou o nome e e-mail de todos os cadastrados. Podemos utilizar a clusula where para realizar uma busca mais especfica dentro da tabela: mysql> select matricula,nome from aluno where matricula = 3;
+-----------+--------------------+ | matricula | nome | +-----------+--------------------+ | 3 | Virgulino Ferreira | +-----------+--------------------+ 1 row in set (0.00 sec)

Nesse caso, a busca foi feita nas colunas matricula e nome, nos registros cujo nmero de matrcula igual a 3. Podemos tambm ordenar os valores da pesquisa usando a clusula order by:
mysql> select matricula,nome,dataNasc from aluno order by nome; +-----------+--------------------+------------+ | matricula | nome | dataNasc | +-----------+--------------------+------------+ | 4 | Getlio Vargas | 1910-04-12 | | 2 | Maria Bonita | 1945-05-24 | | 5 | Raul Seixas | 1957-06-28 | | 3 | Virgulino Ferreira | 1947-06-19 | | 1 | Z da Feira | 1973-12-17 | +-----------+--------------------+------------+ 5 rows in set (0.00 sec)

Note que os registros pesquisados foram ordenados pelo nome. Podemos tambm ordenar pela data. Independente da coluna utilizada, a ordenao pode ser ascendente (asc) ou descendente (desc):
mysql> select matricula,nome,dataNasc from aluno order by dataNasc asc;

56

PHP e MySQL
+-----------+--------------------+------------+
| matricula | nome | dataNasc | +-----------+--------------------+------------+ | 4 | Getlio Vargas | 1910-04-12 | | 2 | Maria Bonita | 1945-05-24 | | 3 | Virgulino Ferreira | 1947-06-19 | | 5 | Raul Seixas | 1957-06-28 | | 1 | Z da Feira | 1973-12-17 | +-----------+--------------------+------------+

5 rows in set (0.00 sec)

O exemplo acima foi ordenado pela data de nascimento, em ordem ascendente.


mysql> select matricula,nome,dataNasc from aluno order by dataNasc desc; +-----------+--------------------+------------+ | matricula | nome | dataNasc | +-----------+--------------------+------------+ | 1 | Z da Feira | 1973-12-17 | | 5 | Raul Seixas | 1957-06-28 | | 3 | Virgulino Ferreira | 1947-06-19 | | 2 | Maria Bonita | 1945-05-24 | | 4 | Getlio Vargas | 1910-04-12 | +-----------+--------------------+------------+ 5 rows in set (0.00 sec)

Mesmo exemplo, agora com a data em ordem descendente. Em alguns casos, a busca no feita por valores exatos (ex: busca por nome). Existe uma clusula a ser adicionada ao comando select que busca valores idnticos ao fornecido:
a clusula like. O valor buscado pode encontrar-se entre o sinal '%' para que a busca no se

importe com valores que existam antes ou depois do valor buscado. Ex: Vamos adicionar trs registros com nomes idnticos:
mysql> insert into aluno values(null,'Paulo Ricardo','rpm@localhost','1960-0409'); Query OK, 1 row affected (0.00 sec) mysql> insert into aluno values(null,'Paulo Roberto','proberto@localhost','198207-17'); Query OK, 1 row affected (0.00 sec) mysql> insert into aluno values(null,'Pedro Paulo Diniz','diniz@localhost','1979-06-10'); Query OK, 1 row affected (0.00 sec)

Os trs novos registros tm em comum o nome 'Paulo'. Vamos agora realizar uma pesquisa entre os alunos que possuem 'Paulo' no nome:
mysql> select matricula, nome, dataNasc from aluno where nome like '%paulo%'; +-----------+-------------------+------------+ | matricula | nome | dataNasc | +-----------+-------------------+------------+ | 6 | Paulo Ricardo | 1960-04-09 | | 7 | Paulo Roberto | 1982-07-17 | | 8 | Pedro Paulo Diniz | 1979-06-10 | +-----------+-------------------+------------+ 3 rows in set (0.00 sec)

Como o sinal ' % ' foi indicado antes e depois do nome 'paulo', qualquer valor antes ou depois do nome foi ignorado. Se for informado apenas depois do nome, apenas os dois

primeiros registros sero listados: 57

PHP e MySQL mysql> select matricula, nome, dataNasc from aluno where nome like 'paulo%';
mysql> select matricula, nome, dataNasc from aluno where nome like 'paulo%'; +-----------+---------------+------------+ | matricula | nome | dataNasc | +-----------+---------------+------------+ | 6 | Paulo Ricardo | 1960-04-09 | | 7 | Paulo Roberto | 1982-07-17 | +-----------+---------------+------------+ 2 rows in set (0.00 sec)

Chaves estrangeiras
O uso de chaves estrangeiras til para melhor organizao dos dados, evitando
redundncia e facilitando buscas. Ex: Agora, cada aluno deve informar o estado em que

mora. Vamos ento criar uma tabela, onde cadastraremos os estados e relacionaremos cada estado com um aluno, utilizando chaves estrangeiras:
mysql> create table estado( -> uf char(2) not null primary key, -> estado varchar(40) not null -> ); Query OK, 0 rows affected (0.01 sec)

O comando acima cria uma tabela estado com os campos UF e estado. Note que UF uma chave primria, visto que cada estado possui sua prpria sigla. Vamos cadastrar apenas alguns estados nessa tabela:
mysql> insert into estado values('MG','Minas Gerais'); Query OK, 1 row affected (0.00 sec) mysql> insert into estado values('BA','Bahia'); Query OK, 1 row affected (0.00 sec) mysql> insert into estado values('PR','Paran'); Query OK, 1 row affected (0.00 sec) mysql> insert into estado values('CE','Cear'); Query OK, 1 row affected (0.00 sec) mysql> insert into estado values('RS','Rio Grande do Sul'); Query OK, 1 row affected (0.00 sec)

Tipos de tabelas
As tabelas do MySQL possuem tipos. O tipopadro de tabela MyISAM. Todas as tabelas so criadas dessa forma. um tipo de tabela mais rpido, mas que no permite relacionamentos atravs de chaves estrangeiras. Para que este relacionamento possa ser utilizado, i tipo da tabela deve ser innoDB, que um tipo mais lento, mas que trabalha com chaves estrangeiras. O tipo da tabela pode ser informado no momento da criao da tabela, utilizando a clusula engine no final dos atributos:
mysql> create table estado( -> uf char(2) not null primary key, -> estado varchar(40) not null -> )engine=innodb;

Caso a tabela j exista, podemos alter-la:

58

PHP e MySQL
mysql> alter table aluno engine=innodb; Query OK, 8 rows affected (0.15 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> alter table estado engine=innodb; Query OK, 5 rows affected (0.05 sec) Records: 5 Duplicates: 0 Warnings: 0

Agora, vamos alterar a tabela aluno, adicionando o campo estado, onde colocaremos apenas a chave primria que identifica cada estado (nesse caso, uf). Para isso, a nova coluna deve ser ajustada com a clusula foreign key. Primeiramente, vamos criar a coluna estado na tabela aluno:
mysql> alter table aluno add estado char(2); Query OK, 8 rows affected (0.09 sec) Records: 8 Duplicates: 0 Warnings: 0

Agora, vamos defini-la como chave estrangeira que referencia a coluna uf da tabela estado:
mysql> alter table aluno add foreign key(estado) references estado(uf); Query OK, 8 rows affected (0.14 sec) Records: 8 Duplicates: 0 Warnings: 0

Vejamos como ficou a estrutura da tabela aluno:


mysql> desc aluno; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | matricula | int(11) | NO | PRI | NULL | auto_increment | | nome | varchar(40) | NO | | | | | email | varchar(40) | YES | | NULL | | | dataNasc | date | YES | | NULL | | | estado | char(2) | YES | MUL | NULL | | +-----------+-------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)

Agora, vamos atualizar os registros da tabela aluno, informando o estado de cada um:
mysql> update aluno set estado='PR' where matricula=1; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0

O aluno com o nmero de matrcula igual a 1 teve seu estado alterado para PR. Vamos atualizar os demais:
mysql> update aluno set estado='CE' where matricula=2; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update aluno set estado='CE' where matricula=3; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update aluno set estado='RS' where matricula=4; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update aluno set estado='BA' where matricula=5; Query OK, 1 row affected (0.02 sec)

59

PHP e MySQL
Rows matched: 1 Changed: 1 Warnings: 0 mysql> update aluno set estado='PR' where matricula=6; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='MG' where matricula=7;

Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='MG' where matricula=8;

Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0

Vejamos como ficou o registro dos alunos:


mysql> select * from aluno; +-----------+--------------------+------------------------+------------+-------+
| matricula | nome | email | dataNasc | estado| +-----------+--------------------+------------------------+------------+-------+ | 1 | Z da Feira |feira@localhost | 1973-12-17 | PR | | 2 | Maria Bonita | bonita@localhost | 1945-05-24 | CE | | 3 | Virgulino Ferreira | lampiao@localhost | 1947-06-19 | CE | 4 | Getlio Vargas | vargas@localhost | 1910-04-12 | RS | | 5 | Raul Seixas | malucobeleza@localhost | 1957-06-28 | BA | 6 | Paulo Ricardo | rpm@localhost | 1960-04-09 | PR | | 7 | Paulo Roberto | proberto@localhost | 1982-07-17 | MG | 8 | Pedro Paulo Diniz | diniz@localhost | 1979-06-10 | MG +-----------+--------------------+------------------------+------------+-------+

| | | |

8 rows in set (0.00 sec)

Relacionando tabelas Agora que temos a chave estrangeira definida, podemos listar o nome do estado ao qual pertence cada aluno, referenciando a chave estrangeira da tabela. Ex: Vamos selecionar todos os alunos de Minas Gerais:
mysql> select aluno.nome, estado.estado from aluno, estado where estado.uf = aluno.estado and estado.uf='MG'; +-------------------+--------------+ | nome | estado | +-------------------+--------------+ | Paulo Roberto | Minas Gerais | | Pedro Paulo Diniz | Minas Gerais | +-------------------+--------------+ 2 rows in set (0.05 sec)

A pesquisa utiliza um select que busca informaes nas duas tabelas (aluno e estado), obtendo valor da coluna nome da tabela aluno (aluno.nome) e o valor do campo estado da tabela estado (estado.estado). O segredo est na condio where: A pesquisa retornar os resultados em que o campo estado da tabela aluno seja igual ao campo estado da tabela estado (aluno.estado = estado.uf) e a UF do estado seja MG (estado.uf = MG). Dessa forma no precisamos armazenar os nomes dos estados mais de uma vez. Caso haja uma mudana no nome dos estados, essa informao facilmente atualizada.

Relacionamentos entre tabelas


Tabelas de um banco de dados podem ser comparadas a conjuntos. Esses conjuntos 60

PHP e MySQL (tabelas) podem ser relacionados de trs formas: 1. Um para um: Ocorre quando cada elemento da primeira tabela est relacionado com apenas um elemento da segunda tabela. ex: Um livro somente pode ser publicado por uma editora, portanto, a relao entre livro e editora de um para um; 2. Um para muitos (muitos para um): Ocorre quando um elemento da primeira tabela est relacionado a mais de um elemento da segunda tabela. Ex: Um funcionrio trabalha apenas em uma empresa, porm, uma empresa pode ter vrios funcionrios. O relacionamento entre funcionrio e empresa de muitos para um (um para muitos); 3. Muitos para muitos: Ocorre quando muitos elementos da primeira tabela se relacionam com muitos elementos da segunda tabela. o caso de nosso exemplo, pois um aluno pode realizar mais de um curso ao mesmo tempo, enquanto uma turma, obrigatoriamente possui muitos alunos. A relao entre aluno e turma de muitos para muitos. No banco de dados, as relaes de um para muitos so resolvidas com chaves estrangeiras. A tabela que ter seus atributos repetidos recebe uma chave primria e a fornece como identificador para a outra tabela, como chave estrangeira. Os casos de relacionamento de muitos para muitos no so to facilmente representados, exigindo a criao de uma terceira tabela, que relacionar as duas tabelas onde ocorrem esse relacionamento. Ex: Poderamos criar uma tabela, onde cadastraramos
os cursos oferecidos pela instituio. Um curso deve ter mais de um aluno e um aluno pode fazer mais de um curso. Neste caso, h um relacionamento de muitos para muitos, onde h

a necessidade da criao de uma tabela intermediria, para que possa haver um relacionamento entre os alunos matriculados e os respectivos cursos que freqentam. Essa tabela poderia conter apenas as chaves primrias das tabelas aluno e curso, realizando assim o relacionamento entre ambos.

Configurando usurios no MySQL


At agora, todas as operaes no banco de dados foram realizadas utilizando o usurio root do mysql. Acessar o banco de dados como root uma pssima idia do ponto de vista da segurana. O usurio root tem acesso e permisso de leitura e escrita em qualquer arquivo dentro do servidor. Escrever scripts onde o acesso ao banco de dados feito atravs do root abrir as portas para usurios mal intencionados no servidor. Para evitar que pessoas no autorizadas tenham acesso ao seu banco de dados, devemos criar outro usurio para o mysql e garantir que ele no ter os mesmos privilgios do root.

Sistema de privilgios
Podemos dizer que, para que um usurio possa realizar qualquer operao dentro de

um banco de dados, necessrio que ele tenha permisso (privilgio) para isso. Cada operao (insert, update, delete, drop,...) uma operao diferente e o usurio precisa ter permisso para execut-las. O MySQL (assim como outros SGBD's) permite que gerenciemos esses privilgios, escolhendo assim quais operaes podero ser realizadas 61

PHP e MySQL pelo novo usurio. Podemos tambm determinar os bancos de dados, tabelas e at as colunas em que esse usurio poder atuar.

Concedendo privilgios comando GRANT


O comando grant responsvel pela criao do novo usurio, bem como a concesso de privilgios ao mesmo. Atravs deste comando, configuramos um novo usurio para o MySQL, descrevemos quais sero seus privilgios e quais bancos de dados, tabelas e colunas em que ele ter permisso de atuar. Sua sintaxe :
grant privilgios identified by 'senha' ]; on (banco.tabela | tabela.coluna) to usuario@servidor [

Note que podemos configurar uma senha de acesso para o novo usurio utilizando esse comando. Ex: Vamos criar um usurio que ter todos os privilgios sobre o banco de dados projeto:
grant all privileges on projeto.* to testes@localhost identified by 'senha123';

O parmetro all privileges indica que o usurio ter todos os privilgios concedidos. projeto.* indica que estes privilgios sero concedidos para serem utilizados no banco de dados projeto, em qualquer tabela pertencente a este banco. testes@localhost indica que o nome do novo usurio testes, e que o mesmo tem acesso apenas ao servidor localhost. Se informssemos o smbolo '%' no lugar de localhost, indicaramos que o usurio testes teria acesso a qualquer servidor em que o MySQL atua. Em identified by 'senha123', configuramos a senha de acesso para esse usurio. Caso queiramos revogar os privilgios do usurio, utilizaremos o comando revoke:
revoke all privileges to testes@localhost;

Note que no precisamos informar a senha do usurio que ter os privilgios revogados. Esse comando revoga todos os privilgios do usurio testes, concedidos anteriormente. Para uma maior segurana, devemos conceder o mnimo possvel de privilgios a um usurio. Vamos conceder ao usurio testes, os privilgios select, insert, update e delete:
grant select, insert, update, delete on projeto.* to testes@localhost identified by 'senha123';

Isso faz com que o usurio testes possua apenas os privilgios citados. Alm disso, nosso usurio ter acesso apenas ao banco de dados projeto.

Conectando-se ao MySQL com o PHP

Como foi mencionado anteriormente, o banco de dados MySQL foi desenvolvido para ser utilizado em conjunto com o PHP. O MySQL um banco de dados nativo da linguagem. Apesar disso, o PHP tambm pode ser utilizado com outros bancos de dados, assim como o MySQL pode ser acessado por outras linguagens CGI (ex: C++, Perl, Python, Ruby, etc). Para que o PHP possa acessar o banco de dados MySQL, devemos utilizar funes especficas para conexo ao banco de dados.

62

PHP e MySQL

Conexo
Para conectarmos ao MySQL, utilizamos a funo mysql_connect(), que possui a seguinte sintaxe:
mysql_connect(servidor,usuario,senha);

servidor: endereo do servidor do banco de dados (caso seja sua prpria mquina, o endereo localhost ou 127.0.0.1); usuario: nome de usurio utilizado para acessar o banco de dados; senha: senha do usurio que far a conexo; Esse comando retorna um identificador para a conexo (ponteiro) em caso de sucesso, ou false em caso de falha. Este ponteiro pode ser armazenado dentro de uma varivel PHP para utilizao posterior (ex: para fechar a conexo). Ex: para nos conectarmos ao banco de dados projeto como usurio testes:
$con = mysql_connect('localhost','testes','senha123');

A varivel $con receber o identificador da conexo, que poderemos utilizar para identific-la quando necessrio. Feita a conexo, devemos selecionar o banco de dados no qual deveremos trabalhar. Voc pode passar o nome do banco de dados como quarto parmetro da conexo ou utilizar a funo mysql_select_db() para isso:
mysql_select_db($projeto);

Executando query's SQL


Os comando SQL (query) podem ser executadas atravs da funo mysql_query(). Ela recebe uma query como parmetro e (opcionalmente) o identificador da conexo. Isso muito til em caso de aplicaes que conectam-se a mais de um banco de dados ao mesmo tempo. Essa funo retorna o resultado da execuo da query. Ex: para executar um select na tabela cliente:
$res = mysql_query(select * from cliente;);

O resultado da busca (select) ficar armazenado na varivel $res, e poder ser manipulado mais adiante. Para melhor exemplificarmos, vamos utilizar a tabela cliente, com a seguinte estrutura:
+--------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | nome | varchar(80) | NO | | | | | email | varchar(50) | YES | | NULL | | | estado | char(2) | NO | | | | +--------+-------------+------+-----+---------+----------------+

Voc tambm pode armazenar a query em uma varivel e us-la como parmetro para a funo mysql_query(). Isso muito til em casos em que necessrio a criao de

query's dinmicas. Ex: Se o usurio pede para que o resultado da busca na tabela clientes seja ordenado pelo nome dos clientes:
$query = select * from cliente;

63

PHP e MySQL
if($ordenar==true) $query .= order by nome; $query .= ;; $busca = mysql_query(query);

No exemplo acima, se a varivel $ordenar for verdadeira, o parmetro order by nome, adicionado query, para que o resultado seja ordenado por nome.

Organizando os dados da consulta


Quando executamos um select no banco de dados, todas as informaes ficam contidas dentro de uma varivel (no exemplo acima, o resultado da pesquisa fica todo armazenado na varivel $busca). Para que o resultado seja exibido, necessrio que ele seja organizado.

Retornando o nmero de linhas


Quando efetuamos uma pesquisa, uma determinada quantidade de resultados obtida. No nosso exemplo, a busca select * from cliente retornar como resultado todas as informaes de todos os clientes cadastrados. O MySQL (e outros SGBD's) retornam o nmero de linhas encontradas em uma pesquisa. Como vimos anteriormente, cada linha representa um registro, portanto, no exemplo acima, a quantidade de linhas retornadas na pesquisa ser a quantidade de clientes cadastrados no banco. Para descobrirmos a quantidade de linhas retornadas, utilizamos a funo mysql_num_rows(), que recebe a varivel que contm o resultado da query como padro. Essa funo retorna um valor inteiro, que pode ser armazenado dentro de outra varivel e utilizado para informar o nmero de clientes encontrados. Ex:
$num_clientes = mysql_num_rows($busca);

Se tivermos 7 clientes cadastrados, a varivel $num_clientes receber o valor 7. Este valor utilizado na exibio de resultados, como valor de controle para uma estrutura de repetio. Assim, podemos fazer com que a estrutura de repetio (em geral, um for) mostre todos os resultados obtidos na pesquisa. Assim, para exibir todos os resultados, teramos um cdigo semelhante a este:
$busca = mysql_query("select * from cliente")or die("no faz pesquisa"); $num_busca = mysql_num_rows($busca)or die("no retorna num. de buscas feitas"); for($i=0;$i<$num_busca;$i++){ /*mostra os resultados*/ }

Em alguns casos, queremos executar alteraes nos registros da tabela (ex: alterar o endereo de um cliente ou exclu-lo) e precisamos saber quantos registros foram afetados com a execuo da query. Para isso, utilizamos a funo mysql_affected_rows(), que retorna o nmero de registros afetados pela execuo da query. Ex: Vamos atualizar o estado dos clientes para 'SC':

$query = " update cliente set estado='SC' ; "; $alt = mysql_query($query); $num_alt = mysql_affected_rows($con)or die("nao mostrou linhas afetadas"); echo "$num_alt linhas afetadas<br>";

Ser exibida uma mensagem, informando o nmero de linhas afetadas, ou seja, o nmero de registros que foram alterados com a query. 64

PHP e MySQL Aps obtermos o nmero de linhas retornadas, podemos formatar os dados para exibio. Para isso, devemos organizar os dados obtidos na pesquisa que esto dentro da varivel $busca. Para realizar esta tarefa, podemos utilizar 3 funes diferentes: A primeira a funo mysql_fetch_row(), que recebe a varivel que contm o resultado da pesquisa e retorna o resultado em forma de linha. Para acessar os dados, devemos informar o nmero da linha correspondente. Ex:
$busca = mysql_query("select * from cliente")or die("no faz pesquisa"); $num_busca = mysql_num_rows($busca)or die("no retorna num. de buscas feitas"); for($i=0;$i<$num_busca;$i++){ $resultado = mysql_fetch_row($busca); echo $resultado[0]; echo $resultado[1]; echo $resultado[2]; echo $resultado[3].<br>"; }

Os resultados da busca foram organizados em linhas. Cada linha representa uma coluna da tabela. A varivel $resultado[0] contm o id do cliente, $resultado[1] o nome, $resultado[2] seu e-mail e resultado[4] seu estado. Outra forma de organizarmos os resultados obtidos utilizando a funo mysql_fetch_array(), que retorna o resultado da pesquisa como um vetor. Para uma melhor organizao, podemos acrescentar o parmetro MYSQL_ASSOC, que faz com que os resultados sejam organizados em um array associativo, permitindo um melhor acesso e controle na exibio dos dados. Ex:
for($i=0;$i<$num_busca;$i++){ $resultado = mysql_fetch_array($busca,MYSQL_ASSOC); echo $resultado['id']; echo $resultado['nome']; echo $resultado['email']; echo $resultado['estado']."<br>"; }

Isso permite que os dados sejam acessados conforme o nome das colunas da tabela. A terceira forma de organizao dos dados utilizando a funo
mysql_fetch_object(), que retorna o resultado como um objeto (O conceito de orientao a

objetos ser visto mais adiante).:


for($i=0;$i<$num_busca;$i++){ $resultado = mysql_fetch_object($busca); echo $resultado->id; echo $resultado->nome; echo $resultado->email; echo $resultado->estado."<br>"; }

Fechando a conexo
A funo responsvel pelo fechamento da conexo com o banco de dados mysql_close(). Essa funo recebe o ponteiro da conexo como parmetro. Ex:
mysql_close($con);

Esse comando ir fechar a conexo iniciada anteriormente em nosso exemplo.

Isso 65

PHP e MySQL reduz o nmero de conexes ativas no servidor. Bancos de dados em geral aceitam um nmero limitado de conexes simultneas. A utilizao da funo mysql_close() libera recursos do servidor para novas conexes, permitindo maior eficincia da aplicao.

Aplicaes em PHP e MySQL


At agora, vimos como o banco de dados MySQL pode ser utilizado com o PHP em exemplos simples e isolados. Agora, vamos construir pequenas aplicaes utilizando essas poderosas ferramentas, a fim de compreendermos melhor seu funcionamento. Para a construo de nossas aplicaes, vamos utilizar a tabela cliente, que est contida no banco de dados projeto. Vamos tambm criar o usurio 'user', com a senha 'senha123' e conceder a ele os privilgios select, insert,update e delete para o banco. Os exemplos apresentados aqui so apenas scripts independentes. Os cdigos estaro comentados para melhor compreenso. Para a construo de uma aplicao completa, os mdulos devero ser integrados, mas por questo didtica, veremos o funcionamento de cada mdulo separadamente. Vamos construir os mdulos de cadastro, alterao, pesquisa e excluso, para isso, Digite os seguintes comandos no terminal do MySQL:
//conectando-se ao banco de dados mysql -u root -p //criando o banco de dados projeto create database projeto; //selecionando o banco projeto use projeto; //criando a tabela cliente create table cliente( id int not null auto_increment primary key, nome varchar(80) not null, email varchar(80) not null, estado char(2) not null )engine=innoDB; //configurando o usurio do banco grant select,insert,update,delete on projeto.* to user@localhost identified by 'senha123';

Precisaremos acessar o banco de dados constantemente e informarmos os parmetros necessrios para a conexo. Para facilitar nosso trabalho, vamos escrever o seguinte cdigo:
<?php $servidor = 'localhost'; $usuario = 'teste'; $senha = 'senha123'; $banco = 'projeto'; $con = mysql_connect($servidor,$usuario,$senha); mysql_select_db($banco); ?>

Salve-o como mysqlconfig.inc (inc de include). Esse script ser chamado toda vez que precisarmos nos conectar ao banco de dados.

66

PHP e MySQL

Mdulo de cadastro
Agora que temos o banco de dados devidamente montado e configurado, vamos criar a primeira parte da aplicao. Precisaremos de um formulrio HTML para que o usurio possa digitar os dados:
<html> <head> <title>Cadastro</title> </head> <body> <form method="POST" action="cadastrar.php"> <p align="center">Nome: <input name="nome" type="text"></p> <p align="center">E-mail: <input name="email" type="text"></p> <p align="center">Estado (UF): <input name="estado" size="2" type="text"></p> <p align="center"><input value="salvar" type="submit"></p> </form> </body> </html>

Salve-o como cadastrar.html. Agora vamos escrever o script que ir gravar as informaes no banco de dados (cadastrar.php):
<?php //captura as informaes enviadas pelo formulrio $nome = $_POST['nome']; $email = $_POST['email']; $estado = $_POST['estado']; //conecta-se ao banco de dados include("mysqlconfig.inc"); //monta a query que ir gravar as informaes $query = "insert into cliente values(null,'$nome','$email','$estado'); "; //grava as informaes $grava = mysql_query($query); //conta o nmero de colunas afetadas. Se for 1, a gravao foi efetuada $num_linha = mysql_affected_rows($grava); if($num_linha == 1) echo "Cadastro Efetuado com sucesso<br>"; //link para a pgina anterior echo "< a href='javascript:history.back()'>voltar</a>"; //fecha a conexo mysql_close($con); ?>

O script exibir uma mensagem, caso o cadastro seja efetuado com sucesso.

Mdulo de excluso
Este mdulo muito simples. Criaremos um formulrio, onde informaremos o cdigo do cliente a ser excludo e um script que exclui este cliente. Vamos comear pelo formulrio:
<html> <head>

67

PHP e MySQL
<title>Excluir</title> </head> <body> <form method="POST" action="excluir.php"> <p align="center">Cdigo: <input type="text" name="id" size="3"></p> <p align="center"><input type="submit" value="Excluir"> </form> </body> </html>

Salve-o como excluir.html. Agora, vamos criar os script que ir realizar a excluso do usurio:
<?php //captura id do formulrio $id = $_POST['id']; //converte formato para inteiro $id = intval($id); //realiza a conexo com o banco de dados include("mysqlconfig.inc"); //monta a query de excluso $query = "delete from cliente where id='$id'; "; //executa a query $res = mysql_query($query); //conta o nmero de registros afetados $num_exclui = mysql_affected_rows($res); //caso um registro tenha sido excludo, exibe mensagem if($num_exclui == 1) echo "Cliente excludo com sucesso<br>"; //link para a pgina anterior echo "< a href='javascript:history.back()'>voltar</a>"; //fecha a conexo mysql_close($con); ?>

Salve-o como excluir.php.

Mdulo de pesquisa parte 1


Este mdulo ser relativamente simples. Vamos fazer apenas com que ele liste os clientes cadastrados no banco de dados. Este script deve ser salvo como lista.php:

<?php //conecta-se ao banco de dados include("mysqlconfig.inc"); //monta a query de busca

68

PHP e MySQL
$query = "select * from cliente; "; //executa a query $res = mysql_query($query); //conta o nmero de registros encontrados na pesquisa $num_reg = mysql_num_rows($res); //monta uma tabela para organizar os dados echo "<table border='0' cellpadding='1' cellspacing='1'> "; //cria um for para a exibio dos dados for($i=0;$i<$num_reg;$i++){ //formata resultado para exibio $mostra = mysql_fetch_array($res); echo "<tr>"; //exibe os resultados echo "<td> $mostra['id'] </td>"; echo "<td> $mostra['nome'] </td>"; echo "<td> $mostra['email'] </td>"; echo "<td> $mostra['estado'] </td>"; echo "</tr>"; } //encerra a tabela echo "</table>"; //informa a quantidade de registros encontrados echo $num_reg encontrados<br>; //encerra a conexo mysql_close($con); ?>

Esse script monta uma tabela e exibe todos os registros encontrados na tabela cliente.

Mdulo de pesquisa parte 2


Agora, vamos criar um formulrio, onde o usurio informar um nome a ser pesuisado na tabela cliente. Vamos comear com o formulrio onde o usurio informar o nome:
<html> <head> <title>Buscar</title> </head> <body> <form method="POST" action="buscar.php"> <p align="center">Nome: <input type="text" name="nome" size="30"></p> <p align="center"><input type="submit" value="Buscar"> </form> </body> </html>

Salve-o como buscar.html. O nome informado neste formulrio ser colocado na 69

PHP e MySQL query de pesquisa do script buscar.php, que ir listar todos os clientes registrados no banco com o nome igual ou idntico ao informado:
<?php //captura o nome informado no formulrio $nome = $_POST['nome']; //conecta-se ao banco de dados include("mysqlconfig.inc"); //monta a query de busca, inserindo o nome como parmetro $query = "select * from cliente where nome like'%'$nome'%'; "; //executa a query $res = mysql_query($query); //conta o nmero de registros encontrados na pesquisa $num_reg = mysql_num_rows($res); //monta uma tabela para organizar os dados echo "<table border='0' cellpadding='1' cellspacing='1'> "; //cria um for para a exibio dos dados for($i=0;$i<$num_reg;$i++){ //formata resultado para exibio $mostra = mysql_fetch_array($res); echo "<tr>"; //exibe os resultados echo "<td> $mostra['id'] </td>"; echo "<td> $mostra['nome'] </td>"; echo "<td> $mostra['email'] </td>"; echo "<td> $mostra['estado'] </td>"; echo "</tr>"; } //encerra a tabela echo "</table>"; //encerra a conexo mysql_close($con); ?>

Note que este script semelhante ao anterior, porm, o nome informado no formulrio de busca colocado como parmetro na query que executada. O parmetro like indica que a busca deve ser feita com valores idnticos, ou seja, se o usurio informar o nome Paulo, todos os clientes com onome de Paulo sero listados.

Mdulo de alterao
O mdulo de alterao exige que seja dividido em 3 partes: Na primeira parte, um formulrio html, onde informaremos o cdigo (id) do cliente que ser alterado. Na segunda parte, um script PHP que exibe as informaes do cliente e um boto de confirmao. Na terceira parte, o script que executa a alterao dos dados do cliente. Vamos comear

com o formulrio html, onde o usurio informar o id do cliente a ser alterado: 70

PHP e MySQL

<html> <head> <title>Alterar</title> </head> <body> <form method="POST" action="exibir.php"> <p align="center">Nome: <input type="text" name="id" size="3"></p> <p align="center"><input type="submit" value="Exibir"> </form> </body> </html>

O cdigo informado neste formulrio ser enviado para o script exibir.php, que ir mostrar os dados do cliente. Ele conter um formulrio idntico ao de cadastro, porm, o atributo value das tag's far com que os valores j existentes sejam mostrados dentro dos campos:
<?php //captura o cdigo informado no formulrio $id = $_POST['id']; //conecta-se ao banco de dados include("mysqlconfig.inc"); //monta a query de busca, inserindo o id como parmetro $query = "select * from cliente where id='$id'; "; //executa a query $res = mysql_query($query); //formata resultado para exibio $mostra = mysql_fetch_array($res); //monta o formulrio para exibio, que leva os dados //para o script de gravao echo "<form method='POST' action='salvar.php'>"; //exibe os resultados. O html ser exibido fora do PHP ?> <p align='center'>Cdigo: <?php echo $mostra['id'] ?> </p> <p align='center'>Nome: <input type='text' name='nome' value='<?php echo $mostra['nome']; ?> '> </p> <p align='center'>E-mail: <input type='text' name='email' value='<?php echo $mostra['email']; ?> '> </p> <p align='center'>Estado:

71

PHP e MySQL
<input type='text' name='estado' value='<?php echo $mostra['estado']; ?>' size='2'> </p> <p align='center'> <input type='submit' value='Salvar'> </p> </form> <?php //encerra a conexo mysql_close($con); ?>

Os dados do cliente so exibidos dentro das tag's do formulrio (com exceo do id, que deve permanecer o mesmo). Este mesmo formulrio que est exibindo as informaes do cliente est direcionado para um script chamado salvar.php. Podemos fazer as alteraes necessrias nos dados que esto sendo exibidos neste script e ento, quando clicarmos no boto Salvar, os novos dados (e os antigos, isto , que no foram alterados) sero enviados para o script salvar.php, que ir realizar a efetiva gravao dos dados:
<?php //captura o cdigo informado no formulrio $id = $_POST['id']; $nome = $_POST['nome']; $email = $_POST['email']; $estado = $_POST['estado']; //converte para inteiro $id = (integer) $id; //conecta-se ao banco de dados include("mysqlconfig.inc"); //monta a query de alterao $query = "update cliente set nome='$nome', email='$email', estado='$estado' where id='$id'; "; //executa a query $res = mysql_query($query); //conta o nmero de colunas alteradas. Se for 1, a alterao foi efetuada com sucesso $num_alt = mysql_affected_rows($res); if($num_alt == 1) echo "Alterao efetuada com sucesso!!!<br>"; //encerra a conexo mysql_close($con); ?>

Note que, conforme foi especificado na query, os dados sero alterados enquanto o id do cliente for igual ao id fornecido, ou seja, isso garante que apenas o cliente em questo ter seus dados alterados.

72

PHP e MySQL

Cookies e Sesses - Autenticao Cookies


Voc j deve ter vivido essa situao: Voc acessa seu perfil em um site de relacionamentos e navega por ele por algum tempo. Depois voc fecha seu navegador para terminar um trabalho que deixou para trs. Logo depois, voc entra naquele site de relacionamentos novamente e, qual a sua surpresa quando percebe que o site j abre diretamente em seu perfil, sem que voc precise digitar seu nome de login e sua senha novamente. Ento voc se pergunta: Como isso possvel?. A resposta est, primeiramente nos cookies. Eles so pequenos arquivos de texto que o prprio PHP grava em sua mquina, com informaes relevantes para a aplicao (ex: seu login e sua senha, para que no tenha que logar-se novamente). Gravar um cookie uma tarefa muito simples, necessrio apenas o uso da seguinte funo:
setcookie(nomedocookie,valor a ser gravado);

Ex: vamos gravar um cookie contendo a data atual:


$datadehoje = date(d-m-Y); setcookie(datadehoje,$datadehoje);

Este cookie agora est gravado na mquina do usurio, e contm uma string com a data atual. Todos os cookies podem ser acessados atravs do array superglobal $_COOKIE[] da seguinte forma:
$datadehoje = $_COOKIE['datadehoje'];

Para que um cookie seja excludo, basta utilizar novamente a funo setcookie(), porm sem nenhum valor como contedo:
setcookie(datadehoje);

Isso far com que o cookie seja apagado. O uso de cookies pode parecer uma boa prtica a princpio, mas em muitos casos, os usurios configuram os navegadores para no aceitarem cookies, o que dificulta a implementao dos mesmos.

Sesses
Uma alternativa ao uso de cookies o uso de sesses. Seu uso idntico ao dos cookies, porm, os dados no ficam gravados no computador do usurio. Qualquer navegador aceita sesso, por isso torna-se uma boa prtica criar autenticao utilizando seses. Para criar uma sesso, devemos adicionar em nossos scripts PHP a funo session_start(). Recomenda-se que ela esteja nas primeiras linhas do script, antes de qualquer processamento:
<?php session_start(); ?>

Para registrar uma sesso, podemos inserir dados diretamente no array superglobal $_SESSION[], da seguinte forma:
<?php

session_start(); $_SESSION['login'] = $login; ?>

73

PHP e MySQL O exemplo acima configura a varivel de sesso login com o valor contido na varivel $login. Tambm podemos utilizar a funo session_register() para registrar uma varivel de sesso:
<?php session_start(); session_register(administrador); ?>

Dessa forma, registramos uma varivel de sesso administrador. Para verificar se uma varivel de sesso est registrada, podemos utilizar a funo session_is_registered(), que verifica se a varivel (passada como parmetro est registrada:
<?php session_start(); if(session_is_registered(administrador) ) echo varivel registrada<br>; else echo varivel no est registrada<br>; ?>

Outra forma de verificarmos se uma varivel de sesso est registrada adicionando seu contedo a uma varivel do PHP e ento conferindo seu contedo, atravs da funo isset(), que verifica se uma varivel est registrada:
<?php session_start(); $login = $_SESSION['administrador']; if(isset($login)) echo varivel registrada<br>; else echo varivel no registrada<br>; ?>

Para excluir o contedo de uma varivel de sesso, utilizamos a funo unset():


<?php session_start(); unset($_SESSION['login']); ?>

Isso faz com que o valor da varivel de sesso login seja removido. Quando o usurio deixa o site ou decide fazer logout e continuar navegando, deve-se ento desregistrar as variveis de sesso do usurio e destruir a sesso iniciada por ele. Isso pode ser feito utilizando a funo session_destroy(), que elimina todas as variveis de sesso registradas. Dessa forma, o script para logout ficaria da seguinte forma:
<?php session_start(); $_SESSION = array(); session_destroy(); ?>

Note que inserimos dentro do array $_SESSION[] um array completamente vazio. Isso faz com que todas as variveis de sesso fiquem em branco. Em seguida, a

sesso destruda com a funo session_destroy(). Vamos criar um formulrio de login para nosso site. Para isso, vamos utilizar uma nova tabela, chamada usuario. Esta tabela conter um nome para login e uma senha. Vamos criar a tabela no banco de dados: 74

PHP e MySQL
mysql -u root -p use projeto create table usuario( login char(30) not null primary key, senha char(20) not null );

Agora vamos criar a pgina de cadastro para os novos usurios:


<html> <head> <title>Cadastro de Usurios</title> </head> <body> <form method=POST action=usuario.php> <p align='center'>Login: <input type=text name=login size=20></p>
<p align='center'>Senha: <input type=text name=senha size=20></p>

<p align='center'><input type=submit value=Cadastrar></p> </form> </body></html>

Montado o formulrio de cadastro, vamos criar o script PHP que ir gravar as informaes:
<?php //recebe as variveis do formulrio $login = $_POST['login']; $senha = $_POST['senha']; //conecta-se ao banco de dados include mysqlconfig.inc; //monta a query de gravao $query = insert into usuario values('$login','$senha'); ; //grava os dados mysql_query($query); /* aqui, coloque um link que direcione o usurio para a pgina principal do site, ou utilize a funo header para lev-lo diretamente para a pgina principal vamos considerar que a pgina principal do nosso site seja meusite.php: */ //direciona o usurio para a pgina de login header(Location: login.html); //fecha a conexo mysql_close($con); ?>

Salve-o como usuario.php. Ele ir gravar as informaes dos novos usurios na tabela usuario, em nosso banco de dados. Vamos agora criar a pgina e o script de login, onde o usurio informar os dados e, se o usurio existir, as variveis de sesso sero criadas. Vamos comear com o formulrio de login:
<html> <head> <title>Login</title> </head>

75

PHP e MySQL
<body> <form method=POST action=login.php> <p align='center'>Login: <input type=text name=login size=20></p>
<p align='center'>Senha: <input type=text name=senha size=20></p>

<p align='center'><input type=submit value=Entrar></p> </form> </body></html>

Agora, vamos criar o script login.php que ir efeturar o registro das variveis de sesso, que iro determinar que o usurio est registrado no site:
<?php //recebe as variveis do formulrio $login = $_POST['login']; $senha = $_POST['senha']; //conecta-se ao banco de dados include mysqlconfig.inc; //query queseleciona o usurio correspondente ao login e senha informados $query = select login,senha from usuario where login='$login' and senha='$senha'; ; //executa query $res = mysql_query($query); //verifica se query retornou resultados $num_linha = mysql_num_rows($res); //se retornou resultado, usurio existe, ento, registra-o if($num_linha > 0){ session_start(); $_SESSION['usuario'] = $login; //usurio direcionado para pgina principal header(Location: meusite.php); }else{ //caso login seja invlido echo usurio no existe<br>; //link redireciona para a pgina login.html echo <a href='login.html'>Voltar</a>; } ?>

Caso o usurio esteja cadastrado no banco de dados, seu login armazenado numa varivel de sesso chamada 'usuario'. Agora, podemos determinar se o usurio est logado no site apenas verificando a varivel de sesso. Vamos criar um script que verifique a varivel:
<?php session_start(); if( !session_is_registered(usuario) ){ echo Efetue o login no site:<br>; ehco <a href='login.html'>Login</a>; } ?>

Vamos salv-lo como verifica_sessao.php. Esse script simples verifica se a varivel de sesso usuario est registrada. Se no estiver, mostra o link para a pgina de login do site. Dessa forma, se quisermos proteger pginas de nosso site, basta adicionar uma chamada

76

PHP e MySQL ao script no incio da pgina. Se o usurio no estiver registrado, no poder ver o contedo da pgina:
<?php include verifica_sessao.php; ... ?>

Para que a nossa aplicao torne-se completa, devemos oferecer um link para que o usurio possa efetuar logout no site. Basta criar um link direcionado para o script logout.php, mostrado anteriormente. Para aumentar a segurana, podemos utilizar criptografia para a senha. A criptografia um recurso que transforma a string em um cdigo difcil de ser interpretado pelo ser humano. Uma das funes que podemos utilizar para isso a funo crypt(), do prprio PHP. Essa funo recebe como parmetro, a string que ser criptografada e um conjunto de dois caracteres para serem utilizados como base para a criao da string criptografada. Sua sintaxe : crypt(caracteres, string_para_criptografar); Ex: para criptografar a senha informada pelo usurio: $senha = $_POST['senha']; $senha = crypt(wh,$senha); A funo crypt usar as letras wh como base e ir criptografar a senha. Caso o usurio tenha informado a senha como abacate, o resultado seria: abUpSjlq7OP6c . Depois de criptografada, o processo no pode ser revertido. Para conferir se a senha do usurio est correta, informada pelo usurio no momento do login tambm deve ser criptografada e ento as duas so conferidas. A palavra abacate sempre ter o valor abUpSjlq7OP6c se as letras wh forem informadas no momento da criptografia. Para garantir que o processo no apresentar erros, a string que ser criptografada no dever conter espaos em branco, pois a funo no os criptografa.

PHP Orientado a Objetos


O conceito de orientao a objetos tem sido adotado por muitos programadores e linguagens de programao em virtude de sua flexibilidade, capacidade de reaproveitamento do cdigo e facilidade de manuteno. Este novo paradigma tem como princpio a representao de objetos do mundo real em forma de linguagem de programao. Cada componente do programa tratado como um objeto, com suas caractersticas e funcionalidades, dentro de um conceito muito prximo ao mundo real.

Principais componentes Classes, atributos e mtodos

So como moldes utilizados para a criao de objetos. Uma classe contm um conjunto de atributos (variveis) e mtodos (funes) determinados pelo programador para 77

PHP e MySQL compor um devido objeto. As classes devem ser criadas conforme os objetos do mundo real que necessitamos representar. Ex: Vamos implementar a classe automvel: Para representar um pssaro em linguagem de programao, devemos primeiramente observar seus atributos e mtodos. Alguns atributos de um automvel so: marca, modelo, ano de fabricao, combustvel, nmero de marchas, etc. Perceba que os atributos so caractersticas comuns a todos os automveis. As
classes devem, preferencialmente possuir caractersticas genricas em relao ao objeto que

ser representado. A classe automvel tambm deve possuir mtodos. Mtodos so funes que permitem que uma ao seja realizada pelo objeto. Alguns mtodos de um automvel (o que um automvel pode fazer): ligar, desligar, acelerar, freiar, trocar de marcha, etc. Agora que temos uma pequena descrio de um automvel, podemos implement-lo como um objeto no PHP. Para isso, devemos seguir a sintaxe da programao orientada a objetos. Toda classe determinada pela palavra reservada class. Seus atributos e mtodos ficam dentro de chaves.
<?php class automovel{ //atributos e mtodos } ?>

Para representar os atributos da classe automvel, vamos criar apenas os atributos marca, modelo e ligado, que usaremos para dizer se o automvel est ligado ou desligado
<?php class automovel{ //declarao de atributos (variveis) var $marca; var $modelo; var $ligado; } ?>

Note que utilizamos uma sintaxe diferente nos nomes de variveis. Essa sintaxe muito comum em orientao a objetos. Quando um nome formado pela unio de duas palavras distintas, o primeiro nome fica inteiramente em letras minsculas. Os demais nomes iniciam-se com letra maiscula. Isso no uma regra oficial e seu script no vai deixar de funcionar por isso, mas iremos adotar essa sintaxe para uma melhor assimilao. Vamos agora, criar alguns mtodos para a classe automvel. A criao de mtodos idntica criao de funes. Ex: Vamos criar o mtodo liga():
<?php

class automovel{ //declarao de atributos var $marca, $modelo, $ligado; //criao do mtodo liga() function liga(){ $this->ligado = true; } } ?>

78

PHP e MySQL Nosso mtodo liga() apenas altera o estado da varivel ligado para true, representando um automvel ligado. Utilizamos o formato $this->atributo para informar que estamos modificando uma varivel que pertence prpria classe. Podemos criar um mtodo desliga(), para que o automvel possa ser desligado:
<?php class automovel{ //declarao de atributos var $marca, $modelo, $ligado; //criao do mtodo liga() function liga(){ $this->ligado = true; } //mtodo desliga function desliga(){ $this->ligado = false; } } ?>

Temos uma classe automvel que liga e desliga, mas como saber se o automvel est ligado? Vamos criar um mtodo que informa seu estado. Chamaremos esse mtodo de estado():
<?php class automovel{ //declarao de atributos var $marca, $modelo, $ligado; //criao do mtodo liga() function liga(){ $this->ligado = true; } //mtodo desliga function desliga(){ $this->ligado = false; } //mtodo que informa o estado do automvel function estado(){ if($this->ligado == true) echo Automvel ligado<br>; else echo Automvel desligado<br>; } } ?>

Agora temos um mtodo que informa se o automvel est ligado ou desligado. Vamos ento realizar o que chamamos de instanciar um objeto. Como vimos no incio deste documento, as variveis em PHP tambm podem ser do tipo objeto (object). Isso significa que elas podem receber, como valor, toda uma classe, ou seja, podemos determinar que uma varivel conter a classe automvel. Automaticamente, todos os atributos e mtodos

que existem na classe automvel passam a pertencer varivel. Inicializar uma varivel como o valor de uma classe o que chamamos de instanciao de um objeto, pois cada 79

PHP e MySQL varivel instanciada tratada como um mtodo diferente; como se cada varivel fosse um automvel diferente. Automveis possuem as mesmas caractersticas (descritas dentro da classe), mas cada automvel nico. Pense na instanciao como a linha de montagem de um objeto (neste exemplo, de um automvel): Vamos instanciar um automvel:
<?php class automovel{ //declarao de atributos var $marca, $modelo, $ligado; //criao do mtodo liga() function liga(){ $this->ligado = true; } //mtodo desliga function desliga(){ $this->ligado = false; } //mtodo que informa o estado do automvel function estado(){ if($this->ligado == true) echo Automvel ligado<br>; else echo Automvel desligado<br>; } } //instanciando o objeto $carro = new automovel(); //chamando a funo estado $carro->estado(); ?>

Note que, para instanciarmos um objeto, utilizamos a palavra reservada new, seguida do nome da classe. A partir deste momento, a varivel $carro torna-se um automvel, e contm todas as caractersticas definidas na classe. Se quisermos que o objeto execute um determinado mtodo, basta realizar uma chamada funo, atravs da sintaxe:
$objeto->mtodo

Isso faz com que o mtodo contido dentro do objeto seja executado. Em nosso exemplo, queramos que o mtodo estado() fosse executado, ento, fizemos uma chamada ao mtodo:
$carro->estado();

Assim, o mtodo estado() contido no objeto $carro foi executado. Note que nenhum outro atributo foi inicializado neste objeto. Vamos informar os atributos de nosso objeto $carro:
$carro->marca = VolksWagen;

$carro->modelo = Fusca;

Podemos utilizar o comando echo para imprimir diretamente o valor das variveis:
echo eu tenho um $carro->marca $carro->modelo !!!;

80

PHP e MySQL Essa linha ir retornar a mensagem: eu tenho um VolksWagen Fusca !!!; Podemos, facilmente, criar diversos automveis, sem que seja necessrio reescrever a classe automvel:
<?php $carro = new automovel(); $esportivo = new automovel(); $jeep = new automovel(); $carroPopular = new automovel(); ?>

Temos ento $carro, $esportivo, $jeep e $carroPopular como quatro objetos distintos, pertencentes classe automvel. Todos eles possuem os mesmos atributos e mtodos. Se quisermos ligar apenas o jeep...:
<?php $jeep->liga(); ?>

Apenas o objeto $jeep estar ligado. Os demais no tero seu estado alterado. Note que o aproveitamento do cdigo muito maior. Sua manuteno tambm facilitada. Ex: Se quisermos modificar o mtodo estado, para que ele tambm informe a marca e o modelo do automvel, basta modificar o mtodo estado dentro da classe automvel e pronto. Todos os objetos estaro alterados:
<?php function estado(){ if($this->ligado == true) echo "auomvel ligado<br>"; else echo "automvel desligado<br>"; echo $this->marca<br>; echo this->modelo<br>; } ?>

Quando realizamos a chamada ao mtodo estado do objeto carro:


$carro->estado();

O resulado obtido :
automvel ligado VolksWagen Fusca

Mtodos construtores e destrutores


Mtodos construtores so utilizados para inicializar uma classe. o mtodo construtor o primeiro mtodo a ser executado dentro de uma classe, durante a instanciao de um objeto. O mtodo construtor no obrigatrio, mas pode ajudar muito. Mtodos construtores em PHP possuem a seguinte sintaxe:

<?php class automovel{ //mtodo constutor recebe $marca e $modelo como parmetros function __construct($marca,$modelo){

81

PHP e MySQL
//inicializa os atributos $this->marca = $marca; $this->modelo = $modelo; } } ?>

Ex: Se quisermos determinar marca e modelo de um automvel no momento da instanciao:


$conversivel = new automovel(Ford,Escort);

Os parmetros informados no momento da instanciao so passados para o mtodo construtor, que instancia as variveis. Vamos executar uma chamada ao mtodo estado:
$conversivel->estado();

O resultado ser:
automvel desligado Ford Escort

O mtodo __destruct executado quando o objeto destrudo. No se pode


determinar a forma como o objeto ser destrudo, ou seja, removido da memria (em geral,

acontece no final da execuo do script), mas pode-se configurar aes a serem executadas durante a destruio do objeto:
function __destruct{ echo $this->marca $this->modelo destrudo<br>; }

Acrescentando este mtodo destrutor na classe automvel, o resultado ser:


automvel desligado Ford Escort Ford Escort destrudo

Modificadores de Acesso
So palavras reservadas que determinam a forma como um atributo ou mtodo ser acessado pela aplicao. Podemos dizer que eles alteram permisses de acesso aos mesmos. Os principais so:

Modificador public
Um mtodo ou atributo determinado como public pode ser acessado por qualquer mtodo da aplicao. Ex: Os atributos definidos em nossa aplicao at o momento so atributos pblicos, pois podemos modific-los diretamente dentro da aplicao, simplesmente determinando um valor, como uma varivel pblica:
$carro->modelo = Santana;

Modificador private
o mtodo mais restritivo. Indica que um atributo ou mtodo somente poder ser acessado de dentro da classe a qual pertence, impedindo o acesso externo. Se declararmos

os atributos da classe automvel como private, apenas mtodos pertencentes classe podero alter-los, o que impede que atribuies de valores como a mostrada acima. Para 82

PHP e MySQL que um atributo private possa ser alterado, necessrio que seja criado um mtodo capaz de alter-lo. Vamos declarar os atributos da classe automvel como private:
<?php class automovel{ //atributos declarados como private private $marca, $modelo, $ligado; ... } ?>

Em nosso exemplo, o mtodo que modifica os atributos $marca e $modelo o


prprio mtodo construtor, enquanto que o mtodo que modifica o estado do carro (ligado

ou desligado) o mtodo estado. Repare que no h mais como alterar esses atributos sem que uma chamada a um desses mtodos seja realizada.

Modificador protected
Este modificador de um nvel intermedirio. Atributos ou mtodos declarados como protected tornam-se pblicos dentro da classe em que foram criados e das classes que herdam a classe em que eles foram criados. Fora de sua classe e suas herdeiras (veremos isso em Herana, logo adiante), atributos e mtodos definidos como protected possuem a mesma restrio obtida com o modificador private.

Herana
Herana uma forma de reutilizar uma classe. Classes podem herdar caractersticas de outras classes, passando a possuir todas as suas caractersticas (atributos e mtodos). Uma classe herda caractersticas de outra classe com o uso da palavra reservada extends. Ex: Vamos criar a classe carroDeCorrida, que ir herdar as caractersticas da classe automvel:
class carroDeCorrida extends automovel{ ... }

Pronto, agora temos uma nova classe carroDeCorrida, com os atributos $marca, $modelo e $ligado e os mtodos ligar(), desligar() e estado(), sem que fosse necessrio reescrever toda a classe. Qualquer modificao na classe automovel modifica tambm a calsse carroDeCorrida. Dizemos ento que a classe automovel a classe pai e a classe carroDeCorrida a classe filha, pois herda as caractersticas da classe pai. Podemos agora criar novos atributos e mtodos para a classe carroDeCorrida. Vamos criar o atributo pneu e

o mtodo trocaPneu para a classe carroDeCorrida:


class carroDeCorrida{ private $pneu; function trocaPneu($tipoPneu){ $this->pneu = $tipoPneu; } }

83

PHP e MySQL O mtodo trocaPneu recebe como parmetro o tipo de pneu que o carro de corrida ir receber na troca e altera o atributo $pneu para o tipo especificado.

Sobrescrever mtodos
Uma tcnica muito utilizada na programao orientada a objetos. Permite que alteremos todo um mtodo da classe pai, reescrevendo-o. Ex: Na classe pai, o mtodo estado() mostra apenas as caractersticas bsicas do carro. Vamos alterar a classe carroDeCorrida para que tambm mostre o tipo do pneu:
<?php class carroDeCorrida extends automovel{ //novo atributo pneu private $pneu; //mtodo trocaPneu, definida anteriormente function trocaPneu($tipoPneu){ $this->pneu = $tipoPneu; } //mtodo estado sendo sobreescrita function estado(){ //chamada ao mtodo estado da classe pai parent::estado(); //nova linha do mtodo estado echo "Pneus $this->pneu<br>"; } } ?>

Note que dentro do novo mtodo estado() h uma chamada ao mtodo estado da classe automvel ( parent::estado() ). Essa chamada necessria para que o PHP identifique o mtodo que est sendo sobrescrito. Quando utilizamos herana em PHP, devemos nos lembrar sempre de que o PHP ainda possui limitaes, se comparado a outras linguagens orientadas a objeto. Ex: As classes que possuem herana devem ser definidas dentro do mesmo arquivo da classe pai, ou seja, em nosso exemplo, a classe carroDeCorrida deve estar no mesmo arquivo da classe automovel, pois o PHP no pode definir qual a classe pai e qual a classe filha. Porm, isso pode ser resolvido com o uso da funo require ou include. Outra limitao encontrada na linguagem que o PHP no suporta herana mltipla, ou seja, uma classe filha pode ter apenas uma classe pai, diferente de outras linguagens como java, que suporta essa caracterstica. Vamos instanciar um carro de corrida:
$formula = new carroDeCorrida("Puma","GTB"); $formula->trocaPneu("Slick"); $formula->estado();

O resultado do trecho acima ser:


automvel desligado Puma GTB Pneus Slick Puma GTB destrudo

84

PHP e MySQL

Glossrio de funes do PHP


Algumas das principais funes disponibilizadas pelo PHP:

Datas Date()
Retorna uma data no formato especificado String date(string formato,int[datahora] ); Argumento Data formato Caractere a A d D F Significado am ou pm AM ou PM Dia em formato numrico. De 01 a 31. Dia da semana, textual, 3 letras. Ex.: Fri Ms, textual, formato longo. Ex.: January. Descrio Data/hora a ser formatada. Se no for especificada utilizar a data/hora corrente String com caracteres de formatao de datas

h Hora no formato de 12 horas. De 01 a 12. H Hora no formato de 24 horas. De 00 a 23. g Hora no formato de 12 horas, sem os zeros esquerda. De 1 a 12. G Hora no formato de 24 horas, sem os zeros esquerda. De 0 a 23. i Minutos. De 00 a 59. j Dia do ms sem os zeros esquerda. De 1 a 31. l Dia da semana, textual, longo. Ex.: Friday. L Booleano que indica se o ano bissexto.0 ou 1. m Ms. De 01 a 12. n Ms sem zeros esquerda. De 1 a 12. M Ms, textual, 3 letras. Ex.: Jan. s Segundos. De 00 a 59. S Sufixo ordinal em ingls, textual, 2 caracteres. Ex.: th,nd. t Nmero de dias do ms determinado. Ex.:28 a 31.

85

PHP e MySQL U Nmero de segundos desde o epoch. w Dia da semana, numrico. De 0(domingo) a 6 (sbado) . Y Ano com 4 dgitos. Ex.: 2002. y Ano com 2 dgitos. Ex.: 02. z Dia do ano. De 0 a 365. Z Fuso horrio em segundos. De -43200 a 43200.

Getdate
Retorna um array associativo contendo todas as informaes de uma data/hora especfica. Array getdate(int data/hora); ndices da matriz retornada. seconds minutes hours mday wday mon year yday weekday month Segundos Minutos Horas Dia do ms Dia da semana no formato decimal Ms no formato decimal Ano no formato decimal Dia do ano no formato decimal Dia da semana no formato decimal Ms no formato texto

Gmmktime()
Retorna a data/hora GMT no formato UNIX. idntica funo mktime(), exceto que a data passada no parmetro representa uma data GMT. Int gmmktime(int hora, int minuto, int segundo, int ms, int dia, int ano, int [dsf]);

Gmstrftime()
Retorna uma data/hora GMT/CUT no formato especificado. semelhante funo strftime(), exceto que a hora retornada a hora de Greenwich. String gmstrftime(string formato, int datahora);

Microtime()
Retorna uma string contendo a data/hora atual no formato msec sec do UNIX, que 86

PHP e MySQL significa o nmero de milisegundos e depois os segundos desde o UNIX Epoch(01/01/1970 00:00:00 GMT). String microtime(void);

Mktime()
Retorna uma data/hora no formato UNIX Int mktime(int hora, int minuto, int segundo, int ms, ine dia, int ano, int [dsf]);

Strftime()
Retorna uma data no formato especificado. Os nomes por extenso dos meses e dos dias da semana dependem da configurao feita com a funo setlocale(). String strftime(string formato, int datahora); Argumento Data corrente Caractere Significado %a %A %b %B %c %d %H %l %j %m %M %p %S %U %W %w Dia da semana abreviado Dia da semana completo Nome abreviado do ms Nome completo do ms Representao preferida de data e hora Dia do ms no formato decimal (00-31) Hora no formato decimal de 24 horas (00-23) Hora no formato decimal de 12 horas (00-12) Dia do ano no formato decimal (001-366) Ms em formato decimal (1-12) Minutos no formato decimal am ou pm, dependendo da hora especificada Segundos no formato decimal Nmero da semana do ano atual no formato decimal, comeando no primeiro domingo como o primeiro dia da primeira semana Nmero da semana do ano atual no formato decimal, comeando na primeira segunda-feira como o primeiro dia da primeira semana Dia da semana no formato decimal, sendo o domingo igual a 0. Descrio Data/hora a ser formatada. Se no especificada, utilizar a data/hora

87

PHP e MySQL %x %X %y %Y %Z %% Representao preferida da data, sem a hora Representao preferida da hora, sem a data Ano no formato decimal, sem o sculo (00-99) Ano no formato decimal, com o sculo. Zona de fuso horrio, ou nome, ou abreviao. Uma caractere literal %.

Time()
Retorna a data/hora no formato UNIX, que corresponde ao nmero de segundos desde o Unix Epoch(01\01\1970 00:00:00 GMT) Int time(void);

Diretrios Chdir()
Altera o diretrio correspondente do PHP para o diretrio especificado. Retorna true se tiver sucesso; caso contrrio retorna false Int chdir(string diretrio);

Closedir()
Encerra a associao de um identificador(handle) com um diretrio. Void closedir(int handle_dir) ;

Opendir()
Retorna um handle de diretrio para ser usado nas funes closedir(), readdir() e

Readdir()
Retorna o prximo nome de arquivo do diretrio, na ordem em que estiverem armazenadas String readdir(int handle_dir);

Execuo de Programas Escapeshellcmd()


Retira quaisquer caracteres de um string que poderiam ser utilizados para enganar um comando Shell para executar comandos arbitrrios. Esta funo normalmente usada para

88

PHP e MySQL verificar os dados fornecidos pelo usurio antes de serem passados para as funes exec() ou system(). String escapeshellcmd(string comando);

Exec()
Executa um comando externo e mostra a ltima linha do resultado do comando. String exec(string comando, string [array], int [varivel_ref]) ; Argumento Comando Array Descrio Comando externo a ser executado Array contendo as linhas do resultado

Varivel_ref Varivel que conter o cdigo de retorno do comando executado

Passthru()
Executa um comando externo e mostra todos os resultados. String passthru(string comando, int [varivel_ref]); Argumento Comando Varivel_ref Descrio Comando externo a ser executado Varivel que conter o cdigo de retorno do comando executado

System()
Executa um comando externo e mostra os resultados. String system(string comando, int [varivel_ref]); Argumento Comando Varivel_ref Descrio Comando externo a ser executado Varivel que conter o cdigo de retorno do comando executado

Sistema de arquivos do servidor Basename()


Retorna o nome do arquivo em um path. No Windows, ambos os caracteres, / e \, so usados como separadores de diretrios. Em outros ambientes utilizado somente o caractere /. String basename(string path);

89

PHP e MySQL

Chgrp()
Muda o grupo ao qual um arquivo pertence em ambientes UNIX. Em ambientes Windows no faz nada, retornando sempre true. chgrp(string nome_do_arquivo, mixed grupo) ;

Chmod()
Altera as permisses de um arquivo em ambientes UNIX. Retorna true em caso de sucesso; caso contrrio, retorna false. Em ambientes Windows esta funo no faz nada, sempre retornando true Int chmod(string nome_do_arquivo, int modo) ;

Chown()
Altera o proprietrio de um arquivo em ambientes UNIX. Somente o root pode alterar o proprietrio de um arquivo. Retorna true em caso de sucesso; caso contrrio, retorna false. No Windows esta funo na faz nada sempre retornando true. Int chown(string nome_arquivo, mixed proprietrio);

Copy()
Copia um arquivo. Retorna true se tiver sucesso; caso contrrio, retorna false. Int copy(string nome_arquivo, string arquivo_destino);

Delete()
Apaga um arquivo do servidor Void delete(string nome_arquivo) ;

Dirname()
Retorna o nome de um diretrio em um path. Veja a funo basename(). String dirname(string path);

Fclose()
Fecha um arquivo. Retorna true se tiver sucesso; caso contrrio, retorna false. Int fclose(int fp);

Feof()
Retorna true caso o ponteiro de arquivo esteja no fim do arquivo ou ocorra um erro; caso

90

PHP e MySQL contrrio, retorna false. Int feof(fp);

File()
L um arquivo inteiro e coloca seu contedo em um array. Cada elemento do array corresponder a cada linha do arquivo lido, sem tirar qualquer informao. Array file(string nome_arquivo);

File_exists()
Retorna true se um determinado arquivo existe; caso contrrio, retorna false. Os resultados desta funo so armazenados e reutilizados. Para atualizar esta informao utilize a funo clearstatcache(). Int file_exists(string nome_arquivo);

Filesize()
Retorna o tamanho de um arquivo, ou false em caso de erro. Os resultados desta funo so armazenadas e reutilizadas. Para utilizar esta informao utilize a funo clearstatcache(). Int filesize(string nome_arquivo);

Filetype()
Retorna o tipo de um arquivo. Os valores possveis so fifo, char, dir, block, link, file e unknown. Retorna false em caso de erro. Os resultados desta funo so armazenadas e reutilizadas. Para utilizar esta informao utilize a funo clearstatcache(). String filetype(string nome_arquivo);

Fopen()
Abre um arquivo ou uma URL. A funo retornar false se ocorrer erro. Int fopen(string nome_arquivo, string modo); Argumento Descrio iniciado. Veja a baixo as opes. http:// Abre um conexo HTTP 1.0 com o servidor especificado e um ponteiro de Nome_arquivo Nome do arquivo. A ao a ser tomada depender de como o nome

arquivo retornado ao incio do texto da resposta ftp:// Abre um conexo FTP com o servidor especificado e um ponteiro de 91

PHP e MySQL arquivo retornado. O servidor deve suportar o modo passivo de FTP. possvel abrir os arquivos para leitura ou para escrita, mas no ambos ao mesmo tempo outro Modo r r+ w w+ a a+ Se o nome comear com qualquer outra coisa, o arquivo ser aberto no sistema de arquivos e um ponteiro de arquivo ser retornado. Modo de abertura. Adicionalmente pode-se colocar a letra b no parmetro modo, informando que a ser processado um arquivo binrio Somente leitura, a partir do inicio do arquivo. Leitura e escrita, a partir do inicio do arquivo. Somente escrita. A partir do inicio do arquivo e apagando todo o contedo do arquivo. Se o arquivo no existir, a funo tentar cri-lo. Para leitura e escrita. A partir do inicio do arquivo e apagando todo o contedo do arquivo. Se o arquivo no existir, a funo tentar cri-lo. Somente escrita. A partir do inicio do arquivo. Se o arquivo no existir, a funo tentar cri-lo. Para leitura e escrita. A partir do inicio do arquivo. Se o arquivo no existir, a funo tentar cri-lo.

Fputs()
Escreve o contedo de uma string em um arquivo Int fputs(int fp, string str, int [tamanho]);

Fread()
L bytes de um arquivo String fread(int fp, int [tamanho]);

Fwrite()
Escreve um nmero especifico de bytes de uma string em um arquivo Int fwrite(int fp, string str, int [numbytes]);

Readfile()
L um arquivo e o envia para a sada padro do sistema; retorna o nmero de bytes lidos Int readfile(string nome_arquivo);

92

PHP e MySQL

Rename()
Altera o nome de um arquivo. Retorna true se tiver sucesso; caso contrrio false Int rename(string nome_anterior, string nome_novo);

Matemtica Abs()
Retorna o valor absoluto de um nmero. Mixed abs(mixed nmero);

Base_convert()
Retorna uma string com um nmero convertido para outra base numrica. String base_convert(string nmero, int base_ant, int nova_base);

Max()
Retorna o maior dentre os especificados Mixed max(mixed arg1, mixed arg2, mixed argn);

Min()
Retorna o menor dentre os especificados Mixed min(mixed arg1, mixed arg2, mixed argn);

Mt_rand()
Gera um nmero aleatrio mais confivel no intervalo especificado Int mt_rand(int [limite_inf], int [limite_sup]);

Pi()
Retorna o valor da constante pi Double pi(void);

Pow()
Retorna o resultado de uma base elevada a um expoente Float pow(float base, float expoente);

Rand()
Retorna um nmero aleatrio dentro de um intervalo especificado 93

PHP e MySQL Int rand(int [limit_inf], int [limi_sup]);

Round()
Retorna o valor de um nmero arredondado para o nmero inteiro mais prximo. Se o nmero estiver exatamente entre dois nmeros inteiros, o resultado ser sempre o nmero inteiro par Double rand(double nmero);

Sin()
Retorna o seno de um ngulo em radianos Float sin(float arg);

Sqrt()
Retorna a raiz quadrada Float sqrt(float arg );

Tan()
Retorna a tangente de um ngulo em radianos Float tan(float arg);

Funes diversas Eval()


Processa uma string como cdigo PHP Void eval(string string_cdigo);

Die()
Imprime uma mensagem e termina o script PHP Void die(string mensagem);

Exit()
Termina o script PHP atual Void exit(void);

Mail()
Envia um email para um ou mais destinatrios

94

PHP e MySQL Bool mail(string dest, string assunto, string mensagem, string [headers_adic]); Argumento Dest Assunto Mensagem Headers_adic Descrio Endereo de email dos destinatrios(separados por ,) Assunto do email Contedo do email Especifica headers adicionais que devem ser inseridas no fim do header padro. Mltiplos headers podem ser especificados e devem ser separados por newline(\n) Exemplo: $destino = NomeDestino <endereo@dominio.com.br>; $remetente = NomeRemetente <remetente@dominio.com.br>; $assunto = assunto do email; mail($destino,$assunto, $mensagem, From: $remetente \n );

Pack()
compacta dados em uma string binria string pack(string formato, mixed [args]...) ;

Sleep()
Atrasa a execuo por um tempo determinado (em segundos) Void sleep(int num_segundos);

Tratamento de sesses Session_decode()


Decodifica os dados de uma sesso em uma string Bool session_decode(string dados);

Session_destroy()
Destri os dados registrados associados sesso atual Bool session_destroy(void);

95

PHP e MySQL

Session_encode()
Codifica os dados de uma sesso Bool session_encode(void) ;

Session_start()
Inicializa os dados de uma sesso Bool session_start(void);

Session_is_registered()
Descobre se uma varivel foi registrada na sesso Bool session_is_registered(string nome);

Session_module_name()
Retorna ou muda o nome do mdulo da sesso atual String session_module_name(string [mdulo]);

Session_name()
Retorna ou muda o nome da sesso atual String session_name(string [nome]);

Session_register()
Registra uma varivel com a sesso atual Bool session_register(string nome);

Session_unregister()
Descarta uma varivel da sesso atual Bool session_unregister(string nome);

Strings Addslashes()
Coloca barras invertidas antes dos caracteres especiais: apostrofo(), aspas(), barra invertida (\) e NUL String addslashes(string str); 96

PHP e MySQL

Chop()
Remove espaos em branco em seqncia String chop(string str);

Crypt()
Retorna uma string criptografada atravs do modo DES. String crypt(string str, string [salf]);

Echo()
Imprime uma ou mais strings Echo (string arg1, string argn....);

Explode()
Retorna um array contendo as partes da string com valores separados por um separador Array explode(string separador, string str) ;

Htmlentities()
Converte todos os caracteres aplicveis em tags HTML String htmlentities(string str);

Htmlspecialchars()
Converte caracteres especiais em tags HTML String htmlspecialchars(string str); Caracter Descrio
& &amp;

< >

" < >

Implode()
Retorna uma string contendo a representao string de todos os elementos de um array separados pelo argumento glue String implode(string glue, array fatias);

97

PHP e MySQL

Ltrim()
Retorna uma string sem os espaos iniciais String ltrim(string str);

Md5()
Retorna o hash MD5 de uma string String md5(string str);

Parse_str()
Converte uma string de parmetros no formato das URLs vindas de formulrios HTML em variveis Void parse_str(string str); Exemplo: $str = form=firm&operation=insert&index=0; parse_str($str); echo $form; //imprime firm echo $operation; //imprime insert echo $index; //imprime 0

Strcmp()
Compara duas strings, retornando um valor: < 0 se str1 for menor que str2; > 0 se str1 for maior que str2, e 0 se elas forem iguais Int strcmp(string str1, string str2);

Strip_tags()
Retorna uma string sem as tags HTML e PHP String strp_tags(string str);

Stripslashes()
Apaga as barras invertidas de caracteres especficos String stripslashes(string str);

Strlen()
Retorna o comprimento de uma string Int strlen(string str); 98

PHP e MySQL

Strrev()
Inverte uma string String strrev(string str);

Strtolower()
Transforma as letras em uma string para minscula. String strtolower(string str) ;

Strtoupper()
Transforma as letras em uma string para maiscula. String strtoupper(string str) ;

Str_replace()
Substitui todas as ocorrncias de uma substring por outra String str_replace(string str_ant, string novo_str, string str) ; Argumento Str_ant Novo_str Str Descrio Substring a ser substituda Substring que substituir a anterior String original

Trim()
Apaga os espaos em branco do inicio e fim de uma string. String trim(string str);

Ucfirst()
Transforma o primeiro caractere de uma string em maisculo String ucfirst(string str) ;

Ucwords()
Transforma o primeiro caractere de cada palavra de uma string em maisculo String ucwords(string str);

99

PHP e MySQL

Variveis Doubleval()
Retorna o valor em ponto flutuante de uma varivel Double doubleval(mixed var) ;

Empty()
Retorna false se var estiver atribuda; caso contrrio retorna true Int empty(mixed var) ;

Gettype()
Retorna o tipo de uma varivel String gettype(mixed var);

Intval()
Retorna o valor em inteiros de uma varivel, utilizando uma base especificada. O padro da base 10 Int intval(mixed var, int [base])

Is_array()
Retorna true se a varivel for do tipo array Int is_array(mixed var);

Is_double()
Retorna true se a varivel for do tipo double Int is_double(mixed var);

Is_float()
Retorna true se a varivel for do tipo float Int is_float(mixed var);

Is_int()
Retorna true se a varivel for do tipo inteiro Int is_int(mixed var);

100

PHP e MySQL

Is_object()
Retorna true se a varivel for um objeto Int is_object(mixed var);

Is_real()
Retorna true se a varivel for do tipo real Int is_real(mixed var);

Is_string()
Retorna true se a varivel for do tipo string Int is_string(mixed var);

Isset()
Retorna true se uma varivel existir Int isset(mixed var);

Settype()
Altera o tipo de uma varivel. Retorna true se tiver sucesso; caso contrrio, retorna false Int settype(string var, string tipo); Tipos permitidos Integer Double String Array Objeto

Strval()
Retorna o valor em string de uma varivel String strval(mixed var); Unset Exclui uma varivel Int unset(mixed var);

101