Vous êtes sur la page 1sur 67

PHP e Desenvolvimento WEB com Ferramentas Open Source

Por Érika Focke http://www.erikafocke.com.br

Proibida cópia não autorizada.

Índice

1 - Introdução

4

1.1

A História do PHP

4

Aplicações WEB – Por quê?

4

Características do PHP

4

2 - LINUX: por onde começar

6

2.1 Estrutura de Diretórios

6

2.2 Permissões

7

2.3 Comandos básicos

7

3 - HTTP e HTML : Noções

12

 

3.1 HTTP

12

3.2 HTML – Tags Básicas

12

4 - Iniciando em PHP

17

4.1 Primeira página

17

4.2 PHP: Sintaxe básica

17

4.2.3 Comentários

19

 

4.3 Tipos

19

4.4 Transformação de tipos

20

Coerções

21

Transformação explícita de tipos

21

Com a função settype

22

4.5 Variáveis

22

 

4.6 Arrays

23

4.7 Constantes

24

4.8 Variáveis Pré-Definidas - SuperGlobais

25

5 - Funções de Saída

27

 

5.1 echo

27

5.2 printf

27

6 - Expressões

28

6.1

Operadores

28

Operadores de Atribuição

28

Operadores Aritméticos

28

Operadores de Comparação

29

Operadores de Incremento/Decremento

29

Operadores Lógicos

30

Operadores de String

30

6.2 Ordem de precedência dos operadores

31

7 - Formulários HTML

32

7.1 A Tag FORM

32

7.2 A tag INPUT

32

7.3 A tag SELECT

33

7.4 A tag TEXTAREA

33

8 - Tratando Formulários

35

8.1 - HTTP GET - $_GET

35

8.2 - HTTP POST - $_POST

36

8.3

– O Array $_FILES

36

 

8.4

– Dicas para seu formulário

36

9 - Estruturas de Controle

37

9.1

– Condicionais

37

9.1.1 - IF

37

9.1.2 ELSE

38

9.1.3 ELSEIF (ou else if)

38

9.1.4 SWITCH

39

9.2

– Repetição

39

9.2.1 WHILE

39

 

9.2.2 DO

WHILE

40

9.2.3 FOR

40

9.3 Quebra de fluxo

41

 

9.3.1 Break

41

9.3.2 Continue

41

10 - Modularização

42

10.1 Inclusão de Arquivos

42

10.2 Funções

42

10.3 Argumentos com valores pré-definidos (default)

43

10.4 Passagem de parâmetros por referência

44

11 - Banco de Dados

46

11.1

Sistema de Banco de Dados

46

11.2.1 Referência da Linguagem

47

11.2.2 Sintaxe Detalhada

48

11.2.3 Modificadores de tipos

51

12 - PHP e MySQL – Integração

53

13 - Cookies e Sessões

55

13.1 - Cookies

55

13.2 - Sessões

57

14. Manipulação de Arquivos

58

14.1 FOPEN

58

14.2 FEOF

59

14.3 FGETS

59

14.4 FWRITE

59

14.5 FILE_EXISTS

60

14.6 Outras funções de interesse para manipulação de arquivos

60

15 - Upload de Arquivos

61

16 - Regular Expressions

63

17 - Manipulação de Imagens

66

18 - Apêndice

67

18.1 Tratamento de erros

67

1.1 A História do PHP

1 - Introdução

A linguagem PHP foi concebida durante o outono de 1994 por Rasmus Lerdorf. As primeiras

versões não foram disponibilizadas, tendo sido utilizadas em sua home-page apenas para que ele pudesse ter informações sobre as visitas que estavam sendo feitas.

A primeira versão utilizada por outras pessoas foi disponibilizada em 1995, e ficou conhecida

como Personal Home Page Tools (ferramentas para página pessoal). Era composta por um sistema bastante simples que interpretava algumas macros e alguns utilitários que rodavam por trás das home-pages: um livro de visitas, um contador e algumas outras coisas. Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI; o FI veio de um outro pacote

escrito por Rasmus que interpretava dados de formulários HTML (Form Interpreter). Ele combinou

os scripts do pacote Personal Home Page Tools com o FI e adicionou suporte a mSQL, nascendo

assim o PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir com o projeto.

Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997 esse número subiu para mais de 50.000. Nessa época houve uma mudança no desenvolvimento do PHP. Ele deixou de ser um projeto de Rasmus com contribuições de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a versão 3.

Aplicações WEB – Por quê?

O conceito de Aplicações WEB se aplica a sites dinâmicos com grande flexibilidade que funcionam como verdadeiros softwares via browser. O grande diferencial de uma aplicação WEB via browser e um software desenvolvido em Delphi ou outra linguagem compilável está na portabilidade.

As aplicações via browser têm seu código executado do lado do servidor, e por essa razão, é independente de plataforma; qualquer navegador abrirá a sua aplicação, em qualquer sistema. E você não precisará instalar nenhum software adicional, visto que todas as instalações padrão de sistemas na atualidade já vêm com um browser.

Você poderá chegar em qualquer computador, em casa, no trabalho, na casa de um amigo, e abrir a sua aplicação, consultar informações e o que mais for possível na sua implementação. Você pode inclusive desenvolver sua aplicação web compartilhando um mesmo banco de dados utilizado por uma aplicação desenvolvida em outras linguagens. Isso é interessante para desenvolver módulos separados para que usuários tenham acesso de consulta a informações da sua aplicação, mas que as modificações apenas possam ser feitas através de um software em separado.

Características do PHP

o

Linguagem Interpretada(não compilada);

o

Pré-processada;

o

Integração: bancos de dados diversos, arquivos, outras linguagens, scripts;

o

Sintaxe baseada em C e Perl.

o

Não necessita declaração de variáveis e tipos;

o

Centenas de funções prontas pesquisáveis na página php.net;

o

Possibilidade de inclusão de arquivos de funções, scripts etc;

o

Código mesclável com html, javascript;

o

O cliente não necessita de nada “a mais”, nem instalar nenhum programa específico, precisa apenas do browser;

o

Multiplataforma, tanto para servidor quanto para cliente;

o

Manipulação de arquivos;

o

Manipulação de imagens;

o

Geração de documentos xml, wml, pdf, swf, gif, jpeg e png;

o

Expressões regulares para validar campos de formulário, por exemplo;

o

Integração com uma grande variedade de bancos de dados:

Oracle

dBase

InterBase

Empress

FrontBase

PostgreSQL

mSQL

MS-SQL

Sybase

ODBC

e o mais utilizado, MySQL. (Dentre outros)

2 - LINUX: por onde começar

O Linux é um sistema gratuito e de código aberto, como todos já devem saber, e é uma plataforma ideal para desenvolvimento, para programação. No caso do desenvolvimento WEB, entretanto, havia muitas dificuldades no que diz respeito à organização gráfica e visual do site. Mas hoje a situação é completamente diferente, e o Linux já possui programas gráficos tão bons quanto os softwares fechados tão conhecidos no mundo gráfico, e todos gratuitos, a grande maioria de código aberto.

Para começarmos o nosso curso tendo um bom aproveitamento de todas as ferramentas que o software livre pode nos oferecer, vamos começar com as noções de utilização desse sistema, que será utilizado como nossa plataforma de desenvolvimento. O Linux pode parecer muito complicado para algumas pessoas, mas na verdade ele é bem simples. O que faz as pessoas terem essa impressão é o fato de estarem muito habituadas ao Windows (tudo é uma questão de costume).

No Linux, pelo menos na maioria das versões, ao iniciar o sistema, ele não irá entrar automaticamente no modo gráfico como o Windows faz. Algumas pessoas podem se “assustar” com isso, entretanto quando abrimos o ambiente gráfico vemos que tudo pode ser bem mais simples. Há vários bons tutoriais de linux na internet, e no nosso curso apenas passaremos as noções básicas necessárias para utilização do Linux como plataforma de desenvolvimento WEB. Veremos sua estrutura de diretórios, permissões e instalação de programas.

2.1 Estrutura de Diretórios

Estrutura da Raiz ( / ) de um sistema Linux:

bin

Arquivos executáveis(binários) de comandos essenciais pertencentes ao sistema e que são usados com frequência.

boot

Arquivos estáticos de boot - inicialização(boot-loader)

dev

Arquivos de dispositivos de entrada/saída

etc

Configuração do sistema da máquina local com arquivos diversos para a administração de sistema.

home

Diretórios local(home) dos usuários

lib

Arquivos da biblilotecas compartilhadas usados com freqüencia

mnt

Ponto de montagem de partição temporárias(cdrom, disquete etc)

root

Diretório local do superusuário (root)

sbin

Arquivos binários(executáveis) de sistema essenciais

tmp

Arquivos temporários gerados por alguns utilitários

usr

Todos os arquivos de usuários gerados por instalações de programas(contém uma sub- estrutura)

var

Informações variáveis

2.2 Permissões

As permissões são um dos aspectos mais importantes do Linux (na verdade, de todos os sistemas baseados em Unix). Elas são usadas para vários fins, mas servem principalmente para proteger o sistema e os arquivos dos usuários.

Como você deve saber, somente o super-usuário (root) tem ações irrestritas no sistema, justamente por ser o usuário responsável pela configuração, administração e manutenção do

Linux. Cabe a ele por exemplo, determinar o que cada usuário pode executar, criar, modificar, etc.

E isso é feito através das permissões.

drwx------

2 wester

512 Jan

29 23:30

Arquivos/

-rw-rw-r--

1 wester

280232 Dec

16 22:41

notas.txt

As linhas acima representam um comando digitado (ls –l) para listar um diretório e suas permissões. O primeiro ítem que aparece na linha (drwx----- e –rw-rw-r-) é a forma usada para mostrar as permissões que o diretório “Arquivos” e o arquivo “notas.txt” têm.

Um ponto interessante para lembrar é que o Linux trata todos os diretórios como arquivo também, portanto, as permissões se aplicam de igual forma para ambos. Tais permissões podem ser divididas em quatro partes para indicar: tipo, proprietário, grupo e outras permissões. O primeiro caractere da string indica o tipo de arquivo: se for “d” representa um diretório, se for “-“ equivale a um arquivo.

Repare agora que no restante da string temos 9 caracteres. Você já sabe o que significa o primeiro. Os demais são subdivididos em 3 grupos de 3 caracteres, cada um representado o

proprietário, o grupo e todos os demais respectivamente. Pegando a linha 2 do exemplo (-rw-rw-r-)

e dividindo a string em 3 partes, ficaria assim:

Onde:

rw- => indicação de permissões do proprietário

rw- => permissões do grupo que o usuário pertence

r--

=> permissões para os demais usuários

r => leitura (read);

w => gravação (write);

x => execução (execution);

- => sem permissão.

2.3 Comandos básicos

Uma das primeiras coisas que você deve ter bem clara em mente é que o Linux é case-sensitive, ou seja, letras maiúsculas e minúsculas fazem bastante diferença. “PaLaVRA” é bem diferente de “palavra”. Por essa razão, a grande maioria dos comandos são com letra minúscula, para seguir uma espécie de padrão.

Abaixo segue uma lista de comandos básicos. Deve se atentar para o fato que cada comando desses pode possuir vários parâmetros. Em caso de dúvida, digite “man comando” e a página do manual do comando em questão será exibida.

ls

Lista os arquivos, mesmo que dir do DOS.

 

rm

remove arquivos, no formato: rm (arquivo1) [arquivo2] [arquivo3] Exemplo: rm eu.doc / rm leiame.txt manual.html win95.w95

 

A

forma mais utilizada é o “rm –rf arquivo”, para apagar diretórios cheios e

qualquer outra coisa.

 

cp

Copia arquivos, no formato: cp (arquivo1)[arquivo2][ Exemplo: cp teste.doc /home/user/

]

(destino)

 

mv

Move ou renomeia um arquivo.

 

Exemplo: mv arquivo.txt /root -> move o arquivo.txt para o diretório /root

 
 

mv

arquivo.txt

arquivo2.txt

->

renomeia

arquivo.txt

para

arquivo2.txt

 

cat

mostra o conteúdo do arquivo, mesmo que o 'type' no DOS. Deve ser usado com cautela – se o arquivo for muito grande ou for um arquivo binário, o resultado pode não ser o esperado. Exemplo: cat teste.php

more

Exibe o conteúdo de um arquivo ou a saída de um comando, página a página, como no DOS. Como o cat, deve ser usado com cautela. Exemplo: ls | more

 

more

file.txt

pwd

Exibe o diretório em que você se encontra

 

mkdir

Cria um diretório: mkdir nome-do-dir Exemplo: mkdir teste

 

clear

Limpa a tela

 

exit / logout

Saem da sessão atual

 

cd

Muda para o diretório especificado, igual ao DOS

 

grep

Procura uma string no stream especificado, pode ser por exemplo em uma saída de um “cat file”. Exemplo: cat arquivo.txt | grep testando

tar

Descompactador/Compactador de arquivos .tgz e .tar.gz. Utiliza-se:

 

tar –zxvf arquivo.tar.gz -> descompacta o volume arquivo.tar.gz tar –zcvf userhome.tgz /home/usuario -> cria o volume userhome.tgz a partir do diretório /home/usuário

date

Exibe a data e hora.

 

pico

É

um editor básico do modo texto no Linux. Existem vários, talvez o mais

startx

conhecido seja o “vi”, entretanto ele acaba se tornando muito confuso para quem está iniciando, então quando necessário iremos utilizar o pico. Inicia a sessão do ambiente gráfico no linux (o ambiente gráfico deve estar devidamente configurado para que funcione). Mostra processos rodando no momento. É importante para que possamos monitorar um processo e para finalizarmos um processo com problemas. Mata um processo. Precisamos saber o PID do processo para o kilarmos. Exemplo: kill -9 1012 -> mata o processo de PID 1012 Mata um processo pelo nome. Se um processo com aquele nome não existir, uma mensagem é exibida. Exemplo: killall -9 mysqld -> mata o processo chamado mysqld. Mostra portas abertas e conexões ativas no momento. Cria um link simbólico (um atalho) para uma pasta ou arquivo. Exemplo: ln –s diretório-real-source nome-atalho Mostra informações sobre hd´s (espaço livre e usado) Mostra informações sobre a placa de rede (se houver uma) Navegadores (browser) em modo texto

ps -awx

kill

killall

netstat -vat

ln -s

df

ifconfig

lynx, links

2.4

Montando/Desmontando volumes

Para acessar um cd-rom ou disquete, você precisa primeiro montar o drive em algum diretório para que ele se torne acessível.

Montando Cd´s

Já com o cd no driver, utilize o comando mount da seguinte maneira:

shell> mount /dev/cdrom /mnt/cdrom Lembrando que na instalação padrão do Slackware você só pode utilizar o comando mount se estiver logado como o superusuário (root). Também vale lembrar que o diretório /mnt/cdrom já é criado na instalação padrão do Slackware, porém em outras distribuições isso pode sofrer algumas alterações.

Para retirar o cd, você precisa desmontar o drive antes, através do comando umount:

shell> umount /dev/cdrom

Montando Disquetes

Com o disquete no drive, utilize o comando mount da seguinte maneira:

shell> mount /dev/floppy /mnt/floppy

E após a utilização, antes de retirar o disquete, desmonte o drive utilizando o comando umount:

shell> umount /dev/floppy

2.5 Instalando programas

Ao instalar programas no linux, devemos ter sempre em mente que é imprescindível ler os arquivos de instalação e documentação que sempre acompanham os programas. Ler com calma um INSTALL.txt pode poupar você de muita dor de cabeça!

A

maioria dos programas atuais pode ser instalada com três comandos:

shell> ./configure shell> make shell> make install

O

específicas do seu sistema necessárias para compilar o programa. Alguns programas mais complexos precisam de vários parâmetros no configure. Por isso é muito importante ler o arquivo de instalação.

./configure irá gerar um arquivo Makefile com os caminhos de bibliotecas e outras definições

O make irá compilar o programa, e o make install colocará os executáveis, bibliotecas e outros

arquivos nos locais corretos do sistema para serem utilizados.

2.5.1 – Instalação do Servidor WEB

Para começarmos a trabalhar com o PHP, precisamos primeiro deixar nosso servidor WEB pronto

e preparado para interpretar os códigos que vamos escrever. Para tanto, precisamos instalar 3 coisas distintas, que trabalharão integrados: Servidor WEB (Apache), PHP e Banco de Dados(MySQL).

Esta instalação foi feita em um Linux Slackware 10. Faremos um passo-a-passo da instalação desses softwares no Linux.

Primeiramente, faça o download dos três programas:

Apache 2 - http://www.apache.org PHP – http://www.php.net MySQL – http://dev.mysql.com

Descompacte o PHP e o Apache no diretório /root.

shell> tar -zxvf httpd-versao.tar.gz shell> tar -zxvf php-versao.tar.gz

Descompacte o MySQL no diretório /usr/local:

shell> mv mysql-versao.tar.gz /usr/local shell> cd /usr/local shell>tar -zxvf mysql-versao.tar.gz

Instalação do MySQL

Crie um link simbólico para o MySQL no diretório /usr/local:

shell> ln -s /usr/local/mysql-versao /usr/local/mysql

Execute os comandos necessários para a instalação (criação de usuários, bases etc)

shell> groupadd mysql shell> useradd -g mysql mysql shell> cd /usr/local/mysql

shell> sh scripts/mysql_install_db --user=mysql

. shell> chown -R mysql data shell> chgrp -R mysql . shell> bin/mysqld_safe --user=mysql &

shell> chown -R root

Instalação do Apache

Após entrar no diretório do Apache:

shell> ./configure --prefix=/usr/local/apache --enable-so shell> make shell> make install

Instalação do PHP

Após entrar no diretório do PHP:

shell>./configure --with-apxs2=/usr/local/apache/bin/apxs --with-mysql shell> make shell> make install

Após a instalação, é necessário copiar o arquivo php.ini para o diretório de bibliotecas:

shell> cp php.ini-recommended /usr/local/lib/php.ini

Agora, é necessário fazer alguns ajustes no arquivo de configuração do Apache. Abra o arquivo httpd.conf, que deve estar no diretório /usr/local/apache/conf:

shell> pico /usr/local/apache/conf/httpd.conf

Adicione a seguinte linha: (isso fará o servidor interpretar arquivos .php e .phtml como scripts php)

AddType application/x-httpd-php .php .phtml

Você pode alterar outras configurações do arquivo httpd.conf para atender melhor às suas necessidades. É importante verificar as configurações para o “DocumentRoot”, que é a pasta onde serão servidos os arquivos para sua página.

Agora, o seu servidor WEB já deverá estar pronto para rodar. Inicie o daemon através do comando:

shell> /usr/local/apache/bin/apachectl start

Obs: Este comando deverá ser executado sempre que o seu servidor reiniciar, portanto é necessário adicionar essa linha (e a do MySQL também) aos scripts de inicialização(comumente /etc/rc.d/rc.local ).

2.5.2 - Programas auxiliares ao desenvolvimento

Para auxiliar no desenvolvimento de aplicações WEB, precisaremos de algumas ferramentas como editores PHP e Html, programas gráficos etc. Para este curso, fizemos uma seleção de alguns excelentes programas gratuitos e a maioria open source, todos para linux, e alguns com versões também para Windows.

A instalação desses programas é simples, dê uma olhada no arquivo INSTALL que vem em cada um deles, e você não encontrará problemas para instala-los.

Edição Html e PHP

BlueFish – http://bluefish.openoffice.nl

Quanta – http://quanta.kdewebdev.org

Eclipse – http://www.eclipse.org

Edição Html Wysiwyg (what you see is what you get)

NVU – http://www.nvu.com

Programas Gráficos

GIMP – http://www.gimp.org

3 – HTTP e HTML : Noções

3.1 HTTP

O HTTP (HyperText Transfer Protocol) é o protocolo responsável pelo funcionamento da World

Wide Web. Torna possível a visualização dos documentos hipermídias, como textos, gráficos, som, imagem e outros recursos. É um protocolo relativamente simples.

O HTML é uma linguagem em forma de script, utilizada para formatar documentos para utilização

com o protocolo http. Não pode ser considerada uma linguagem de programação, pois não

oferece recursos básicos que uma linguagem de programação possui: variáveis, laços, estruturas condicionais e etc. O código HTML é escrito através da utilização de etiquetas (tags) que definem

as diversas áreas da página (cabeçalho, título, corpo) e sua formatação.

Os arquivos html são lidos e interpretados localmente pelo programa cliente, que é o browser ou

navegador web.

3.1.2 Transação HTTP Para que as páginas que solicitamos ao navegador sejam devidamente apresentadas para nós, todo um processo de solicitação / resposta (request / response) é realizado:

solicitação / resposta (request / response) é realizado: 3.2 HTML – Tags Básicas <html> e </html>

3.2 HTML – Tags Básicas

<html> e </html> Marca o início e o fim do documento html.

<head> e </head> Marca o inicio e o fim do cabeçalho.

<title> e </title> Marca o inicio e fim do titulo do documento.

<body> e </body> Marca o inicio e o fim do corpo do documento.

<html> <head> <title>titulo da pagina, que está dentro do cabeçalho.</title> </head> <body> Conteudo da pagina (corpo) </body> </html>

Tags de formatação

CÒDIGO

RESULTADO

<b> Este texto ficará em negrito </b>

 

Este texto ficará em negrito

<i> Este texto ficará em itálico </i>

 

Este texto ficará em itálico

<b><i>Este

texto

ficará

negrito

e

Este texto ficará negrito e itálico

itálico</i></b>

Repare que podemos utilizar tags “recursivas”, uma dentro da outra, mas temos que tomar cuidado para fecharmos essas tags de dentro para fora, caso contrário haverá erros na formatação da sua página.

<font> </font> A tag “font” é utilizada para definir a fonte e os atributos a ela relacionados, específicos do texto que fica entre as tags. Seus atributos específicos são:

face=”fontenome”

Tipo da fonte, como: Times, Arial, Verdana, Courier

O padrão é a Times New Roman, porém esta fonte nunca é recomendada para sites profissionais. As melhores opções são fontes sem serifa, Verdana e Arial.

Ex: <font face=”verdana”>Texto em Verdana</font>

size=”n”

Tamanho da fonte em pixels Ex: <font face=”verdana” size=”10”>Texto aqui</font>

color=”#nnnnnn” (cor em hexadecimal)*

Cor da fonte

Ex: <font color=”#000000”>blabla</font> ( o texto blabla ficará preto )

<p> </p> Define um parágrafo dentro das tags, acrescentando uma linha em branco ao fim do parágrafo. É utilizado para especificar definições de alinhamento, através do atributo align=”forma”.

align=”center” – alinhamento ao centro

align=”left” – alinhamento à esquerda (padrão)

align=”right” – alinhamento à direita

<br> Quebra de linha. Tag única.

<hn></hn> Estilos de títulos (header). N pode ser um valor do 1 ao 6 . Ex: <h1> Titulo </h1>

<hr> Linha horizontal. Atributo específico: noshade (retira a somba que vem por padrão). Tag Única. Ex: <hr noshade> Pode ser especificado também o tamanho e a espessura, através respectivamente das tags width=””(em pixels ou porcentagem, explicitado pelo sinal %) e size=”” (em pixels).

Imagens

As páginas html, por serem apenas uma seqüência de etiquetas especificadoras, não armazenam em si próprias as imagens que são exibidas por elas. Dessa forma, o que temos realmente na página html é um link para a imagem, identificado pela tag IMG, para que no momento em que o navegador encontrar esta tag, ao invés de apresentar ao usuário o link da imagem(como faria para um link comum), ele baixe a imagem do servidor e a mostre na tela do usuário, aonde o script html especifica que ela deve aparecer. A tag IMG é uma tag única, ou seja, não precisa ser fechada com outra tag. Suporta imagens GIF, JPG e PNG. A imagem aparecerá exatamente no local onde a tag for colocada. O Atributo específico da tag IMG é o SRC=”imagem”, onde “imagem” pode ser o caminho relativo do script até a imagem ou um caminho http completo. Exemplos:

<img src=”linuxfi.gif”> /* a imagem deve estar no mesmo diretório do arquivo html */ <img src=”imagens/linuxfi.jpg”> /* a imagem deve estar no subdiretório imagens, da pasta onde o script está */ <img src=”http://www.linuxfi.com.br/imagens/linuxfi.jpg”> /* a imagem deve estar no endereço especificado */

Links

Os links especificam um texto que, ao ser clicado pelo usuário, fará com que o endereço atribuído seja aberto no navegador, na mesma janela(por padrão) ou em uma nova janela. É importante colocar o endereço completo (com o http://) se você estiver querendo direcionar o usuário para um site externo, pois qualquer coisa sem http:// ou ftp:// na frente será compreendido como um endereço relativo, de dentro do seu site. Caso o documento apontado não seja um arquivo interpretável pelo navegador, este perguntará ao usuário se deseja fazer download do documento.

<a href=”http://www.linuxfi.com.br”>Clique Aqui!</a> // o texto “Clique Aqui!” aparecerá com um link para http://www.linuxfi.com.br. Ao clicar no link, a página especificada será aberta na janela do documento atual.

<a href=”http://www.linuxfi.com.br” target=”_blank”>Clique Aqui!</a> // A diferença aqui é que ao clicar no link, uma nova janela do navegador será aberta com a página especificada.

Atributos Gerais

Os atributos são utilizados dentro das tags para definirem a formatação daquela área ou objeto na página. Alguns atributos apenas se aplicam a determinados objetos, e colocá-los em outras tags não fará nenhuma diferença na aparência da página. Porém muitos atributos se aplicam a vários objetos diferentes:

bgcolor=”#nnnnnn”

(cor em hexadecimal)*

Cor de fundo – utilizada em tags como: <body>, <table>, <tr>, <td>

Ex: <body bgcolor=”#FFFFFF”> (define cor de fundo branca p/ corpo da pagina)

color=”#nnnnnn”

(cor em hexadecimal)*

Cor do objeto – utilizada em tags como <font>, <hr>

Ex: <font color=”#000000”>blabla</font> ( o texto blabla ficará preto )

background=”imagem.gif”

Define uma imagem “imagem.gif” de fundo. Usada em tags:

(caminho

da

imagem

<body>, <td>

relativo

ao

arquivo,

ou

endereço web completo do arquivo)

Ex: <body background=”linuxfi.gif”> (coloca a imagem linuxfi.gif como fundo do arquivo)

bgproperties=”fixed” Mantém fixa a imagem de fundo da página, de modo que quando ela é “rolada” a imagem não se mexe, criando efeito de marca dágua.

Ex: <body background=”linuxfi.gif” bgproperties=”fixed”>

width=””

Tamanho Horizontal, em pixels ou porcentagem(especificada com o sinal %). Utilizado para tags <table>, <td>, <hr> Ex: <td width=”100%”> teste </td>

height=””

Tamanho Vertical(Altura), em pixels ou porcentagem. Utilizado para tags <table>, <td>. Ex: <td height=”2” width=”100”> teste </td>

*As cores no HTML são especificadas através de uma notação Hexadecimal que vai do #FFFFFF (branco) ao #000000 (preto), mas você pode utilizar a notação de cores pelo nome (para as cores mais comuns) – black, red, blue, green, white, etc.

Tabelas Talvez uma das coisas mais complexas de serem entendidas inicialmente no html sejam as tabelas. Você tem que imaginar uma tabela de forma dividida, em várias células. Cada célula de uma tabela é uma TD, e cada linha (TR) pode conter várias células. Mas o padrão é que o número de células seja igual para cada linha. Caso você queira unir duas ou mais células, precisará utilizar o atributo “colspan”. Cada célula pode ter seus próprios atributos, como cor ou imagem de fundo, largura, altura, alinhamento.

Exemplo de tabela:

primeira linha</td> </tr> <tr>

<td bgcolor=”#FFFFFF”>Esta é a célula 1, ou seja, a coluna 1 da segunda linha</td> <td bgcolor=”#FFFFFF”>Esta é a célula2, ou seja, a coluna 2 da segunda linha</td> </tr> </table>

Este código produzirá um resultado semelhante a este:

Esta é a célula 1, ou seja, a coluna 1 da primeira linha

Esta é a célula 1, ou seja, a coluna 1 da segunda linha

Esta é a célula2, ou seja, a coluna 2 da primeira linha

Esta é a célula2, ou seja, a coluna 2 da segunda linha

A borda preta foi produzida pelo efeito criado do fundo da tabela ser preto, e o fundo das células ser branco, utilizando-se um espaçamento de tamanho 1 de uma célula para outra (gera uma borda preta).

4 – Iniciando em PHP

Com o PHP, temos uma grande variedade de possibilidades, e o melhor de tudo é que suas aplicações ficam muito mais “limpas” e legíveis do que aquelas escritas com CGI ou Perl, onde você precisa escrever um programa com uma série de comandos para poder exibir HTML. O PHP

é mesclável e você pode intercalar com tranqüilidade blocos de código html com blocos de código php, e ainda pode escrever linhas html como também javascripts, dentro do bloco php. Além disso, com o PHP você não gera apenas html, pode gerar também documentos pdf, imagens e até mesmo animações flash, utilizando algumas bibliotecas específicas.

4.1 Primeira página

Vamos colocar no ar nossa primeira página usando PHP. Estamos partindo do pressuposto de que o seu servidor WEB esteja funcionando e interpretando corretamente as páginas .php como scripts php.

Crie um arquivo chamado “ola.php” no diretório base do seu servidor WEB (Document_root) com

o seguinte conteúdo:

<html> <head> <title>PHP Teste</title> </head> <body> <?php echo "<p>Olá Mundo</p>"; ?> </body> </html>

recomenda-se a utilização do ambiente gráfico

para uma melhor visualização, contudo é possível visualizar através do lynx ou links em modo texto.) e digite o http://endereço-do-seu-servidor/ola.php para visualizar o resultado. Se você está usando o servidor local, o endereço será: http://localhost/ola.php ou http://127.0.0.1/ola.php .

Vá agora até o seu navegador(netscape, mozilla

Esse script é extremamente simples, talvez a coisa mais simples possível de se fazer com PHP, e você realmente não precisa usar PHP para gerar esse resultado, com HTML puro você poderia fazer a mesma coisa. O objetivo aqui é apenas mostrar a aparência básica do código php:

mesclado no meio do html, onde você quiser que a operação e a saída seja gerada, entre as tags identificadoras “<?php” que abre o bloco e “?>” que fecha o bloco.

Se você tentar rodar este exemplo e ele não mostrar nenhuma mensagem de saída, aparecer uma caixa de diálogo pedindo para você salvar o arquivo, ou você ver o arquivo em formato de texto, provavelmente o seu servidor web não está habilitado para interpretar códigos PHP. Possivelmente houve alguma falha na sua instalação. Dê uma examinada mais atenta à documentação para encontrar o que pode estar ocasionando o problema.

4.2 PHP: Sintaxe básica

4.2.1 Tags

Quando o PHP interpreta um arquivo, ele simplesmente repassa o texto do arquivo até encontrar uma das tags especiais que lhe diz para começar a interpretar o texto como código PHP. O interpretador então executa todo o código que encontra, até chegar em uma tag de fechamento

PHP, que novamente o coloca simplesmente repassando texto novamente. Este é o mecanismo que permite a inclusão de código PHP dentro do HTML: qualquer coisa fora das tags PHP é deixado como encontrado, enquanto tudo dentro é interpretado e executado.

Há quatro conjuntos de tags que podem ser usadas para marcar blocos de código PHP. Delas,

somente duas

outras podem ser ativadas ou desativadas a partir do arquivo de configuração php.ini. Enquanto

as formas reduzidas das tags ou no seu estilo ASP serem convenientes, elas não são portáveis em todas as versões. Além disso, se você pretende incluir código PHP em XML ou XHTML, você

precisará usar a forma <?php

.</script>) são sempre disponíveis. As

.?> e <script

?> para compatibilidade com o padrão XML.

No nosso curso, vamos sempre utilizar o padrão, que é a forma: <?php

?> .

A tag de fechamento incluirá uma nova linha em branco automaticamente se uma não estiver

presente. Além disso, a tag de fechamento automaticamente implica num ponto e vírgula: você não precisa ter um ponto e vírgula no fim da última linha de código PHP. Fechar o bloco de PHP

no final do arquivo é opcional.

PHP também suporta a utilização de estruturas como essa:

<?php if ($expression) { ?> <strong>Isso é verdadeiro.</strong> <?php } else { ?> <strong>Isto é falso.</strong> <?php

}

?>

Isso funciona como esperado porque quando o PHP encontra a tag de fechamento ?>, ele simplesmente começa a imprimir tudo até encontrar outra tag de abertura. Obviamente, o exemplo acima se aplica a exibição de grandes blocos de texto, uma vez que sair do modo de interpretação do PHP é geralmente mais eficiente que imprimir todo o texto através de funções como “echo”.

4.2.2 Separador de instruções

Instruções são separadas da mesma forma que o C ou o Perl - cada instrução termina com um ponto e vírgula.

A tag de fechamento (?>) também implica no fim de uma instrução, então os exemplos seguintes

são equivalentes:

<?php echo "Isto é um teste"; ?>

<?php echo "Isto é um outro teste" ?>

4.2.3 Comentários

O PHP suporta comentários do 'C', 'C++' e Unix shell. Por exemplo:

<?php echo "Isto é um teste"; //Comentário de uma linha no C++

/* Isto é um comentário de mais de uma linha e aqui temos outra linha */

echo "Isto é um outro teste";

echo "O último teste"; ?>

#Comentário no estilo Unix shell

Os comentários de uma linha só têm efeito até o fim da linha ou fim do bloco de código PHP atual, o que ocorrer primeiro.

4.3 Tipos

O Php suporta oito tipos primitivos:

São quatros tipos básicos:

boolean – pode ser apenas TRUE e FALSE.

integer – números inteiros

Atribuições possíveis para números inteiros:

$php = 1234; $php = -234; $php = 0234;

// inteiro positivo na base decimal // inteiro negativo na base decimal // inteiro na base octal-simbolizado pelo 0

$php = 0x34;

// equivale a 156 decimal // inteiro na base hexadecimal(simbolizado // pelo 0x) - equivale a 52 decimal.

A diferença entre inteiros simples e long está no número de bytes utilizados para

armazenar a variável. Como a escolha é feita pelo interpretador PHP de maneira transparente

para o usuário, podemos afirmar que os tipos são iguais.

float - números de ponto flutuante, ou também 'double':

$php = 1.234; $php = 23e4;

// equivale a 230.000

string – conjuntos de caracteres: “Curso de PHP”. É por natureza um tipo ARRAY.

Strings podem ser atribuídas de duas maneiras:

a) utilizando aspas simples ( ' ) - Desta maneira, o valor da variável será exatamente o texto contido entre as aspas (com exceção de \\ e \' - ver tabela abaixo)

b) utilizando aspas duplas ( " ) - Desta maneira, qualquer variável ou caracter de escape será expandido antes de ser atribuído.

Exemplo:

<? $teste = "Brasil"; $php = '---$teste--\n'; echo "$php"; ?>

A saída desse script será "---$teste--\n".

<? $teste = "Brasil"; $php = "---$teste---\n"; echo "$php"; ?>

A saída desse script será "---Brasil--" (com uma quebra de linha no final).

A tabela seguinte lista os caracteres de escape:

Sintaxe

Significado

\n

Nova linha

\r

Retorno de carro (semelhante a \n)

\t

Tabulação horizontal

\\

A

própria barra ( \ )

\$

O

símbolo $

\’

Aspa simples

\”

Aspa dupla

Dois tipos compostos:

array – arranjos ou matrizes.

object – utilizado para programação orientada a objeto.

E finalmente dois tipos especiais:

resource - utilizado para recursos da linguagem, como manipulação de arquivos, conexão com banco de dados, por isso não se pode converter um valor para o tipo resource.

NULL – comporta apenas o valor “NULL”, insensitive. Está presente em variáveis que não receberam nenhum valor, apagadas com unset() ou setadas explicitamente para NULL.

O tipo da variável geralmente não é configurado pelo programador: isto é decidido em tempo de execução pelo PHP, dependendo do contexto no qual a variável é usada. Porém, existem maneiras de forçar um tipo específico, ou verificar o tipo da variável, utilizando funções específicas como gettype(), ou is_type();

4.4 Transformação de tipos

A transformação de tipos em PHP pode ser feita das seguintes maneiras:

Coerções

Quando ocorrem determinadas operações (“+”, por exemplo) entre dois valores de tipos diferentes, o PHP converte o valor de um deles automaticamente (coerção). É interessante notar que se o operando for uma variável, seu valor não será alterado.

O tipo para o qual os valores dos operandos serão convertidos é determinado da seguinte forma:

Se um dos operandos for float, o outro será convertido para float, senão, se um deles for integer, o outro será convertido para integer.

Exemplo:

$php = “1”;

// $php é a string “1”

$php = $php + 1;// $php é o integer 2 $php = $php + 3.7;// $php é o double 5.7

$php = 1 + 1.5

// $php é o double 2.5

Como podemos notar, o PHP converte string para integer ou double mantendo o valor. O sistema utilizado pelo PHP para converter de strings para números é o seguinte:

É analisado o início da string. Se contiver um número, ele será avaliado. Senão, o valor será 0 (zero);

O número pode conter um sinal no início (“+” ou “-“);

Se a string contiver um ponto em sua parte numérica a ser analisada, ele será considerado, e o valor obtido será double;

Se a string contiver um “e” ou “E” em sua parte numérica a ser analisada, o valor seguinte será considerado como expoente da base 10, e o valor obtido será double.

Exemplos:

$php = 1 + “10.5”;

$php = 1 + “-1.3e3”; // $php == -1299

// $php == 11.5

$php = 1 + “teste10.5”; $php = 1 + “10testes”;

// $php == 1 // $php == 11

$php = 1 + "

10testes";

// $php == 11

$php = 1 + "+

10testes";

// $php == 1

Transformação explícita de tipos

A sintaxe do typecast de PHP é semelhante ao C: basta escrever o tipo entre parênteses antes do

valor.

Exemplo:

$php = 15; $php = (double) $php $php = 3.9 $php = (int) $php

// $php é integer (15) // $php é double (15.0) // $php é double (3.9) // $php é integer (3) // o valor decimal é truncado

Os tipos de cast permitidos são:

(int), (integer) (real), (double), (float) (string) (array) (object)

// muda para integer; // muda para float; // muda para string; // muda para array; // muda para objeto.

Com a função settype

A função settype converte uma variável para o tipo especificado, que pode ser “integer”, “double”,

“string”, “array” ou “object”.

Exemplo:

$php = 15;

// $php é integer

settype($php,double) // $php é double

4.5 Variáveis

As variáveis no PHP são representadas por um cifrão ($) seguido pelo nome da variável. Os nomes de variáveis no PHP fazem distinção entre maiúsculas e minúsculas.

Nomes de variáveis válidos em PHP seguem o padrão da maioria das linguagens de programação: devem iniciar com uma letra ou underline ( _ ), seguidos por letras, números ou underlines.

<?php $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // exibe "Bob, Joe"

$4site = 'not yet';

$_4site = 'not yet'; // válido; começa com um sublinhado

?>

// inválido; começa com um número

Existem dois tipos de atribuição a variáveis: por valor e por referência. Na atribuição por valor, a variável recebe uma cópia do conteúdo real que lhe é atribuído. Ou seja, caso haja uma alteração no valor da variável ‘original’, o valor da variável copiada continuará o mesmo, não sofrerá alteração nenhuma.

Na atribuição por referência, a variável se torna um ponteiro para o valor atribuído. Isso significa que ela na verdade estará apontando para uma posição da memória que corresponde a outra variável, e se esse valor for modificado, a variável ponteiro estará apontando para o novo valor, e ao utilizarmos a mesma, seu conteúdo terá sido atualizado. Da mesma forma, se você alterar o conteúdo da variável ponteiro, estará na verdade alterando o conteúdo da variável real.

A atribuição padrão feita no PHP é feita por valor. Mas você tem a opção (a partir do PHP 4) de

atribuir valores por referência a uma variável. Exemplos:

<?php

$foo = 'Bob'; $bar = &$foo;

// Atribui o valor 'Bob' a variável $foo // Referecia $foo através de $bar.

$bar = "My name is $bar"; // Altera $bar

echo $bar; echo $foo; // $foo é alterada também. ?>

Uma observação importante a se fazer: somente expressões nomeadas podem ser atribuídas por referência.

<?php $foo = 25; $bar = &$foo; // Esta atribuição é válida. $bar = &(24 * 7); // Inválido; referencia uma expressão sem nome.

function test()

{ return 25;

}

$bar = &test(); // Inválido. ?>

Escopo de Variáveis

O escopo de uma variável é o contexto onde ela foi definida, e em que parte de código ela é válida. A maior parte das variáveis do PHP tem somente escopo local. Quando criadas, elas são válidas daquele ponto da página até o final do documento.

Dentro de funções o escopo das variáveis também é local por padrão, isso significa que uma variável normal utilizada dentro de uma função não estará disponível para o restante do script. Existe porém o modificador GLOBAL, que modifica o escopo da variável e a torna global (válida em qualquer parte do script). Exemplo:

<?php $a = 1; $b = 2;

function Soma(){ global $a, $b;

$b = $a + $b;

}

Soma();

echo $b;

?>

O script acima imprimirá “3”. Declarando $a e $b globais na função, todas as referências a essas variáveis referem-se à sua versão global.

4.6 Arrays

Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um valor do tipo array é um dicionário onde os índices são as chaves de acesso.

Vale ressaltar que os índices podem ser valores de qualquer tipo e não somente inteiros. Inclusive, se os índices forem todos inteiros, estes não precisam formar um intervalo contínuo.

Como a checagem de tipos em PHP é dinâmica, valores de tipos diferentes podem ser usados como índices de array, assim como os valores mapeados também podem ser de diversos tipos. É importante notar que para índices string, devemos utilizar aspas ou apóstrofes, caso contrário o interpretador entenderá que se trata de uma constante. Variáveis também podem ser utilizadas como índice.

Exemplo:

<?

$indice=”teste2”;

$cor[1] = "vermelho"; $cor[2] = "verde"; $cor[3] = "azul"; $cor[‘teste’] = 1; $cor[$indice] = 2; ?>

Arrays Multidimensionais Podemos criar arrays multidimensionais, que podem ser vistos como matrizes de ordens variadas. Exemplo:

<?php

$matriz[1][‘cor’] = “vermelho”; $matriz[1][‘codigo’] = “1053”; $matriz[1][‘preco’] = “45,00”;

$matriz[2][‘cor’] = “azul”; $matriz[2][‘codigo’] =”1054”; $matriz[2][‘preco’] = “39,90”;

Esse recurso do PHP que, diferentemente de C, pode mesclar tipos diferentes de dados em um único array, é muito útil para criar estruturas de dados.

4.7 Constantes

Uma constante é um identificador (nome) para um único valor. Como o nome sugere, esse valor não pode mudar durante a execução do script . Por convenção, o nomes de constantes são sempre em maiúsculas. Elas são definidas através da função define().

O nome de uma constante tem as mesmas regras de qualquer identificador no PHP. Somente dados escalares (boolean, integer, float e string) podem ser colocados em constantes.

Você pode obter o valor de uma constante simplesmente especificando seu nome. Diferentemente de variáveis, você não pode prefixar uma constante com um sinal de $.

Nota: As constantes e variáveis (globais) estão em espaços de nomes diferentes. Isto implica, por exemplo, que TRUE e $TRUE são geralmente diferentes.

Estas são as diferenças entre constantes e variáveis:

Constantes não podem ter um sinal de cifrão ($) antes delas;

Constantes

podem

ser

definidas

utilizando

a

função

define(),

e

não

por

simples

assimilação;

Constantes podem ser definidas e acessadas de qualquer lugar sem que as regras de escopo de variáveis sejam aplicadas;

Constantes não podem ser redefinidas ou eliminadas depois que elas são criadas;

Constantes só podem conter valores escalares.

<?php define("CONSTANT", "Hello world."); echo CONSTANT; // imprime "Hello world." echo Constant; // imprime "Constant" e gera um alerta notice.

?>

4.8 Variáveis Pré-Definidas - SuperGlobais

As variáveis pré-definidas do PHP são superglobais, ou seja, são válidas em qualquer escopo do programa. Você não pode utilizar os nomes das superglobais como identificadores para variáveis e algumas delas, como a $_SERVER, não podem ser modificadas diretamente por você, pois dependem de configurações no servidor.

$GLOBALS

Contém um referência para todas as variáveis que são atualmente disponíveis dentro do escopo global do script. As chaves desse array são os nomes das variáveis globais. $GLOBALS existe desde o PHP 3.

$_SERVER

Variáveis criadas pelo servidor web ou diretamente relacionadas ao ambiente de execução do script atual. Exemplos:

$_SERVER[‘PHP_SELF'] – Refere-se ao nome do arquivo de script atualmente em uso.

$_SERVER[‘REMOTE_ADDR'] – O Endereço IP que requisitou a conexão http.

$_GET

Variáveis postadas para o script via método HTTP GET.

$_POST

Variáveis postadas para o script via método HTTP POST.

$_COOKIE

Variáveis postadas para o script via cookies HTTP.

$_FILES

Variáveis postadas para o script via transferência de arquivos HTTP.

$_ENV

Variáveis disponíveis no script do ambiente de execução.

$_REQUEST

Variáveis postadas para o script por todos os mecanismos de input(GET, POST, e COOKIE).

$_SESSION

Variáveis que estão atualmente registradas na sessão do script.

5.1 echo

exibe uma ou mais strings.

5 – Funções de Saída

echo “Isso é um exemplo com echo, usando aspas.”;

$var=”ok”; echo “Ele também imprime variáveis, $var”; /*imprime o texto: Ele também imprime variávies, ok*/

5.2 printf

exibe uma string formatada. As strings passadas podem ser indexadas para que não seja necessário repeti-las ou coloca-las na ordem exata em que irão aparecer na string formatadora.

<?php printf("O %s contém %d portas",$comodo,$portas); ?>

<?php $format = "O %2\$s contém %1\$d portas. É um ótimo %2\$s com %1\$d portas."; printf($format, $portas, $comodo); ?>

6 – Expressões

Expressões são as peças de construção mais importantes do PHP e na maioria das linguagens de programação. No PHP, quase tudo o que você escreve são expressões. A maneira mais simples e ainda mais precisa de definir uma expressão é "tudo o que produz/tem um valor".

As formas mais básicas de expressões são constantes e variáveis. Quando você digita "$a = 5",

você está atribuindo '5' para $a. '5', obviamente, tem o valor 5, ou, em outras palavras, '5' é uma

expressão com o valor 5 (neste caso, '5' é uma constante inteira).

Depois desta atribuição, você pode esperar que o valor de $a seja 5 também, assim se você escrever $b = $a, você pode esperar que $b se comporte da mesma forma que se você escrevesse $b = 5. Em outras palavras, $a é uma expressão com valor 5 também.

Obviamente, os valores em PHP não têm que ser inteiros, e muito freqüentemente eles não são.

O PHP suporta três tipos de valores escalares: valores inteiros, valores de ponto flutuante e

valores de string (valores escalares são valores que você não pode quebrar em pedaços menores, diferente de matrizes, por exemplo). O PHP também suporta dois tipos compostos (não- escalares): matrizes e objetos. Cada um destes tipos de valor podem ser atribuídos a variáveis ou retornadas de funções.

Um tipo muito comum de expressão são expressões de comparação. Estas expressões são avaliadas como 0 ou 1, significando FALSE ou TRUE, respectivamente. Este tipo de expressão é quase sempre utilizado em laços e estruturas condicionais (while, for, if).

6.1 Operadores

Operadores de Atribuição

O operador básico de atribuição é "=". A sua primeira inclinação deve ser a de pensar nisto como

"é igual". Não. Isto quer dizer, na verdade, que o operando da esquerda recebe o valor da

expressão da direita (ou seja, "é configurado para").

$a = 5; // A variável $a recebe o valor 5. $a=$b; // A variável $a recebe o valor de $b.

Operadores Aritméticos

Lembra-se da aritmética básica da escola? Estes operadores funcionam exatamente como aqueles.

Exemplo

Nome

Resultado

 

$a

+ $b

Adição

Soma de $a e $b.

$a

- $b

Subtração

Diferença entre $a e $b.

$a

* $b

Multiplicação

Produto de $a e $b.

$a

/ $b

Divisão

Quociente de $a por $b.

$a

% $b

Módulo

Resto de $a dividido por $b.

O

operador de divisão ("/") sempre retorna um valor com ponto flutuante, mesmo que os dois

operandos sejam inteiros (ou strings convetidos para inteiros).

Existem ainda alguns operadores combinados de atribuição e operação aritmética, iguais aos existentes na linguagem C:

Exemplo

Tipo

Significado

$a += $b

Adição

$a = $a + $b

$a -= $b

Subtração

$a = $a - $b

$a *= $b

Multiplicação

$a = $a * $b

$a /= $b

Divisão

$a = $a / $b

$a =% $b

Módulo

$a = $a % $b

Operadores de Comparação

Operadores de comparação, como os seus nomes implicam, permitem que você compare dois valores.

Exemplo

Nome

Resultado

$a == $b

Igual

Verdadeiro (TRUE) se $a é igual a $b.

$a === $b

Idêntico

Verdadeiro (TRUE) se $a é igual a $b, e eles são do mesmo tipo (somente para PHP4).

$a != $b

Diferente

Verdadeiro se $a não é igual a $b.

$a <> $b

Diferente

Verdadeiro se $a não é igual a $b.

$a !== $b

Não idêntico

Verdadeiro de $a não é igual a $b, ou eles não são do mesmo tipo (somente para o PHP4).

$a < $b

Menor que

Verdadeiro se $a é estritamente menor que $b.

$a > $b

Maior que

Verdadeiro se $a é estritamente maior que $b.

$a <= $b

Menor

ou

Verdadeiro se $a é menor ou igual a $b.

igual

$a >= $b

Maior

ou

Verdadeiro se $a é maior ou igual a $b.

igual

Operadores de Incremento/Decremento

O PHP suporta operadores de pré e pós-incremento e decremento no estilo C.

Exemplo

Nome

Efeito

++$a

Pré-incremento

Incrementa $a em um, e então retorna $a.

$a++

Pós-incremento

Retorna $a, e então incrementa $a em um.

--$a

Pré-decremento

Decrementa $a em um, e então retorna $a.

$a--

Pós-decremento

Retorna $a, e então decrementa $a em um.

Em PHP, como em C, há dois tipos de incremento - pré-incremento e pós-incremento. Tanto o pré-incremento quanto o pós-incremento, essencialmente, incrementam as variáveis, e o efeito

sobre a variável é idêntico. A diferença é com o valor da expressão de incremento. O pré- incremento, que é escrito '++$variavel', é avaliado como o valor de incremento (o PHP incrementa

a variável antes de ler seu valor, por isso o nome pré-incremento). O pós-incremento, que é

escrito '$variavel++' é avaliado como o valor original da variável, antes de ser incrementada (o PHP incrementa a variável depois de ler seu valor, por isso o nome 'pós-incremento').

Este exemplo ajudará você a entender melhor a diferença entre eles:

<?php

function double($i)

{

return $i*2;

}

$b = $a = 5;

$c = $a++;

$e = $d = ++$b;

/* atribui o valor cinco às variáveis $a e $b */ /* pós-incremento, atribui o valor original de $a (5) para $c */ /* pré-incremento, atribui o valor incrementado de $b (6) a $d e $e */

/* neste ponto, tanto $d quanto $e são iguais a 6 */

$f = double($d++);

/* atribui o dobro do valor de $d antes do incremento, 2*6 = 12 a $f */

$g = double(++$e); /* atribui o dobro do valor de $e depois do incremento, 2*7 = 14 a $g */

$h = $g += 10;

/* primeiro, $g é incrementado de 10 e termina com o valor 24. o valor da atribuição (24) é então atribuído a $h, e $h termina com o valor 24 também. */

?>

Operadores Lógicos

Os operadores lógicos são muito usados para comparações. Eles são muito importantes, podem reduzir a quantidade de estruturas encadeadas, facilitando a programação.

Exemplo

Nome

Resultado

$a and $b

E

Verdadeiro

(TRUE)

se

tanto

$a

quanto

$b

são

verdadeiros.

$a or $b

OU

Verdadeiro se $a ou $b são verdadeiros.

 

$a xor $b

XOR

Verdadeiro se $a ou $b são verdadeiros, mas não ambos.

! $a

NÃO

Verdadeiro se $a não é verdadeiro.

 

$a && $b

E

Verdadeiro se tanto $a quanto $b são verdadeiros.

 

$a || $b

OU

Verdadeiro se $a ou $b são verdadeiros.

 

A razão para as duas variantes dos operandos "and" e "or" é que eles operam com precedências diferentes.

Operadores de String

Há dois operadores de string. O primeiro é o operador de concatenação ('.'), que retorna a concatenação dos seus argumentos direito e esquerdo. O segundo é o operador de atribuição de concatenação ('.='), que acrescenta o argumento do lado direito no argumento do lado esquerdo.

<?php $a = "Olá "; $b = $a . "mundo!"; // agora $b contém "Olá mundo!"

$a = "Olá ";

$a .= "mundo!"; ?>

// agora $a contém "Olá mundo!"

6.2 Ordem de precedência dos operadores

A tabela a seguir mostra a ordem de precedência dos operadores no momento de avaliar as expressões:

Precedência

Associatividade

Operadores

1.

Esquerda

,

2.

Esquerda

or

3.

Esquerda

xor

4.

Esquerda

and

5.

Direita

print

6.

Esquerda

= += -= *= /= .= %= &= != ~= <<= >>=

7.

Esquerda

? :

8.

Esquerda

||

9.

Esquerda

&&

10.

Esquerda

|

11.

Esquerda

^

12.

Esquerda

&

13.

não associa

== !=

14.

não associa

< <= > >=

15.

Esquerda

<< >>

16.

Esquerda

+ - .

17.

Esquerda

* / %

18.

Direita

! ~ ++ -- (int) (double) (string) (array) (object) @

19.

Direita

[

7 - Formulários HTML

Os formulários constituem a mais importante ferramenta que devemos aprender sobre HTML para trabalharmos junto ao PHP. É através dos formulários que vamos interagir com usuários, transportando valores de uma página para outra, recebendo valores para inserção em tabelas MySQL etc.

7.1 A Tag FORM

A tag FORM especifica início e final de um formulário. Ela deve englobar quaisquer campos de formulário que estejam relacionados àquele formulário. Podem existir vários FORMS dentro de uma página, mas eles não podem ser colocados dentro de outros. Você pode ter qualquer coisa dentro de um formulário (tabelas, código php, qualquer coisa html, javascript etc), exceto outro formulário. Os formulários não são visualmente diferenciados do resto da página.

<FORM ACTION="url" METHOD=”post”>

Atributos:

</FORM>

ACTION

Especifica a página que receberá os dados do formulário e os tratará.

METHOD

Se não for passada nenhuma ACTION, o documento atual será utilizado. Especifica o método que deve ser usado para enviar os dados para a página de script. São dois métodos:

GET – o método padrão, envia as variáveis do formulário pela URL da

página de script.

Você

como:

http://www.linuxfi.com.br/action.php?var=valor&var2=valor2&var3=valor

3

veria

algo

É mais utilizado para passagens diretas de url+variáveis, sem a necessidade de que o usuário clique em um botão submit. Não deve ser utilizada para formulários. POST – o mais utilizado, envia as variáveis de formulário dentro do corpo do script action. Dessa maneira pode-se enviar textos e uma quantidade indeterminada de campos de formulário. ENCTYPE Utilizada para formulários que utilizam campos de envio de arquivos. Existe apenas um valor: application/x-www-form-urlencoded .

7.2 A tag INPUT

A tag INPUT é usada para especificar um elemento de entrada simples dentro de um formulário. É uma tag única (não há uma tag terminadora para ela). Existem vários tipos de input, o que é definido pelo atributo INPUT.

Type=”text”

Entrada de texto (padrão)

 

Type=”password”

Entrada

de

texto;

caracteres

digitados

serão

representados

como

asteriscos

Type=”checkbox”

Botão marcável(quadrado), pode ser on ou off. Pode-se marcar mais de um.

Type=”radio”

Botão marcável(redondo). Normalmente agrupa-se vários radio buttons sob o mesmo nome, e o usuário só pode marcar um deles (que dá o

valor da variável criada pelo nome do campo)

Type=”submit” Cria um botão de submit, através do qual o formulário é enviado.

Type=”reset”

Limpa todos os campos daquele formulário (ou os coloca com seus valores padrão).

NAME – Define o nome do campo, e é essencial, pois dá o nome da variável que recebe os valores passados para o script. Precisa estar presente em todos os campos, menos no submit e reset.

VALUE – Para campos “text” e “password”, define o valor padrão do campo ao abrir a página do formulário. Esse valor vai aparecer dentro do campo inicialmente, podendo ser modificado pelo usuário. Para campos radio e checkbox, define o valor do botão para quando ele está marcado.

CHECKED (sem valor) – Especifica que o radio ou checkbox é marcado por padrão.

SIZE – tamanho físico do campo que aparecerá na tela, em caracteres. Aplica-se apenas a campos text e password. Se não estiver presente, o valor padrão é 20.

MAXLENGTH – número máximo de caracteres que podem ser digitados dentro de um campo. Se não estiver presente, o padrão é ilimitado.

7.3 A tag SELECT

Diferente da tag INPUT, a SELECT tem uma tag de abertura e uma de fechamento. Dentro da tag são especificadas as opções, também sendo abertas e fechadas pela tag OPTION,

e o texto que estiver dentro desta última tag será o texto que aparecerá dentro do menu na página. Também devemos especificar o valor para cada opção. Exemplo:

<SELECT NAME=”teste”> <option value=”1”>Essa opção tem valor 1</option> <option value=”2” selected>Essa opção tem valor 2</option> <option value=”3”>Essa opção tem valor 3</option> </SELECT>

O

Atributo “selected” define que a opção 2 estará selecionada por padrão.

O

parâmetro opcional multiple permite a seleção de mais de uma linha.

O

atributo size=”tamanho” especifica o número de linhas visíveis. O padrão é 1(combobox), mas

você pode criar um listbox especificando um tamanho maior.

Ao chegar no script action PHP, haverá uma variável baseada no nome do select (teste), e o valor dependerá da opção que o usuário escolher. Vale frisar que podemos colocar códigos PHP em qualquer parte de uma página html, inclusive dentro de tags e dentro de formulários. Isso é importante para criarmos menus SELECT dinâmicos, que terão suas opções provenientes de uma tabela MySQL.

7.4 A tag TEXTAREA

A tag TEXTAREA cria uma caixa de texto com mais de uma linha. Seus atributos são:

NAME

Dará nome à variável desse campo no script action

ROWS

Número de linhas (tamanho vertical, em caracteres)

COLS

Número de colunas (tamanho horizontal, cada coluna é um caracter)

Campos TEXTAREA possuem automaticamente barras de rolagem. Como a SELECT, precisa de uma tag de fechamento. O que vier entre a tag de abertura e a tag de fechamento será o seu valor padrão (aqui não utilizamos o atributo VALUE). Exemplo, sem valor padrão:

<TEXTAREA NAME="foo" ROWS=4 COLS=40></TEXTAREA>

Exemplo com valor padrão:

<TEXTAREA NAME="foo" ROWS=4 COLS=40> Default contents go here. </TEXTAREA>

O conteúdo padrão precisa ser em texto plano, sem instruções html. Quebras de linha serão respeitadas (sem precisar usar a tag <br> ).

8 – Tratando Formulários

Agora vamos ver como é feita a passagem de valores de um formulário para um script action PHP.

Você deve lembrar de quando falamos a respeito das variáveis Globais no PHP. Elas são responsáveis por guardar valores que devem passar de página para página, como sessões, cookies, informações do servidor HTTP e formulários.

Nesse momento iremos ver a importância dos nomes dos campos que definimos nos nossos formulários, pois eles serão a chave de arrays associativos que conterão os valores passados pelo usuário através do formulário. Você também deve lembrar de quando falamos sobre arrays associativos, que contém strings como índices e esses índices devem vir ente apóstrofes (ou aspas, porém apóstrofes são mais recomendados para não causarem confusão com as aspas utilizadas na sintaxe de vários comandos).

8.1 - HTTP GET - $_GET

$_GET é um array que contém todas as variáveis passadas para o script atual através de um formulário HTTP GET.

Tomemos por exemplo o seguinte formulário, no documento formulario.htm :

<form method=”GET” action=”formaction.php”> Digite seu nome:

<input type=”text” name=”nome”><br> Digite seu telefone:

<input type=”text” name=”fone”> </form>

E agora veremos o arquivo formaction.php :

<?php

$nome=$_GET[‘nome’]; $fone = $_GET[‘fone’];

echo “Seu nome é $none<BR>”; echo “Seu telefone é $fone”; ?>

Repare que criamos novas variáveis com os valores das variáveis globais provenientes do formulário. Isso é feito para facilitar e tornar o código mais claro, pois podemos ter problemas ao utilizar arrays associativos dentro de comandos como echo ou comandos mysql, por causa dos apóstrofos ou aspas.

Esse exemplo imprime os dados digitados pelo usuário.

8.2

- HTTP POST - $_POST

$_POST é um array que contém todas as variáveis passadas para o script atual através de um formulário HTTP POST.

O esquema é o mesmo das variáveis $_GET.

Tomemos por exemplo o seguinte formulário, no documento formulario.htm :

<form method=”POST” action=”formaction.php”> Digite seu nome:

<input type=”text” name=”nome”><br> Digite seu telefone:

<input type=”text” name=”fone”>

</form>

E agora veremos o arquivo formaction.php :

<?php

$nome=$_POST[‘nome’]; $fone = $_POST[‘fone’];

echo “Seu nome é $none<BR>”;

echo “Seu telefone é $fone”;

?>

Note que a única coisa que vai mudar dos exemplos com GET são o método do formulário (POST) e o nome do array global ($_POST).

8.3 – O Array $_FILES

$_FILES contém informações de arquivos enviados por formulários. Nós iremos abordar esse assunto no decorrer do curso pois existem alguns detalhes específicos sobre arquivos que transformam esse array em um array multidimensional, contudo a idéia é a mesma dos outros arrays globais de formulários.

8.4 – Dicas para seu formulário

a. Ao trabalharmos com datas (como data de nascimento), o ideal é criar três campos separados,

um para dia, outro para mês e outro para ano. Isso é muito importante para termos controle sobre cada dado isoladamente, podendo manipula-los para transformar em diferentes formatos de data,

que é necessário quando trabalhamos com bancos de dados(a maioria guarda a data no formato ano-mês-dia).

o

b.

Especifique os valores maxwidth e size, para organizar e limitar a quantidade de caracteres que

o

usuário pode digitar no campo, pois ao lidar com bancos de dados existirá um tamanho limite

para cada campo de dado da tabela, e caso esse limite seja ultrapassado, alguns dados poderão

ser perdidos.

c. Também é muito importante fazer verificações nos campos de formulário, para evitar erros por

parte do preenchimento do usuário, e isso será visto mais tarde com as funções de Expressões

Regulares.

9 - Estruturas de Controle

As estruturas de controle (laços, estruturas condicionais) são construtores essenciais de uma linguagem de programação.

No PHP, assim como em C, uma expressão é considerada verdadeira (TRUE) se tiver um valor diferente de 0. Isso significa que qualquer valor diferente de zero será considerada uma expressão verdadeira para o PHP, e isso é muito importante quando vamos trabalhar com estruturas de controle, pois elas utilizam o conceito de verdadeiro e falso para realizarem suas ações.

9.1 – Condicionais

9.1.1 - IF

A

construção if (se) é uma das mais importantes implementações de muitas linguagens, incluindo

o

PHP. Ela permite a execução condicional de fragmentos de código. O PHP implementa uma

estrutura if que é similar àquela do C:

if

(expressao) {

instruções;

}

expressao é avaliado por seu contexto Booleano. Se expressao for avaliado como TRUE, o PHP executará instrucoes, e se for avaliado como FALSE, elas serão ignoradas.

Os exemplos a seguir mostrariam “a é maior que b” se $a for maior que $b:

<?php

if

($a > $b) { echo "a é maior que b";

}

 

?>

Se $a fosse menor que $b, a instrução echo seria ignorada, e o interpretador pularia para a parte do código logo após as instruções especificadas no if (após o “}” ).

Caso haja apenas uma instrução, não há necessidade do uso de parênteses, mas a título de aprendizagem e para evitar confusões, vamos utilizar os parênteses mesmo para estes casos.

Algumas vezes, os iniciantes em linguagens como C e derivados(como é o caso do PHP), se confundem pelo fato de que você pode usar qualquer expressão válida como controle do IF. Isto é, você não fica restrito a expressões envolvendo os operadores relacionais e lógicos (como é o caso em linguagens como Pascal). O interpretador precisa apenas de um valor zero ou diferente de zero. Desta maneira, quando queremos verificar se uma variável contém um valor diferente de zero, podemos simplesmente utilizar:

If($var) echo “Diferente de zero.”;

Isso é a mesma coisa de escrever:

if($var != 0) echo “Diferente de zero”;

Contudo, esta maneira é redundante. No caso contrário (se você quer executar o if quando a variável for igual a zero), basta “negarmos” a expressão com o sinal “!” :

if(!$var) echo “Igual a zero!”;

Isso é a mesma coisa de escrevermos: if($var == 0) echo “Igual a zero”;

Em PHP temos uma função que sempre é muito utilizada, e serve para verificar se uma variável existe (foi iniciada):

bool isset ( mixed var [, mixed var [,

Retorna TRUE se a variável existir, e FALSE se ela não existir. Isso é utilizado sempre, para verificar por exemplo se um certo valor foi passado por formulário.

]])

if(isset($_GET[‘userid’])) {

$id=$_GET[‘userid’];

echo “usuário de id $id”;

}

9.1.2 ELSE

Freqüentemente você vai querer executar uma instrução se uma certa condição for encontrada, e uma instrução diferente se a condição não for encontrada. Isto é o que o else (se não) faz. else estende um comando if para executar uma instrução caso a expressão no comando if seja avaliada como FALSE. Por exemplo, o código a seguir mostraria “a é maior que b” se $a for maior que $b, e “a NÃO é maior que b” caso contrário:

<?php if ($a > $b) { echo "a é maior que b"; } else { echo "a NÃO é maior que b";

}

?>

O comando else só é executado se a expressão if for avaliada como FALSE, e havendo qualquer expressão elseif, somente se todas elas forem avaliadas como FALSE também.

9.1.3 ELSEIF (ou else if)

elseif, como seu nome sugere, é uma combinação de if e else. Da mesma forma que o else, ele estende um comando if para executar uma instrução diferente no caso de a expressão if original ser avaliada como FALSE. Porém, ao contrário de else, ele executará aquela expressão alternativa somente se a expressão condicional do elseif for avaliada como TRUE. Por exemplo, o código a seguir mostraria a é maior que b, a é igual a b ou a é menor que b:

<?php if ($a > $b) { echo "a é maior que b";

}

elseif ($a == $b) { echo "a é igual a b";

}

else { echo "a é menor que b";

}

?>

É importante lembrar que o ELSE é a última opção, caso nenhuma das outras (if e elseifs) forem verdadeiras, ele vai ser executado, por isso ele deve vir por último (após o if e todos os elseifs).

9.1.4 SWITCH

A instrução switch é similar a uma série de instruções IFs seguidas. Em muitas ocasiões, você poderá ter que comparar a mesma variável (ou expressão) com muitos valores diferentes, executando códigos diferentes dependendo de qual valor ele se encaixar. É exatamente para isso que a instrução switch serve.

<?php switch ($i) { case 0:

echo "i igual a 0"; break; case 1:

echo "i igual a 1"; break; case 2:

echo "i igual a 2"; break;

}

?>

9.2 – Repetição

9.2.1 WHILE

Loops while (enquanto) são as formas mais simples de loop no PHP. Eles se comportam como seus compatíveis em C. O formato básico de um comando while é:

while (expressao) { instruções;

}

O significado de um comando while é simples. Ele pede que o PHP execute os comandos aninhados repetidamente, enquanto a expressão do while é avaliada como TRUE. O valor da expressão é verificada cada vez que se passa no começo do 'loop', desta forma, mesmo que este valor mude durante a execução do(s) comando(s) aninhado(s), a execução não parará até que o fim da iteração (cada vez que o PHP executa os comandos dentro do 'loop' é uma iteração). Às vezes, se a expressão while é avaliada como FALSE logo no início, o(s) comando(s) aninhado(s) não será(ão) rodado(s) nem uma vez sequer.

9.2.2

DO WHILE

Loops do

verificada apenas no final de cada iteração, em vez de no começo. Por essa razão, a primeira

iteração de um loop do

é sempre executada (a condição só é verificada no fim da iteração)

são bem similares aos loops while, exceto pelo fato de que a condição é

while

while

enquanto que num while normal, se a expressão é avaliada como FALSE logo “de primeira”, a

execução do loop terminaria imediatamente.

<?php $i = 0; do {

echo $i; } while ($i > 0);

?>

9.2.3 FOR

Loops for são os laços mais complexos em PHP. Eles se comportam como os seus compatíveis em C. A sintaxe de um loop for é:

for (expr1; expr2; expr3) { instruções;

}

A primeira expressão (expr1) é avaliada (executada) uma vez incondicionalmente no começo do loop.

No começo de cada iteração, expr2 é avaliada. Se ela é avaliada como TRUE, o loop continua e o(s) comando(s) aninhado(s) é(são) executado(s). Se é avaliada como FALSE, a execução do 'loop' termina.

No fim de cada iteração, expr3 é avaliada (executada).

Cada uma das expressões pode ser vazia. expr2 vazia significa que o loop pode rodar indefinidamente (PHP considera-a implicitamente como TRUE, como em C.

Considere os seguintes exemplos. Todos eles mostram números de 1 a 10:

<?php /* exemplo 1 */

for ($i = 1; $i <= 10; $i++) { echo $i;

}

/* exemplo 2 */

for ($i = 1; ; $i++) { if ($i > 10) { break;

}

echo $i;

}

/* exemplo 3 */

$i = 1; for (; ; ) { if ($i > 10) { break; }
$i = 1;
for (; ;
)
{
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* exemplo 4 */
for ($i = 1; $i <= 10; echo $i, $i++);
?>

9.3 Quebra de fluxo

9.3.1 Break

O comando break pode ser utilizado em laços do, for e while, além do uso já visto no comando switch. Ao encontrar um break dentro de um desses laços, o interpretador PHP para imediatamente a execução do laço, seguindo normalmente o fluxo do script.

while ($x > 0) {

if ($x == 20) { echo “erro! x = 20”; break;

}

}

No trecho de código acima, o laço while tem uma condição para seu término normal ($x <= 0), mas foi utilizado o break para o caso de um término não previsto no início do laço. Assim o interpretador seguirá para o comando seguinte ao laço.

9.3.2 Continue

O comando continue também deve ser utilizado no interior de laços, e funciona de maneira semelhante ao break, com a diferença que o fluxo ao invés de sair do laço volta para o início dele. Vejamos o exemplo:

for ($i = 0; $i < 100; $i++) { if ($i % 2) continue; echo “ $i “;

}

O exemplo acima é uma maneira ineficiente de imprimir os números pares entre 0 e 99. O que o laço faz é testar se o resto da divisão entre o número e 2 é 0. Se for diferente de zero (valor lógico true) o interpretador encontrará um continue, que faz com que os comandos seguintes do interior do laço sejam ignorados, seguindo para a próxima iteração.

10 – Modularização

Agora que já vimos as sintaxes básicas da linguagem, vamos partir para a organização dos nossos scripts PHP.

A modularização é um fator muito importante, tanto para facilitar a programação, quanto para

deixar o código mais limpo e legível, poupando você de muitos problemas posteriores. Com a utilização de funções, você poupará tempo e inconveniências, tornando a manutenção de seu

sistema uma tarefa muito mais simples.

10.1 Inclusão de Arquivos

A inclusão de arquivos é uma forma básica de modularização, que será mais aproveitada quando

estudarmos funções.

Include() e Require()

A instrução include() inclui e avalia o arquivo informado.

A instrução require() é idêntica à include(), com exceção de como elas manipulam erros.

include() produz um Warning enquanto require() produzirá um Fatal Error. Em outras palavras, utilize require() se você deseja que um arquivo faltando interrompa o processamento da página. include() não se comporta da mesma maneira, permitindo que o script continue nessas situações. Quando um arquivo é incluído, seu código entra no escopo de variável da linha onde a inclusão ocorre. Qualquer variável disponível da linha onde a chamada da inclusão ocorre estará disponível para o arquivo incluído, daquele ponto em diante.

10.2 Funções

Funções são blocos de código que podem apenas executar procedimentos sem retornar valor algum, como também podem retornar algum valor, seja ele de qualquer tipo(strings, inteiros, arrays, etc). São essencialmente utilizadas para seqüências de código que precisam ser executadas várias vezes em partes diferentes do script ou em scripts diferentes. Para criarmos uma modularização realmente interessante, utilizamos um arquivo separado para guardarmos nossas funções, incluindo o mesmo em todos os scripts que irão utilizar as funções definidas.

Uma função pode receber ilimitados argumentos que serão utilizados dentro da mesma, como também pode não receber argumento nenhum. Argumentos são valores passados como parâmetro para uma função, que chegam até ela na forma de variáveis locais da função.

Vale salientar que os valores passados para uma função são passados por valor, ou seja, as modificações dentro da função não alterarão o valor real da variável passada.

O retorno de valores é feito através da função “return”.

Uma função pode ser definida usando-se a sintaxe como a do exemplo abaixo:

<?php

function foo ($numero1, $numero2)

{

echo "Exemplo de função.\n"; $soma=$numero1 + $numero2; return $soma;

}

?>

Neste exemplo, a função recebe 2 números como parâmetro, e retorna o valor da soma dos dois. No script principal, poderemos chama-la da seguinte maneira:

<?php

$resultado = soma(5,10); echo “O resultado foi: $resultado”;

?>

Como a função retorna o valor da soma, precisamos colocar esse valor em uma variável. Note que passamos por parâmetro dois números inteiros, e eles não precisam ser colocados entre aspas ou apóstrofos. Se os parâmetros fossem strings, precisaríamos coloca-las entre aspas ou apóstrofos. Veja agora outro exemplo utilizando variáveis como parâmetros:

<?php

$num1=10;

$num2=5;

$resultado = soma($num1,$num2); echo “O resultado da soma de $num1 e $num2 eh $resultado.”;

?>

Você tanto pode passar valores literais para a função, como variáveis. É importante seguir a ordem especificada na declaração da função. E lembre-se que, como o PHP não exige definição de tipos, você precisa às vezes se certificar que uma variável contém o tipo de dado esperado, para que seu script execute da maneira que você espera.

10.3 Argumentos com valores pré-definidos (default)

Em PHP é possível ter valores default para argumentos de funções, ou seja, valores que serão assumidos em caso de nada ser passado no lugar do argumento. Quando algum parâmetro é declarado desta maneira, a passagem do mesmo na chamada da função torna-se opcional.

function teste($php = “testando”) { echo $php;

}

teste(); // imprime “testando” teste(“outro teste”); // imprime “outro teste”

É bom lembrar que quando a função tem mais de um parâmetro, o que tem valor default deve ser declarado por último:

function teste($figura = circulo, $cor) { echo “a figura é um “. $figura. “ de cor “ $cor;

}

teste(azul);

/* A função não vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declaração correta é a seguinte: */

function teste2($cor, $figura = circulo) { echo “a figura é um “. $figura. “ de cor “ $cor;

}

teste2(azul);

/* Aqui a função funciona da maneira esperada, ou seja, imprime o texto: “a figura é um círculo de cor azul” */

10.4 Passagem de parâmetros por referência

Normalmente, a passagem de parâmetros em PHP é feita por valor, ou seja, se o conteúdo da variável for alterado, essa alteração não afeta a variável original.

Exemplo:

function mais5($numero) { $numero += 5;

}

$a = 3; mais5($a); //$a continua valendo 3

No exemplo acima, como a passagem de parâmetros é por valor, a função mais5 é inútil, já que após a execução sair da função, o valor anterior da variável é recuperado. Se a passagem de valor fosse feita por referência, a variável $a teria 8 como valor. O que ocorre normalmente é que ao ser chamada uma função, o interpretador salva todo o escopo atual, ou seja, os conteúdos das variáveis. Se uma dessas variáveis for passada como parâmetro, seu conteúdo fica preservado, pois a função irá trabalhar na verdade com uma cópia da variável. Porém, se a passagem de parâmetros for feita por referência, toda alteração que a função realizar no valor passado como parâmetro afetará a variável que o contém.

Há duas maneiras de fazer com que uma função tenha parâmetros passados por referência:

indicando isso na declaração da função, o que faz com que a passagem de parâmetros sempre seja assim; e também na própria chamada da função. Nos dois casos utiliza-se o modificador “&”. Vejamos um exemplo que ilustra os dois casos:

$a = $b = 1; mais5($a, $b); /* Neste caso, só $num1 terá seu valor alterado, pois a passagem por referência está definida na declaração da função. */

mais5($a, &$b); /* Aqui as duas variáveis terão seus valores alterados. */

11 – Banco de Dados

11.1 Sistema de Banco de Dados

É um sistema de armazenamento de dados cujo objetivo global é registrar e manter informações.

Um sistema de Banco de Dados envolve quatro componentes maiores: dados, hardware, software

e

usuários (atores que participam do processo).

É

um Conjunto estruturado de dados de uma empresa ou aplicação, armazenado em computador

e

cuja organização é determinada por um modelo de dados definido.

Por que usar bancos de dados ao invés de arquivos:

Arquivos não permitem o armazenamento de grandes volumes de dados;

O Sistema de backup é ineficiente;

O Acesso aos dados é mais complexo;

Não disponibilizam linguagem de consulta;

Esquema de dados é limitado;

Acesso concorrente aos dados por diversos usuários ou aplicações não apresenta segurança adequada.

Os sistemas de bancos de dados oferecem várias facilidades para a utilização com diferentes aplicações e finalidades, inclusive restringindo determinados tipos de acesso por usuário (permissões), o que faz uma diferença essencial no processo de criação de um sistema.

Antes de iniciarmos nosso sistema, devemos criar um projeto bem estruturado de banco de dados, para atender às nossas necessidades da melhor maneira possível. Um banco de dados deve ser uma representação “digital” da realidade que queremos armazenar. Devemos sempre prestar atenção a alguns fatores básicos para aplicarmos ao nosso projeto:

Evitar sempre a redundância de Dados

A redundância de dados é um fator comum em sistemas de dados não-compartilhados. Quando

você tem dados repetidos, gera uma dificuldade maior na manutenção, pois cada vez que uma alteração é feita, esta alteração tem de ser feita em vários locais diferentes. Dessa maneira você perde segurança (pois não se pode garantir que todas as vezes essas alterações redundantes irão funcionar) e processamento (logicamente isso causará uma lentidão maior no sistema).

O compartilhamento de dados é um fator decisivo em um banco de dados, pois elimina a redundância e evita inconsistência no banco.

Definir regras de acesso para diferentes usuários

É essencial saber quem vai poder acessar o que. O setor de compras, de vendas e a diretoria de

uma empresa têm focos diferentes em um sistema, em um banco de dados. E você deve especificar que parte do sistema cada um desses setores tem privilégios para acessar, e que tipo de acesso é esse (apenas leitura, alterações, remoção de dados etc). Isso é um fator essencial para a segurança do seu sistema.

Organizar os dados

É importante criar um bom projeto de banco de dados, organizando tudo o que deve ser

armazenado, tamanhos de campos, necessidades de cada um (se pode ficar em branco ou não,

se precisa ter determinados valores, etc). E isso deve ser feito à mão primeiramente, documentado, para que você não se perca depois, na hora de utilizar os dados.

11.2 MySQL

Os dados no MySQL são dispostos em forma de tabelas, similares às quais estamos acostumados nos programas de planilhas e outros que lidam com tabelas. Cada coluna é definida

ao

criar-se a tabela, e precisamos especificar o tipo de dado que será armazenado nela.

O

MySQL é um banco de dados ideal para Web, pois é leve e oferece uma infinidade de

funcionalidades, possuindo uma verdadeira linguagem própria, onde se é possível utilizar

operadores aritméticos, lógicos(NOT, AND, OR, XOR) e várias funções especiais para organizarem o resultado de sua pesquisa.

O MySQL suporta uma grande quantidade de tipos de dados, contudo vamos trabalhar com os

mais conhecidos e utilizados. Você pode conferir os outros tipos de dados suportados no manual

do

MySQL.

O

MySQL é case-insensitive, ou seja, não faz diferenciação entre maiúsculas e minúsculas.

Contudo, o php faz essa diferenciação, para os nomes de campos das tabelas. Por padrão, devemos definir todos os nomes de campos com letras minúsculas.

11.2.1 Referência da Linguagem

1. Tipos de dados

INT ou

INTEGER

FLOAT

DATE

TIME

VARCHAR

TEXT

ENUM

SET

Números inteiros.

Números de ponto flutuante Data no formato AAAA-MM-DD Hora, no formato HH:MM:SS Strings, tamanho variável de 0 a 255 caracteres Texto. Aceita até 65535 caracteres. Existem formas que aceitam mais caracteres: MEDIUMTEXT e LONGTEXT Uma enumeração, na qual o valor do objeto só pode ter um dos valores especificados na mesma. Ex: enum(‘janeiro’,’fevereiro’,’março’). Aceita até 65535 valores diferentes. Um conjunto de valores, na qual pode-se assumir vários valores dentre os especificados. Aceita até 64 opções escolhidas.

2. Criação e alteração de estruturas

SHOW

Mostra informações sobre bancos de dados e tabelas existentes:

mysql> show databases; mysql> show tables; mysql> show columns from tbl_nome;

CREATE

Cria bancos de dados e tabelas mysql> create database db_nome; mysql> create table tbl_nome ( coluna1 tipo, coluna2 tipo [

]

);

DROP

Apaga bancos de dados e tabelas inteiras mysql> drop database db_nome; mysql> drop table tbl_nome;

ALTER

Altera tabelas (adiciona, remove e atualiza – add, drop e change) mysql> alter table tbl_nome add coluna_nome tipo; mysql> alter table tbl_nome drop coluna_nome;

mysql> alter table tbl_nome change coluna_nome novo_nome tipo;

3. Inserção/alteração de dados

INSERT

Insere dados em uma tabela mysql> insert into tbl_nome values(‘campo01’,’campo02’,’campo03’);

UPDATE

Atualiza dados de uma tabela mysql> update tbl_nome set coluna01=’valor01’,coluna02=’valor02’,coluna03=’valor03’ where chave=’valor’;

DELETE

Remove dados de uma tabela mysql> delete from tbl_nome where chave=’valor’;

SELECT

Mostra dados de uma tabela mysql> select * from tbl_nome; mysql> select coluna_nome from tbl_nome;

11.2.2 Sintaxe Detalhada

1. CREATE TABLE – cria uma tabela

create table table_nome( tipo campo(tamanho), tipo campo2(tamanho), [ );

]

Exemplo:

mysql> create table exemplo( varchar nome(30), unsigned int idade);

Obs:

Campos são separados por vírgula;

O tipo de dado vem seguido pelo tamanho em parênteses, caso não seja especificado, assume-se o tamanho padrão para o tipo escolhido;

Todos os comandos sql vêm seguidos de um ponto-e-vírgula no final “;”.

2. INSERT – inserindo dados na tabela

insert into tbl_nome values(‘valor1’,’valor2’,[

]);

Exemplo:

mysql> insert into table exemplo values (‘Andre’, 25); Query OK, 1 row affected (0.00 sec)

A relação de entradas deve vir entre parênteses, separadas por vírgulas, e os dados devem seguir a ordem em que as colunas foram criadas na tabela.

3. SELECT – mostrando dados da tabela

O select pode ser usado para mostrar todos os dados da tabela, todos os dados de uma

determinada coluna, ou dados de uma linha específica, através da cláusula WHERE.

mysql> select * from table02; +---------+----------+

| field01 | field02

|

+---------+----------+

| 1 | Primeiro |

|

| 2 | Segundo

| 3 | Terceiro |

+---------+----------+

mysql> select field01 from table02; +---------+

| field01 |

+---------+

| 1

|

| 2

|

|

3

|

+---------+

O Select comporta uma grande quantidade de parâmetros que podem modificar a forma que o

resultado aparece na tela. Vamos ver alguns deles:

3.1 ORDER BY Especifica o campo (ou relação de campos) que será a chave de ordenação do resultado da pesquisa.

Exemplo:

mysql> select nome, email from alunos order by nome;

+---------------------------+----------------------------+

| nome

| email

|

+---------------------------+----------------------------+

| Caetano Veloso

| caetano_careta@gmail.com

|

| Carlos Eduardo Martins

| legolas_cem@yahoo.com.br

|

| Carolina de Almeira

| carol_al84@yahoo.com.br

|

| Tereza Batista

| terezabatista@yahoo.com.br |

+---------------------------+----------------------------+ Se você especificar mais de um campo para a cláusula order by, a ordenação(no padrão por ordem alfabética ou do menor para o maior) obedecerá à ordem dos argumentos especificados.

O ORDER BY pode ainda ter dois modificadores: ASC e DESC (ascendente e descendente). Se

você não especificar nada, o padrão é ASC(do menor para o maior). Mas você pode fazer

também:

mysql> select nome, email from alunos order by nome DESC;

+---------------------------+----------------------------+

| nome

| email

|

+---------------------------+----------------------------+

| Tereza Batista

| terezabatista@yahoo.com.br |

| Carolina de Almeira

| carol_al84@yahoo.com.br

|

| Carlos Eduardo Martins

| legolas_cem@yahoo.com.br

|

| Caetano Veloso

| caetano_careta@gmail.com

|

+---------------------------+----------------------------+ Neste caso, a ordenação ficou ao contrário (do maior para o menor).

3.2

LIMIT

Este modificador pode ser utilizado para limitar o número de resultados em um SELECT:

mysql> select nome,email from alunos limit 3;

+---------------------+----------------------------+

| nome

| email

|

+---------------------+----------------------------+

| Tereza Batista

| terezabatista@yahoo.com.br |

| Carolina de Almeira | carol_al84@yahoo.com.br

|

| Edna Maria Soares

| ednamshx@hotmail.com

|

+---------------------+----------------------------+

Note que a ordenação acima não está especificada, e o mysql fez uma ordenação baseada na ordem em que os dados foram inseridos na tabela(essa é a ordenação padrão).

Nós podemos utilizar todos os elementos citados até agora:

mysql> select nome, email from alunos where email LIKE '%hotmail%' order by nome desc limit 2; +-------------------+----------------------------+

| nome

| email

|

+-------------------+----------------------------+

| Juliano Moreira

| Edna Maria Soares | ednamshx@hotmail.com

| jmoreira_rock@hotmail.com |

|

+-------------------+----------------------------+

*Lembrando que só há diferenciação de maiúsculas para minúsculas nos nomes dos campos. Os comandos, cláusulas, funções, podem ser escritos de qualquer maneira.

3.3 INNER JOIN

A cláusula inner join serve para unir duas tabelas por um ponto em comum. Vamos usar o

seguinte exemplo: temos uma tabela de alunos, e cada aluno nesta tabela está relacionado a um curso. A forma ideal de trabalhar com isso é criando uma tabela com a relação de cursos e um número identificador para cada curso, e será esse número o ponto de ligação entre a tabela de cursos e a tabela de alunos, pois cada aluno terá o código do curso no seu cadastro. Com a cláusulas inner join, podemos de certa forma unir as duas tabelas e extrair o resultado de uma pesquisa dessa união. Exemplo:

mysql> select nome, email, turma_horario from alunos inner join turmas on alunos.turma_id=turmas.turma_id;

+---------------------------+----------------------------+----------------+

| nome

| email

| turma_horario |

+---------------------------+----------------------------+----------------+

| Carolina de Almeira

| Edna Maria Soares

| Juliano Ferreira

| Ter Quin 19:30 | | Ter Quin 19:30 |

| jferreira_rock@hotmail.com | Ter Quin 19:30 |

| carol_al84@yahoo.com.br

| ednamshx@hotmail.com

| Tereza Batista

| terezabatista@yahoo.com.br | Sabado 08:00

|

| Carlos Eduardo Martins

| legolas_cem@yahoo.com.br

| Sabado 08:00

|

| Felipe Batista dos Santos | felipeba@gmail.com

| Sabado 08:00

|

| Caetano Veloso

| caetano_careta@gmail.com

| Sabado 08:00

|

+---------------------------+----------------------------+----------------+

4. WHERE – Filtrando resultados

O Where é utilizado junto ao SELECT para filtrar os resultados obtidos, e junto ao UPDATE para

especificarmos qual linha deverá sofrer alterações.

SELECT col1,col2 [*] FROM tbl_nome WHERE coln=’valor’ ;

Exemplo:

mysql> select * from table02 WHERE field01=3;

+---------+

| field01 |

+---------+

| 1

|

| 2

|

|

3

|

+---------+

4.1 O Operador LIKE

O operador LIKE é utilizado no lugar do “=”, para fazermos pesquisas por campos que contenham

aquela porção de texto especificado (mas não precisa ser idêntico). Exemplo:

mysql> select nome, email from alunos where nome LIKE '%car%'; +------------------------+--------------------------+

| nome

| email

|

+------------------------+--------------------------+

| Carolina de Almeira

| carol_al84@yahoo.com.br |

| Carlos Eduardo Martins | legolas_cem@yahoo.com.br |

+------------------------+--------------------------+

Note que precisamos utilizar um símbolo de ‘%’, este símbolo funciona como um ‘*’, ou seja, a busca é por um campo “nome” que contenha a string ‘car’, e pode conter qualquer coisa à esquerda ou à direita dessa string.

5. UPDATE – atualizando entradas na tabela

O Update deve ser usado na maioria das vezes com a cláusula WHERE, para que possamos especificar qual linha(entrada na tabela) deverá ser atualizada. Caso o WHERE seja omitido, todas as linhas da tabela sofrerão a alteração. Preste bastante atenção para não modificar todos os dados da tabela por engano, quando você na verdade só queria modificar 01 valor.

UPDATE table_nome SET col1=’valor1’, col2=’valor2’, […], coln=’valorn’ WHERE col_base=’valor’;

6. DELETE – apagando registros

Sintaxe: DELETE [campo] FROM tabela WHERE condicao;

Se você não especificar o campo, serão apagados todos os campos do registro especificado.

A coisa mais importante a lembrar-se é da condição – se você não configurar uma, excluirá cada

entrada nas colunas especificadas do banco de dados, sem uma confirmação ou uma segunda

chance em muitos casos.

O que há em comum entre: DELETE x UPDATE

Você deve lembrar-se de utilizar uma condição toda vez que atualizar ou excluir. Se você não fizer isso, todas as linhas na tabela sofrerão a mesma alteração ou exclusão. Mesmo os programadores mais experientes esquecem a condição, para seu grande constrangimento profissional. Cuidado para não esquecer a condição.

11.2.3 Modificadores de tipos

O MySQL conta com alguns modificadores de tipos de dados, para modelar os campos de

maneira a se encaixarem melhor nas suas necessidades. Os modificadores são utilizados no

momento em que estamos criando as tabelas, ou modificando sua estrutura. Vamos ver alguns desses modificadores:

1. UNSIGNED

Especifica que o campo numérico é sem sinal. Pode ser usado para todos os campos de tipo numérico: int, float, double e todos os seus derivados. Exemplo:

mysql> create table mytable ( nome varchar(100), idade unsigned int);

2. NOT NULL

O Modificador Not Null define que aquele campo não poderá conter valores vazios, ou seja, cada vez que um registro novo for adicionado, aquele campo não pode ficar sem um valor. Caso não seja especificado um valor para aquele campo, o MySQL retornará um erro e o registro não será adicionado. Exemplo:

mysql> create table mytable ( nome varchar(100) NOT NULL);

3. AUTO_INCREMENT

Especifica que o campo deverá ser incrementado automaticamente a cada novo registro. Você deverá passar um valor NULL para esse campo, e ele se encarregará de criar valores únicos para si. Esse modificador é sempre usado para criar IDS, campos de identificação dentro de uma tabela. Veremos a seguir o modificar Primary Key, e um exemplo de criação de um campo ID.

4. PRIMARY KEY

Primary Key, ou Chave Primária, define que aquele registro será a chave primária da tabela, ou seja, o atributo que diferencia cada registro, um atributo único que é a chave de cada registro. Existem outros tipos de chave, mas nós só vamos estudar a primária, que é a mais importante.

Quando você cria uma tabela, você deve sempre definir um campo que será o identificador de cada registro, esse campo terá sempre de ter um valor diferente, pois cada registro é único, mesmo que possua todos os campos iguais. Esse campo é o campo de chave primária, e geralmente tem o nome “ID”, ou um nome relacionado. Exemplo:

mysql> create table usuários ( userid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, login varchar(20), senha varchar(20) );

Este exemplo cria uma tabela de logon de usuários, com dois campos de dados (login e senha) e um campo de identificação de usuário (userid). Estes campos de identificação são essenciais para modificarmos valores na tabela, sem corrermos o risco de estarmos alterando o registro errado (ou mais de um registro).

12 – PHP e MySQL – Integração

Aqui você tem uma referência das funções mais utilizadas pelo php para lidar com bancos de dados MySQL. Existem várias outras, e você pode pesquisa-las no Manual Oficial do PHP.

mysql_connect

Abre uma conexão com o servidor MySQL <?php $conecta=mysql_connect(“localhost”,”login”,”senha”); ?>

mysql_select_db

Seleciona um banco de dados MySQL <?php mysql_select_db($conecta,”linuxfi”); ?>

mysql_fetch_array

Busca o resultado de uma linha e o coloca como uma matriz associativa, matriz numérica ou ambas. O índice do array associativo é o nome do campo na tabela mysql, e o índice numérico vai de 0 até n colunas, na ordem em que elas foram criadas. <?php $resultado=mysql_fetch_array($query); ?>

mysql_num_rows

Retorna o número de linhas em um resultado. <?php $qtdade=mysql_num_rows($query); ?>

mysql_create_db

Cria um banco de dados do MySQL <?php mysql_create_db(“db_name”); ?>

mysql_query

Realiza uma query mysql. <?php $query=mysql_query(“SELECT * FROM usuarios”); ?>

mysql_error

Retorna o texto da mensagem de erro da operação anterior do MySQL <?php $query=mysql_query(“SELECT * FROM usuarios”) or die(mysql_error());

Exemplos:

Conecta no banco, pega todos os dados da tabela “users” e imprime na tela:

<?php $connect=mysql_connect(“localhost”,”login”,”senha”) or die(mysql_error()); mysql_select_db(“linuxfi”);

$query=mysql_query(“SELECT * FROM users”) or die(mysql_error());

while($linha=mysql_fetch_array($query)) {

$nome=$linha[‘nome’];

$end=$linha[‘end’];

$tel=$linha[‘tel’];

echo “Nome: $nome<br>Endereco: $end<br>Telefone: $tel<br><br>”;

}

?>

Vê quantos registros existem na tabela users:

<?php

$query=mysql_query(“SELECT * FROM users”) or die(mysql_error());

$numregs = mysql_num_rows($query);

echo “A tabela users tem $numregs registros.”;

?>

13.1 - Cookies

13 – Cookies e Sessões

Cookies consistem em um mecanismo criado para guardar dados do lado do cliente (client-side), possibilitando o acompanhamento ou identificação de usuários. Existe uma função específica para criar cookies (setcookie()), mas como os cookies fazem parte do cabeçalho http, essa função precisa ser chamada antes que qualquer outro dado seja enviado ao navegador. Essa função sofre as mesmas limitações que a função header(). Qualquer cookie enviado por você para o cliente será automaticamente uma variável no PHP, parecida com as variáveis de formulários, GET e POST, ficando no array $_COOKIES[].

SETCOOKIE Envia um cookie para o cliente

Sintaxe:

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

setcookie() define um cookie para ser enviado junto com o resto dos cabeçalhos HTTP. Como outros cabeçalhos, cookies devem ser enviados antes de qualquer saída do seu script (esta é uma restrição do protocolo). Isto requer que você utilize esta função antes de qualquer saída, incluindo as tags <html> e <head> assim como quaiquer espaços em branco. Se já tiver sido enviada qualquer saída antes dessa função, setcookie() irá falhar e retornar FALSE. Se setcookie() for bem sucedida, irá retornar TRUE. Isto não indica que o usuário aceitou o cookie.

Nota: No PHP 4, você pode usar o buffer de saída(output buffering) para enviar dados antes de utilizar esta função, o que fará com que toda a saída para o browser seja guardada em um buffer no servidor até que você execute a função. Você poderá fazer isso utilizando as funções ob_start() e ob_end_flush() no seu script, ou definindo a diretiva de configuração output_buffering no seu php.ini (no servidor WEB).

Parâmetro Descrição

name

O nome do cookie.

O valor do cookie. Este valor é

guardado no computador do cliente, não guarde informações sensíveis.

O tempo para o cookie expirar.

Este é um timestamp unix ,normalmente você vai defini-lo com a função time() mais o número de segundos que você queira até que o cookie expire. Ou você pode usar a função mktime().

value

expire

path

O caminho no servidor para qual

o cookie estará disponível.

Exemplos 'cookiename' é chamado como $_COOKIE['cookiename']

Assumindo que name é 'cookiename', este valor é obtido atraves de $_COOKIE['cookiename']

time()+60*60*24*30 irá fazer com que o cookie expire em 30 dias. Se expire não for definido, o cookie irá expirar ao fim da sessão (quando o browser fechar).

Se for definido '/', o cookie estará disponível para todo o domain(domínio). Se for definido '/foo/', o

cookie estará disponível apenas no diretório /foo/ e todos os sub-diretórios /foo/bar/ de domain. O valor padrão é o diretório que o cookie esta sendo definido.

Parâmetro Descrição

domain

O domínio que o cookie estará disponível.

secure

Indica que o cookie deve ser transmitido sobre uma conexão segura HTTPS. Quando for definido como 1, o cookie só será definido se existir uma conexão segura. O padrão é 0.

Observações:

Exemplos Para fazer o cookie estar disponível para todos os subdomínios de example.com então você deve definir como '.example.com'. O . não é requerido, mas torna compativel com mais browsers. Definindo como www.example.com fará o cookie estar disponível apenas para o subdomínio www.

0 ou 1

Para testar se um cookie foi realmente definido, confira o cookie na próxima vez que a pagina for carregada e antes que expire. O tempo de expiração é definido pelo parâmetro expire. Uma maneira fácil de fazer o debug da existência de cookies é simplesmente usar print_r($_COOKIE); (mostra todos os cookies definidos no momento).

Cookies devem ser excluídos com os mesmos parâmetros que foram criados. Se o argumento valor for uma string vazia (""), e todos os outros argumentos forem iguais, então o cookie com o nome especificado será excluído do cliente.

Nomes de cookies podem ser definidos como uma matriz de nomes e estarão disponíveis nos scripts PHP como uma matriz, mas serão guardados como cookies separados no sistema do usuário. Considere utilizar explode() para definir um cookie com múltiplos nomes e valores (as informações ficariam em uma variável só, seguindo um padrão de formatação para serem “retiradas” depois através dessas funções).

<?php $value = 'something from somewhere';

setcookie ("TestCookie", $value); setcookie ("TestCookie", $value,time()+3600); /* expira em uma hora */ setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".example.com", 1); ?> <?php // Mostra um cookie echo $_COOKIE["TestCookie"];

// Mostra todos os cookies print_r($_COOKIE); ?>

13.2 - Sessões

Suporte a sessões no PHP consiste em uma forma de preservar certos dados através de acessos subseqüentes. Isto te permite construir aplicações mais personalizadas e aumenta a atração do seu web site. É através de sessões que podemos fazer um sistema de autenticação onde o usuário informa login e senha, e faz logon no sistema, estando esses dados em arquivos ou bancos de dados no servidor.

Um visitante acessando seu web site será identificado por uma id única, a então chamada id de sessão. Esta id ou é guardada em um cookie do lado do usuário ou estará embutida na própria URL.

Sessões permitem registrar variáveis para serem passadas de página a página. Quando um visitante acessa seu site, o PHP checará automaticamente (se session.auto_start está definida para 1) ou no seu pedido (explicitamente através da session_start() ou implicitamente através da session_register()) se uma id de sessão especifica foi enviada com o pedido. Se este é o caso, o ambiente anterior guardado é restaurado.

<?php session_start(); // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; } else { $_SESSION['count']++;

}

?>

Exemplo – Desregistrando uma variável de Sessão (unset)

<?php

session_start();

unset($_SESSION['count']);

?>

Exemplo – Finalizando a sessão (session_destroy – destrói todos os dados de uma sessão)

<?php

session_start();

session_destroy();

?>

O ideal é integrarmos a funcionalidade das sessões com a utilização do MYSQL, criando um sistema de autenticação.

14. Manipulação de Arquivos

Com o PHP, podemos utilizar manipulação de arquivos, de forma praticamente idêntica à usada em C. O diferencial é que no PHP também podemos abrir páginas. Para podermos utilizar um arquivo, precisamos primeiro criar uma variável que será uma referência para o arquivo especificado, e isso é feito através da função fopen.

14.1 FOPEN

Abre o arquivo(local ou remoto) especificado, retorna uma referência para o arquivo.

Sintaxe:

file fopen ( string filename, string modo [, int use_include_path [, resource zcontext]])

Se o PHP decidir que filename se refere a um arquivo local, então ele tentará abrir o stream para

aquele arquivo. Esse arquivo precisa ser acessível pelo PHP, então você precisa certificar-se das permissões do arquivo/pasta especificados, no servidor.

Se filename está na forma "protocolo:// especificado (http e ftp são aceitos).

é assumido que seja uma URL, do protocolo

",

modo

Descrição

'r'

Abre somente leitura; coloca o ponteiro do arquivo no início.

'r+'

Abre para leitura e escrita; coloca o ponteiro do arquivo no início.

'w'

Abre para escrita somente; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.

'w+'

Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.

'a'

Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.

'a+'

Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.

'x'

Cria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo.

'x+'

Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no início. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo.

Exemplos válidos:

<?php $handle = fopen ("/home/rasmus/file.txt", "r"); $handle = fopen ("/home/rasmus/file.gif", "wb"); $handle = fopen ("http://www.example.com/", "r"); $handle = fopen ("ftp://user:password@example.com/somefile.txt", "w"); ?>

14.2

FEOF

Testa pelo fim-de-arquivo (eof) em um ponteiro de arquivo

Sintaxe:

bool feof ( resource handle)

Retorna TRUE se o ponteiro estiver no fim do arquivo (eof) ou um erro ocorrer. Caso contrário retorna FALSE.

14.3 FGETS

Lê uma linha de um ponteiro de arquivo

Sintaxe:

string fgets ( resource handle [, int length])

Retorna uma string com até length - 1 bytes lidos do arquivo apontado por handle. A leitura acaba quando length - 1 bytes foram lidos, encontra-se um fim de linha (newline) (que é incluido no valor retornado) ou no fim de arquivo (EOF) (o que acontecer primeiro). Se nenhum length for informado, o default é 1Kb, ou 1024 bytes. Se um erro ocorrer, retorna FALSE.

<?php $handle = fopen ("/tmp/arquivodeentrada.txt", "r"); while (!feof ($handle)) { $buffer = fgets($handle, 4096); echo $buffer;

}

fclose ($handle);

?>

14.4 FWRITE

Grava dados em arquivos binários

Sintaxe:

int