Sistemas de Informação · O que se deve saber antes de começar? ... indica o tamanho de uma...
Transcript of Sistemas de Informação · O que se deve saber antes de começar? ... indica o tamanho de uma...
Sistemas de Informação
Curso Técnico de Multimédia
Módulo 5 - PHP
2
Índice Capítulo I - Introdução ao PHP ............................................................................................... 7
O que se deve saber antes de começar? .............................................................................. 7
O que é o PHP? ................................................................................................................ 7
1. Client-Side Scripts ..................................................................................................... 7
2. Server-Side Scripts .................................................................................................... 7
Exemplos de Server-Side scripts ..................................................................................... 8
Capítulo II - PHP .................................................................................................................. 9
Sintaxe ........................................................................................................................... 9
Comentários em PHP....................................................................................................... 10
Exemplo ..................................................................................................................... 10
Variáveis ....................................................................................................................... 10
Exemplo: ................................................................................................................... 10
Regras da definição de variáveis ................................................................................... 11
Strings .......................................................................................................................... 11
Exemplo ..................................................................................................................... 11
Operadores para manipular strings ................................................................................... 11
Concatenação ............................................................................................................. 11
Exemplo ..................................................................................................................... 11
strlen() ...................................................................................................................... 12
Exemplo ..................................................................................................................... 12
strpos() ..................................................................................................................... 12
Exemplo ..................................................................................................................... 12
Operadores .................................................................................................................... 12
Operadores aritméticos ................................................................................................ 12
Operadores de atribuição ............................................................................................. 13
Operadores de comparação .......................................................................................... 13
Capítulo III - Comandos de Selecção .................................................................................... 14
If...Else e ElseIf .......................................................................................................... 14
If...Else ......................................................................................................................... 14
Sintaxe ...................................................................................................................... 14
Exemplo ..................................................................................................................... 15
ElseIf ............................................................................................................................ 15
Sintaxe ...................................................................................................................... 15
Exemplo ..................................................................................................................... 15
Sintaxe ...................................................................................................................... 16
Exemplo ..................................................................................................................... 17
Capítulo IV - Ciclos de repetição .......................................................................................... 17
While ............................................................................................................................ 18
Sintaxe ...................................................................................................................... 18
Exemplo ..................................................................................................................... 18
Do...while ...................................................................................................................... 18
Sintaxe ...................................................................................................................... 18
Exemplo ..................................................................................................................... 18
For ............................................................................................................................... 19
3
Sintaxe ...................................................................................................................... 19
Exemplo ..................................................................................................................... 19
Foreach ......................................................................................................................... 19
Sintaxe ...................................................................................................................... 19
Exemplo ..................................................................................................................... 19
Capítulo V - Arrays / Vetores ............................................................................................... 20
Vetores numéricos .......................................................................................................... 20
Exemplo de definição 1 ................................................................................................ 20
Exemplo de definição 2 ................................................................................................ 20
Exemplo de utilização: ................................................................................................. 21
Vetores associativos ....................................................................................................... 21
Exemplo de definição 1 ................................................................................................ 21
Exemplo de definição 2 ................................................................................................ 21
Exemplo de utilização .................................................................................................. 21
Vetores multidimensionais ............................................................................................... 22
Exemplo 1 .................................................................................................................. 22
Exemplo 2 .................................................................................................................. 23
Capítulo VI - Funções ......................................................................................................... 23
Criar uma função ............................................................................................................ 23
Exemplo ..................................................................................................................... 24
Chamar uma função ........................................................................................................ 24
Exemplo ..................................................................................................................... 24
Adicionar parâmetros ...................................................................................................... 25
Exemplo 1 .................................................................................................................. 25
Exemplo 2 .................................................................................................................. 25
Devolução de valores ...................................................................................................... 26
Exemplo ..................................................................................................................... 26
Capítulo VII - Formulários e Input de utilizador ...................................................................... 27
Lidar com formulários em PHP .......................................................................................... 27
Exemplo de formulário: ................................................................................................ 27
Validação de formulários ................................................................................................. 27
$_GET ........................................................................................................................... 28
A variável $_GET ........................................................................................................ 28
Exemplo ..................................................................................................................... 28
Porquê usar o $_GET? ................................................................................................. 29
$_POST ......................................................................................................................... 29
A variável $_POST ....................................................................................................... 29
Exemplo ..................................................................................................................... 29
Porquê usar o $_POST? ................................................................................................ 29
No entanto, não é possível marcar a página. ...................................................................... 30
$_REQUEST ................................................................................................................... 30
A variável $_REQUEST ................................................................................................. 30
Exemplo ..................................................................................................................... 30
Capítulo VIII - Date() ......................................................................................................... 30
Sintaxe ......................................................................................................................... 30
4
Formatar Data................................................................................................................ 30
Exemplo ..................................................................................................................... 30
Adicionar o Timestamp .................................................................................................... 31
mktime() ................................................................................................................... 31
Sintaxe ...................................................................................................................... 31
Exemplo ..................................................................................................................... 31
Capítulo IX - Inclusão de Ficheiros ....................................................................................... 32
Server Side Includes ....................................................................................................... 32
Include() ....................................................................................................................... 32
Exemplo 1 .................................................................................................................. 32
Exemplo 2 .................................................................................................................. 33
Require() ....................................................................................................................... 34
Exemplo include() ....................................................................................................... 34
Exemplo require() ....................................................................................................... 35
Capítulo X - Ficheiros ......................................................................................................... 36
Fopen() - abrir um ficheiro............................................................................................... 36
Exemplo 1 .................................................................................................................. 36
Exemplo 2 .................................................................................................................. 36
Fclose() - fechar um ficheiro ............................................................................................ 37
Exemplo ..................................................................................................................... 37
Feof() - verificar se está no fim do ficheiro ......................................................................... 37
Exemplo ..................................................................................................................... 37
Fgets() - ler um ficheiro linha a linha ................................................................................ 37
Exemplo ..................................................................................................................... 37
Fgetc() - ler um ficheiro carácter a carácter ....................................................................... 38
Exemplo ..................................................................................................................... 38
Criar um ficheiro upload de um formulário ......................................................................... 38
Exemplo ..................................................................................................................... 38
Criar o script de envio de ficheiro ..................................................................................... 39
Exemplo ..................................................................................................................... 39
Restrições de envio ......................................................................................................... 40
Exemplo ..................................................................................................................... 40
Gravar ficheiros enviados ................................................................................................ 41
Exemplo ..................................................................................................................... 41
O que é um cookie? ........................................................................................................ 43
Como criar um cookie? .................................................................................................... 43
Sintaxe ...................................................................................................................... 43
Exemplo ..................................................................................................................... 43
Como definir o valor de um cookie? .................................................................................. 44
Exemplo 1 .................................................................................................................. 44
Exemplo 2 .................................................................................................................. 44
Como apagar um cookie? ................................................................................................ 45
Exemplo ..................................................................................................................... 45
E se um browser não suportar cookies? ............................................................................. 45
Exemplo: ................................................................................................................... 45
5
Capítulo XIII - Sessões ....................................................................................................... 46
Variáveis de sessão ........................................................................................................ 46
Começar uma sessão ...................................................................................................... 47
Exemplo ..................................................................................................................... 47
Armazenar uma variável de sessão ................................................................................... 47
Exemplo 1 .................................................................................................................. 47
Exemplo 2 .................................................................................................................. 48
Eliminar uma sessão ....................................................................................................... 48
Exemplo 1 .................................................................................................................. 48
Exemplo 2 .................................................................................................................. 49
Capítulo XIV - Envio de emails ............................................................................................. 49
Mail() ............................................................................................................................ 49
Sintaxe ...................................................................................................................... 49
Email simples ................................................................................................................. 50
Exemplo ..................................................................................................................... 50
Formulários de email....................................................................................................... 50
Exemplo ..................................................................................................................... 50
Email Injections ............................................................................................................. 51
Exemplo ..................................................................................................................... 52
Parar Email Injections ..................................................................................................... 53
Exemplo ..................................................................................................................... 53
Capítulo XV - Tratamento de erros ....................................................................................... 55
Tratamento básico de erros: die() .................................................................................... 55
Exemplo ..................................................................................................................... 55
Criar um tratamento de Custom Error ............................................................................... 56
Sintaxe ...................................................................................................................... 56
Error Report levels .......................................................................................................... 57
Exemplo ..................................................................................................................... 57
Tratamento de erros: set_error_handler() ......................................................................... 58
Exemplo ..................................................................................................................... 58
Captura de erros: trigger_error() ...................................................................................... 59
Exemplo ..................................................................................................................... 59
Exemplo ..................................................................................................................... 59
Registo de erros: error_log() ........................................................................................... 60
Enviar uma mensagem de erro por email ....................................................................... 60
Exemplo ..................................................................................................................... 60
Capítulo XVI - Tratamento de excepções ............................................................................... 61
Uso básico de excepções ................................................................................................. 62
Exemplo ..................................................................................................................... 62
Try, throw e catch .......................................................................................................... 63
Exemplo ..................................................................................................................... 63
Explicação do exemplo ................................................................................................. 64
Criar uma classe customException .................................................................................... 64
Exemplo ..................................................................................................................... 64
Explicação do exemplo ................................................................................................. 65
6
Múltiplas excepções ........................................................................................................ 65
Exemplo ..................................................................................................................... 65
Explicação do exemplo ................................................................................................. 66
Relançamento de excepções ............................................................................................ 67
Exemplo ..................................................................................................................... 67
Explicação do exemplo ................................................................................................. 68
Set_Exception_Handler ................................................................................................... 69
Exemplo ..................................................................................................................... 69
Regras para excepções .................................................................................................... 69
Capítulo XVII - Filtros ......................................................................................................... 70
Porquê usar filtros? ......................................................................................................... 70
O que são dados externos?........................................................................................... 70
Funções e filtros ............................................................................................................. 70
Exemplo ..................................................................................................................... 71
Validação e Saneamento ................................................................................................. 71
Opções e bandeiras ........................................................................................................ 72
Exemplo ..................................................................................................................... 72
Validação de dados introduzidos ....................................................................................... 72
Exemplo ..................................................................................................................... 73
Explicação do exemplo ................................................................................................. 73
Sanear a introdução de dados .......................................................................................... 73
Exemplo ..................................................................................................................... 74
Explicação do exemplo ................................................................................................. 74
Filtrar introduções múltiplas ............................................................................................. 74
Exemplo ..................................................................................................................... 75
Explicação do exemplo ................................................................................................. 75
Filter Callback ................................................................................................................ 76
Exemplo ..................................................................................................................... 76
Explicação do exemplo ................................................................................................. 77
7
Capítulo I - Introdução ao PHP
Um ficheiro de PHP contém texto, tags de HTML e scripts. Scrips de PHP são
executáveis apenas no servidor.
O que se deve saber antes de começar?
Antes de se começar a estudar PHP devemos ter já noções de:
• HTML
• Alguns scripts (por exemplo javascript)
O que é o PHP?
• PHP significa: Hypertext Preprocessor.
• PHP é uma linguagem de criação de scripts embutida em HTML no
servidor.
1. Client-Side Scripts
São responsáveis pelas acções executadas no browser, sem contacto com o
servidor. Os exemplos mais comuns de aplicações client-side são imagens e
textos que mudam com o passar do rato e os javascripts.
Os scripts client-side são muito úteis para fazer validações de formulários sem
utilizar processamento do servidor, não provocando com isso tráfego na rede.
2. Server-Side Scripts
São responsáveis pelas acções executadas no servidor. Os exemplos mais
comuns de aplicações server-side são os scripts cgi´s e php.
8
No momento em que o utilizador solicita uma URL, o servidor apresentará no
browser um código HTML dinâmico, isto é muito útil para construções de
aplicações baseadas em informações on-line.
O PHP é uma linguagem de programação server-side scripts para criar sites
dinâmicos.
Sites dinâmicos são aqueles que devolvem para o cliente uma página criada em
tempo real.
Exemplos de Server-Side scripts
• Sistemas de busca (www.yahoo.com, www.cade.com.br, etc...); nele,
quando se escreve a palavra chave da busca e clica no botão pesquisar o
resultado da busca é processado online;
• Salas de chat; nelas, quando se escreve e clica no botão enviar, as
informações são processadas em tempo real conjuntamente com a dos
outros utilizadores, resultando num código HTML dinâmico gerado do
servidor para o cliente.
9
Utilizando a linguagem PHP é permitida a interacção directa do utilizador com o
site, através de formulários, contadores de acesso, estatísticas do site, ou criar
aplicações para uma rede local baseadas numa Intranet.
Aplicações em PHP são geradas com excelente performance e automaticamente
pelo servidor. O utilizador não vê o código PHP, somente o HTML; isto é muito
importante quando se lida com senhas.
Capítulo II - PHP
Sintaxe
O utilizador não consegue ver o código de PHP seleccionando para ver o código
fonte no browser, só se pode ver o código de HTML, isto porque o script é
executado no lado do servidor antes do resultado ser enviado para o browser.
Um script de PHP começa sempre com:
• <?php
E termina com
• ?>
Um ficheiro de PHP contém tags de HTML e algum código PHP.
<html>
<body>
<?php echo "Hello World";
?>
</body> </html>
10
Cada linha de PHP termina com ponto e vírgula.
Existem dois comandos pare escrever texto com PHP
• echo
Comentários em PHP
• // - para uma simples linha
• /* ... */ - para um bloco de linhas.
Exemplo
<html> <body> <?php
//This is a comment /* This is a comment block */
?>
</body> </html>
Variáveis
As variáveis são utilizadas para guardar valores, tais como números, palavras ou
resultado de funções, podendo ser usadas várias vezes no código.
Todas as variáveis em PHP começam com o símbolo $.
A forma correcta de definir uma variável é:
$var_name = value;
Exemplo:
<?php
$txt = "Hello World!";
$number = 16;
?>
No PHP uma variável não precisa de ser declarada antes de ser inicializada.
11
Regras da definição de variáveis
• O nome de uma variável precisa de começar com uma letra ou underscore
(_)
• O nome só poderá conter alfanuméricos e underscore (a-Z, 0-9, _)
• O nome de uma variável não poderá conter espaços em branco.
Strings
As variáveis string são usadas para guardar valores que contenham caracteres.
Exemplo
<?php
$txt="Hello World";
echo $txt;
?>
O resultado será:
Hello World
Operadores para manipular strings
Concatenação
Só existe um operador em PHP para strings, a concatenação – duas strings são
agrupadas numa só.
Exemplo
<?php
$txt1="Hello World";
$txt2="1234";
echo $txt1 . " " . $txt2;
?>
O resultado será:
Hello World 1234
12
strlen()
strlen() – indica o tamanho de uma string.
Exemplo
<?php
echo strlen("Hello world!");
?>
O resultado será:
12
strpos()
strpos() – procura uma string dentro de outra se encontra, devolve a posição
onde esta ocorre pela primeira vez, caso contrário retorna Falso.
Exemplo
<?php
echo strpos("Hello world!","world");
?>
O resultado sera:
6
Nota: A primeira posição será a posição 0
Operadores
Operadores aritméticos
Operador Descrição Exemplo Resultado
+ Adição x=2
x+2
4
- Subtracção x=2
5-x
3
* Multiplicação x=4 20
13
x*5
/ Divisão 15/5 5/2
3 2.5
% Modulo (resto da divisão) 5%2
10%8 10%2
1
2 0
++ Incremento x=5 x++
x=6
-- Decremento x=5
x--
x=4
Operadores de atribuição
Operador Exemplo Equivale a
= x=y x=y
+= x+=y x=x+y
-= x-=y x=x-y
*= x*=y x=x*y
/= x/=y x=x/y
.= x.=y x=x.y
%= x%=y x=x%y
Operadores de comparação
Operador Descrição Exemplo
== É igual a 5==8 devolve falso
!= Não é igual a 5!=8 devolve verdadeiro
> É maior que 5>8 devolve falso
< É menor que 5<8 devolve verdadeiro
>= É maior ou igual que 5>=8 devolve falso
<= É menor ou igual que 5<=8 devolve verdadeiro
14
Operadores lógicos
Operador Descrição Exemplo
&& e x=6
y=3
(x < 10 && y > 1) devolve
verdadeiro
|| ou x=6
y=3
(x==5 || y==5) devolve falso
! não x=6
y=3
!(x==y) devolve verdadeiro
Capítulo III - Comandos de Selecção
If...Else e ElseIf
Os comandos if, elseif e else em PHP são usados em diferentes acções, baseadas
em diferentes condições.
• if...else – é usado quando se que executar um bloco de instruções quando
a condição é verdadeira e outro quando a condição é verdadeira.
• elseif – é usado juntamente com o if…else para executar um bloco de
instruções se uma de várias condições for verdadeira.
If...Else
Sintaxe
if (condição)
código para ser executado se a condição for verdadeira;
else
código para ser executado se a condição for falsa;
15
Exemplo
Este exemplo escreve "Have a nice weekend!" se o dia corrente for Sexta-Feira,
caso contrário escreve "Have a nice day!":
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
else
echo "Have a nice day!";
?>
Se o código a ser executado tiver mais que uma linha, então serão necessárias
chavetas
ElseIf
Sintaxe
if (condição)
código para ser executado se a condição for verdadeira;
elseif (condição)
código para ser executado se a condição for verdadeira;
else
código para ser executado se a condição for falsa;
Exemplo
Este exemplo escreve "Have a nice weekend!" se o dia corrente for Sexta-Feira,
escreve "Have a nice Sunday!" se o dia corrente for Domingo caso contrário
escreve "Have a nice day!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
16
echo "Have a nice weekend!";
elseif ($d=="Sun")
echo "Have a nice Sunday!";
else
echo "Have a nice day!";
?>
</body>
</html>
Switch
Se queremos seleccionar um de vários blocos de código a executar, usamos o
comando Switch
Sintaxe
switch (expressao1)
{
case valor1:
código a executar se expressão1 = valor1;
break;
case valor2:
código a executar if expressão1 = valor2;
break;
default:
código a executar se expressão1 diferebte de valor1 e valor2
}
Notas:
• Depois de um bloco de código convém colocar break para que se saia do
switch;
• Default é usado no caso nenhum dos casos anteriores ser verdadeiro
17
Exemplo
<html>
<body>
<?php
switch ($x)
{
case 1:
echo "Number 1";
break;
case 2:
echo "Number 2";
break;
case 3:
echo "Number 3";
break;
default:
echo "No number between 1 and 3";
}
?>
</body>
</html>
Capítulo IV - Ciclos de repetição
Os ciclos de repetição em PHP são usados para executar um mesmo bloco de
código um número específico de vezes.
Em PHP existem os seguinte ciclos de repetição:
• while – executa o bloco de instruções se, e enquanto, uma condição se
verificar;
• do...while – executa o bloco de instruções uma vez e repete-o enquanto
uma condição se verificar;
• for – executa o bloco de instruções um numero especificado de vezes;
• foreach – executa o bloco de instruções para cada elemento de um array.
18
While
Sintaxe
while (condição)
bloco de instruções;
Exemplo
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br />";
$i++;
}
?>
Do...while
Sintaxe
do
{
code to be executed;
}while (condition);
Exemplo
<?php
$i=0;
do
{
$i++;
echo "The number is " . $i . "<br />";
}while ($i<5);
?>
19
For
Sintaxe
for (inicialização; condição; incremento)
{
bloco de instruções;
}
Exemplo
<?php
for ($i=1; $i<=5; $i++)
{
echo "Hello World!<br />";
}
?>
Foreach
Sintaxe
foreach (array contiver um valor)
{
Bloco de instruções;
}
Exemplo
<?php
$arr=array("one", "two", "three");
foreach ($arr as $value)
{
echo "Value: " . $value . "<br />";
}
?>
20
Capítulo V - Arrays / Vetores
Em vez de termos várias variáveis, podemos criar um vetor onde guardaremos
cada um dos valores das variáveis, desde que estas sejam do mesmo tipo.
Cada elemento de um vetor tem o seu nome para que possa ser facilmente
acedido.
Existem 3 tipos diferentes de vetores:
• vetores numérico
• vetores associativos
• vetores multidimensionais
Vetores numéricos
Um vetor numerico identifica cada elemento com um número.
Existem diferentes formas de criar um vetor numérico:
Exemplo de definição 1
Neste exemplo cria-se e atribuem-se valores simultaneamente ao vetor:
$names = array("Peter","Quagmire","Joe");
Exemplo de definição 2
Neste exemplo a atribuição é manualmente:
$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";
21
Exemplo de utilização:
<?php
$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";
echo $names[1] . " and " . $names[2] .
" are ". $names[0] . "'s neighbors";
?>
Resultado:
Quagmire and Joe are Peter's neighbors
Vetores associativos
Nestes vetores, a cada elemento é associado um valor.
Exemplo de definição 1
$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);
Exemplo de definição 2
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
Exemplo de utilização
<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
echo "Peter is " . $ages['Peter'] . " years old.";
?>
Resultado
Peter is 32 years old.
22
Vetores multidimensionais
Num vetor multidimensional cada elemento pode ser também um vetor, e cada
elemento desse vetor um novo vetor, e assim sucessivamente.
Exemplo 1
Neste exemplo vamos criar um vetor multidimensional com atribuição
automática.
$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);
O vetor irá ter o seguinte aspecto:
Array
(
[Griffin] => Array
(
23
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
)
Exemplo 2
Para escrever um valor do vetor acima descrito:
echo "Is " . $families['Griffin'][2] .
" a part of the Griffin family?";
O resultado será:
Is Megan a part of the Griffin family?
Capítulo VI - Funções
O grande poder do PHP vem da possibilidade de ter funções.
Criar uma função
Uma função é um bloco de instruções que pode ser executado sempre que
necessário.
Criar funções em PHP:
24
• Todas as funções começam com: "function()"
• Nome da função – deve permitir que se entenda o que faz peloo seu
nome. O nome de uma função tem de começar por uma letra ou
underscore.
• Depois do nome devemos colocar o código entre "{" e “}”.
Exemplo
Uma função que escreva o nome sempre que chamada
<?php
function writeMyName()
{
echo "Pedro";
}
writeMyName();
?>
Chamar uma função
Exemplo
Como chamar a função acima descrita:
function writeMyName()
{
echo "Pedro";
}
echo "Hello world!<br />";
echo "My name is ";
writeMyName();
echo ".<br />That's right, ";
writeMyName();
echo " is my name.";
?>
O resultado será:
25
Hello world!
My name is Pedro.
That's right, Pedro is my name.
Adicionar parâmetros
A nossa primeira função (writeMyName()) é um exemplo simples de como se
constrói uma função.
Para adicionar mais funcionalidades numa função podemos acrescentar
parâmetros, tais como variáveis.
Exemplo 1
O próximo exemplo escreve diferentes nomes, mas o mesmo apelido:
<?php
function writeMyName($fname)
{ echo $fname . " Francisco.<br />"; }
echo "My name is ";
writeMyName("Pedro");
echo "My name is ";
writeMyName("José");
echo "My name is ";
writeMyName("Carlos");
?>
O resultado será:
My name is Pedro Francisco.
My name is José Francisco.
My name is Carlos Francisco.
Exemplo 2
A próxima função tem dois parâmetros:
<?php
function writeMyName($fname,$punctuation)
26
{
echo $fname . " Francisco" . $punctuation . "<br />";
}
echo "My name is ";
writeMyName("Pedro",".");
echo "My name is ";
writeMyName("José","!");
echo "My name is ";
writeMyName("Carlos","...");
?>
O resultado será:
My name is Pedro Francisco.
My name is José Francisco!
My name is Carlos Francisco...
Devolução de valores
As funções em PHP podem também devolver valores:
Exemplo
<?php
function add($x,$y)
{
$total = $x + $y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
O resultado será:
1 + 16 = 17
27
Capítulo VII - Formulários e Input de utilizador
Lidar com formulários em PHP
Quando se lida com formulários de HTML e PHP qualquer elemento de um
formulário de uma página de HTML fica automaticamente válido para os scripts
de PHP.
Exemplo de formulário:
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
Este exemplo contém dois campos de introdução e um botão de submissão.
Quando se preenche o formulário e se clica no botão, os dados são enviados para
o ficheiro "welcome.php” que tem o seguinte aspecto:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
Um output desse ficheiro será, por exemplo:
Welcome John.
You are 28 years old.
Validação de formulários
Os dados introduzidos pelo utilizador deverão ser validados logo que possível. A
validação Cliente-Side é rápida, reduzindo o trabalho do servidor
28
No entanto, qualquer site que receba um enorme tráfego sobre os recursos do
servidor pode ter problemas a nível da segurança de dados, assim convém
utilizar sempre a validação de dados no Server-Side quando se trata de aceder a
base de dados.
Uma boa forma de validar um formulário no servidor é comentar o formulário
para a página onde este se encontra, em vez de saltar para uma página
diferente. O utilizador terá acesso às mensagens de erro na mesma página que o
formulário. Isto faz com que seja mais fácil de descobrir o erro.
$_GET
A variável $_GET
• A variável $_GET é um vetor de nomes e valores enviado pelo método GET
do HTTP.
• A informação pelo método GET é visível para todos, existindo um limite de
informação a enviar (max. 100 caracteres).
Exemplo
<form action="welcome.php" method="get">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
Quando o utilizador clicar no botão submeter, na barra de endereço aparecerá
algo deste género:
http://www.database.com/welcome.php?name=Peter&age=37
O ficheiro "welcome.php" poderá então usar a variável $_GET para recolher os
dados do formulário (notar que o nome dos campos do formulário serão
automaticamente colocados no vetor correspondente)
Welcome <?php echo $_GET["name"]; ?>.<br />
You are <?php echo $_GET["age"]; ?> years old!
29
Porquê usar o $_GET?
• Quando se utiliza a variável $ _GET todos os nomes e valores das
variáveis são exibidos no URL. (este método não deve ser usado quando
se enviam passwords ou outras informações sensíveis). No entanto,
porque as variáveis são exibidas no URL, é possível marcar a página, o
que poderá ser útil em alguns casos.
$_POST
A variável $_POST
• A variável $_GET é um vetor de nomes e valores enviado pelo método
POST do HTTP.
• A informação enviada de um formulário pelo método POST é invisível para
outros utilizadores e não existe um limite de informação a enviar.
Exemplo
<form action="welcome.php" method="post">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>
Quando o utilizador clicar no botão submeter, na barra de endereço não irá
aparecer nenhum dado do formulário, aparecendo algo deste género:
http://www.database.com/welcome.php
O ficheiro "welcome.php" poderá então usar a variável $_POST para recolher os
dados do formulário (notar que o nome dos campos do formulário serão
automaticamente colocados no vetor correspondente)
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old!
Porquê usar o $_POST?
• As variáveis enviadas com o POST do HTTP não são mostradas no URL
30
• As variáveis não têm limite de comprimento
No entanto, não é possível marcar a página.
$_REQUEST
A variável $_REQUEST
• A variável $ _REQUEST do PHP contém o conteúdo de ambos $ _GET, $
_POST e $ _COOKIE.
• A variável $ _REQUEST do PHP pode ser usada para obter os dados de um
formulário enviados com ambos os métodos GET e POST.
Exemplo
Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!
Capítulo VIII - Date()
A função date() é usada para formatar a data ou a hora.
Sintaxe
date(format,timestamp)
Formatar Data
O primeiro parâmetro da função date() especifica o formato da data/hora. Neste
caso, podemos indicar letras para nos referirmos ao dia, mês e ano:
• d - dia do mês (01-31)
• m - mês (01-12)
• Y – ano (em quarto dígitos)
Outros caracteres, como "/", ".", ou "-" podem ser inseridos entre as letras para
uma formatação adicional.
Exemplo
<?php
31
echo date("Y/m/d");
echo "<br />";
echo date("Y.m.d");
echo "<br />";
echo date("Y-m-d");
?>
O resultado sera:
2006/07/11
2006.07.11
2006-07-11
Adicionar o Timestamp
O segundo parâmetro da função date() especifica o timestamp. Este parâmetro,
opcional, indica o tempo, em segundos, desde 1 de Janeiro de 1970. É também
conhecido por Unix Timestamp.
mktime()
Existe a função mktime() que permite ver qual o valor de uma determinada data.
Sintaxe
mktime(hora, minuto, segundo, mês, dia, ano,is_dst)
Exemplo
Para ir para uma data futura, simplesmente adicionamos um dia ao argumento
da função mktime():
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>
O resultado será:
Tomorrow is 2006/07/12
32
Capítulo IX - Inclusão de Ficheiros
Server Side Includes
Server Side Includes (SSI) são usadas para criar funções, cabeçalhos, rodapés
ou elementos que serão usados várias vezes ou em múltiplas páginas.
Podemos inserir um elemento de uma página num página de PHP antes do
servidor o executar com as funções include() e require(). Estas duas funções são
similares, diferindo apenas no modo como lidam com os erros.
A função include() gera um aviso de erro, no entanto o processamento continua,
enquanto que a função require() gera um erro fatal, parando a execução após o
erro.
Estas duas funções são usadas para usadas para criar funções, cabeçalhos,
rodapés ou elementos que serão usados várias vezes ou em múltiplas páginas.
Isto pode permitir ao programador uma poupança de tempo. Significa que se
pode criar um elemento (cabeçalho, menu, …) standart que irá ser utilizador em
várias páginas. Quando um desses elementos for necessário, basta apenas
importá-lo do ficheiro. Também podemos mudar numa página apenas esse
objecto, deixando o resto igual.
Include()
A função include() copia todo o texto de um ficheiro especifico para um ficheiro
que use essa função.
Exemplo 1
Assumindo que temos um ficheiro com um cabeçalho standart, chamado
"header.php".
Para incluir esse ficheiro numa página, utilizamos a função include() da seguinte
forma:
<html>
<body>
<?php include("header.php"); ?>
33
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>
Exemplo 2
Assumindo, agora, que temos um ficheiro com um menu standart, que deverá
ser apresentado em todas a spáginas. Vamos ver como será o ficheiro
"menu.php":
<html>
<body>
<a href="http://www.w3schools.com/default.php">Home</a>
<a href="http://www.w3schools.com/about.php">About Us</a>
<a href="http://www.w3schools.com/contact.php">Contact Us</a>
</body>
</html>
Os três ficheiros, "default.php", "about.php", e "contact.php", deverão todos
incluir o ficheiro "menu.php".
Exemplo do código do ficheiro "default.php":
<html>
<body>
<?php include("menu.php"); ?>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>
Se colocarmos o código do "default.php" no browser, irá aparecer:
<html>
<body>
<a href="default.php">Home</a> |
<a href="about.php">About Us</a> |
34
<a href="contact.php">Contact Us</a>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>
E, claro, que temos de fazer o mesmo para os ficheiros "about.php" and
"contact.php".
Ao utilizarmos ficheiros include, simplificamos o update de texto no ficheiro
menu.php" se decidirmos renomear ou mudar a ordem dos links, ou adicionar
outra página para o site.
Require()
Enquanto que a função include() apenas gera um aviso de erro, continuando a
executar o código, a função require() gera um erro fatal, interrompendo a
execução do código.
Exemplo include()
Se incluirmos um ficheiro com a função include(), e ocorrer um erro, devemos
ver um erro como o seguinte:
Código PHP:
<html>
<body>
<?php
include("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>
Mensagem de erro:
Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Warning: include() [function.include]:
35
Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5
Hello World!
Foi enviado uma mensagem de erro, mas a execução continuou na mesma
(notar o echo)
Exemplo require()
Vejamos agora o mesmo exemplo com a função require():
Código PHP:
<html>
<body>
<?php
require("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>
Mensagem de erro:
Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Fatal error: require() [function.require]:
Failed opening required 'wrongFile.php'
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5
Foi enviada uma mensagem de erro, e a execução foi interrompida (o commando
echo não chegou a ser executado).
É recomendado que se use a função require() em vez da include(), dado que em
caso de erro a execução dos scripts é interrompida.
36
Capítulo X - Ficheiros
Fopen() - abrir um ficheiro
A função fopen() é usada para abrir ficheiros em PHP.
O primeiro parâmetro desta função contém o nome do ficheiro a abrir, o segundo
especifica o modo de abertura desse mesmo ficheiro.
Exemplo 1
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
Um ficheiro pode ser aberto dos seguintes modos:
• r Lê. Começa no início do ficheiro.
• r+ Lê e escreve. Começa no início do ficheiro.
• w Apenas escreve.
• w+ Lê e escreve. Abre e elimina todo o conteúdo de um ficheiro, ou cria
um ficheiro novo caso não exista.
• a Acrescenta. Abre e escreve no fim do ficheiro, ou cria um novo
ficheiro caso não exista.
• a+ Lê e acrescenta. Acrescenta no fim do ficheiro preservando o seu
conteúdo.
• x Apenas escreve. Cria um novo ficheiro, retorna Falso e com erro se
o ficheiro já existir.
• x+ Lê e escreve. Cria um novo ficheiro, retorna Falso e com erro se o
ficheiro já existir.
Nota: se a função fopen() for incapaz de abrir um determinado ficheiro devolve
0(falso).
Exemplo 2
<html>
37
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>
Fclose() - fechar um ficheiro
A função fclose() é usada para fechar um ficheiro aberto.
Exemplo
<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
?>
Feof() - verificar se está no fim do ficheiro
A função feof() verifica se o fim do ficheiro(end of file) foi alcançado.
Esta função é usada em ciclos para ficheiro de tamanha desconhecido.
Nota: não se pode ler em ficheiros abertos no modo: w, a, x
Exemplo
if (feof($file)) echo "End of file";
Fgets() - ler um ficheiro linha a linha
Nota: após ser chamada esta função, o ponteiro move-se para a linha seguinte
Exemplo
Este exemplo lê um ficheiro linha a linha, até o fim do ficheiro ser alcançado
<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
38
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>
Fgetc() - ler um ficheiro carácter a carácter
Nota: depois de se chamar esta função, o ponteiro avança para o carácter
seguinte.
Exemplo
Este exemplo lê um ficheiro, carácter a carácter. Até o fim do ficheiro ser
alcançado.
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>Capítulo XI - Upload de ficheiros
Com o PHP é possível o upload de ficheiros para o servidor.
Criar um ficheiro upload de um formulário
Permitir o upload dos dados de um formulário pode ser bastante útil.
Exemplo
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
39
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
Nota1:
• O atributo enctype da tag <form> especifica a forma "multipart/form-
data" a ser usada quando o formulário requerer os dados, tais como os
dados do ficheiro a ser importado
• O atributo type="file" da tag <input> indica que o que se introduz deve
ser processado como um ficheiro. Por exemplo, quando for visto no
browser, deve existir um botão junto do campo de introdução.
Nota2:
• Permitir aos utilizadores o envio de ficheiros contém um grande risco de
segurança. Só se deve permitir a utilizadores de confiança o envio de
ficheiros.
Criar o script de envio de ficheiro
Exemplo
O ficheiro "upload_file.php" deverá ter o seguinte código:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
40
?>
Utilizando o vetor global PHP $_FILES podem-se enviar ficheiros do utilizador
para o servidor remoto.
O primeiro parâmetro é o nome do formulário a ser enviado, sendo que o
segundo parâmetro poderá ser "name", "type", "size", "tmp_name" or "error".
Por exemplo:
• $_FILES["file"]["name"] – nome do ficheiro a ser enviado
• $_FILES["file"]["type"] – tipo do ficheiro a ser enviado
• $_FILES["file"]["size"] – tamanho, em bytes, do ficheiro a ser enviado
• $_FILES["file"]["tmp_name"] – nome da cópia temporária a ser
armazenada no servidor
• $_FILES["file"]["error"] – o código do erro resultante do envoi de ficheiro
Restrições de envio
Por segurança, devem-se adicionar restrições no envio de ficheiros.
Exemplo
Neste script adicionaram-se restrições de envio. Apenas se podem enviar
ficheiros .gif ou .jpg, e não podendo serem maiores que 20kb
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
41
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
Nota: para o IE reconhecer ficheiros .jpg o tipo deve ser .pjpeg, para o FireFox
deve ser .jpeg.
Gravar ficheiros enviados
Exemplo
Este exemplo cria uma cópia temporária dos ficheiros enviados na pasta PHP
temp do servidor
A cópia temporária desaparece quando o script acaba. Para armazenar o ficheiro
precisamos de o copiar para uma localização diferente.
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
42
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
O código acima verifica se existe já um ficheiro, se não existir o ficheiro copia-o
para a pasta especificada.
Nota: este exemplo guarda o ficheiro numa nova pasta chamada "upload"
43
Capítulo XII - Cookies
O que é um cookie?
Um cookie é, muitas vezes, usado para identificar um utilizador. É um pequeno
ficheiro que o servidor coloca no computador do utilizador. Cada vez que o
mesmo computador requisita a página com o browser, envia o cookie também.
Com o PHP podemos criar e recuperar os valores do cookie.
Como criar um cookie?
A função setcookie() é usada para definir um cookie.
Nota: a função setcookie() deve de aparecer antes da tag <html>
Sintaxe
setcookie(name, value, expire, path, domain);
Exemplo
No exemplo em baixo vamos criar um cookie, designado “usera atribuir-lhe o
valor “Alex Porter". Vamos também especificar que o cookie deverá expirer ao
fim de uma hora:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
<html>
<body>
</body>
</html>
Nota: o valor do cookie é automaticamente codificado quando enviado, e
automaticamente descodificado quando recebido – para prevenir a codificação
podemos usar setrawcookie() em vez de setcookie().
44
Como definir o valor de um cookie?
A variável $_COOKIE é usada para definir o valor de um cookie.
Exemplo 1
Neste exemplo vamos definir o valor de um cookie chamado “user2 e mostrá-lo
no monitor
<?php
// Print a cookie
echo $_COOKIE["user"];
// A way to view all cookies
print_r($_COOKIE);
?>
Exemplo 2
Aqui vamos usar a função isset() para procurar se um cookie foi enviado
<html>
<body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
</body>
</html>
45
Como apagar um cookie?
Quando apagamos um cookie, devemo-nos assegurar que a data de expiração já
passou
Exemplo
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
E se um browser não suportar cookies?
Se a aplicação encontrar um browser que não suporte cookies, teremos que usar
um outro método para passar a informação de uma página para outra na
aplicação, um dos métodos é passar a informação através de formulários.
Exemplo:
O formulário seguinte passa os dados do utilizador através do formulário para o
ficheiro "welcome.php" quando o utilizador clica no botão "Submit".
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
46
Os dados são recuperados do ficheiro "welcome.php" da seguinte forma (por
exemplo):
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
Capítulo XIII - Sessões
Quando se trabalha com uma aplicação, abrimo-la, fazemos algumas mudanças
e, em seguida, fechamo-la. Isto é similar a uma sessão.
O computador sabe quem somos. Sabe quando se inicia a aplicação e quando se
termina. Mas, na Internet, há um problema: o servidor não sabe quem o
utilizador é e o que faz, porque o endereço HTTP não mantém o estado.
Uma variável de sessão PHP resolve o problema anterior, permitindo-lhe guardar
as informações do utilizador no servidor para uso posterior (ou seja, username,
etc.).
No entanto, as informações são temporárias e serão apagados após o utilizador
ter deixado o website. Se quisermos um armazenamento permanente dessa
informação podemos armazenar os dados numa base de dados.
Variáveis de sessão
Uma variável PHP de sessão é usada para armazenar informação sobre, ou
mudar informação, sobre o utilizador de uma sessão.
47
As variáveis de sessão guardam informação sobre um único utilizador, sendo
válidas para todas páginas numa aplicação.
As variáveis de sessão trabalham através da criação de um único registo para
cada visitante e armazenamento dos dados desse registo.
Começar uma sessão
Antes de podermos armazenar a informação de uma sessão, temos que iniciar
essa mesma sessão
Nota: a função start() deverá aparecer antes da tag <html>.
Exemplo
<?php session_start(); ?>
<html>
<body>
</body>
</html>
O código do exemplo anterior regista o utilizador da sessão com o servidor,
permite iniciar a gravação dos dados do utilizador, e atribui um registo para a
sessão do utilizador
Armazenar uma variável de sessão
A forma correcta de armazenar e recuperar variáveis de sessão é usar a variável
$_SESSION.
Exemplo 1
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
48
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
O resultado será:
Pageviews=1
Exemplo 2
Criar um contador de páginas vizualisadas. A função isset() verifica se as
variáveis "views" já foram definidas.Se sim, incrementamos o nosso contador.
Caso contrário definimos e iniciamos uma “views” igual a 1.
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
Eliminar uma sessão
Se desejarmos eliminar os dados de uma sessão, podemos usar as funções
unset() ou session_destroy().
Exemplo 1
<?php
unset($_SESSION['views']);
?>
49
Exemplo 2
Podemos elimiar a sessão completamente chamando a função session_destroy().
<?php
session_destroy();
?>
Nota: session_destroy() irá reiniciar a sessão e eliminar todos os dados
armazenados.
Capítulo XIV - Envio de emails
O PHP permite o envio de emails directamente do script.
Mail()
A função mail() do PHP é usada dentro do script.
Sintaxe
mail(to,subject,message,headers,parameters)
Parâmetros:
• to - requerido. Especifica o destinatário do email.
• subject – requerido. Especifica o assunto do email.
• message – requerido. Define a mensagem a enviar.
• headers – opcional. Especifica cabeçalhos adicionais, tais como: from, cc
e bcc.
• parameters – opcional. Especifica um parâmetro adicional para o
programa de envio do email.
50
Nota: para que a função mail() esteja disponível, o PHP requer a instalação e
funcionamento do sistema de email. O programa a usar é definido pela
configuração do ficheiro php.ini
Email simples
A forma mais simples de enviar um email com o PHP é enviar um email de texto.
Exemplo
Neste exemplo, primeiro declaramos as variáveis ($to, $subject, $message,
$from, $headers), posteriormente usamos essas variáveis na função mail() e
enviamos o mail.
<?php
$to = "[email protected]";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "[email protected]";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
Formulários de email
Podemos criar um formulário que nos dê os dados para um email.
Exemplo
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
51
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail( "[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
Explicação do exemplo anterior:
Envio de uma mensagem de texto para um endereço de email especifico
• Primeiro verificam-se se os campos estão preenchidos.
• Se não, volta a colocar o formulário para preencher
• SE sim, envia o email do formulário
• Quando se clica o botão “submit” após o preenchimento do formulário, a
página é actualizada, verificam-se os campos do email e o email é
enviado.
Email Injections
52
Exemplo
Analisemos o código do exemplo anterior:
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
message = $_REQUEST['message'] ;
mail("[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
O problema com este código é que um utilizador não autorizado pode inserir
dados no cabeçalho do email através do formulário.
53
O que acontecerá se um utilizador adicionar o seguinte texto no formulário?
[email protected]%0ACc:[email protected]
%0ABcc:[email protected],[email protected],
[email protected],[email protected]
%0ABTo:[email protected]
A função email() coloca o texto acima no cabeçalho do email como normalmente,
e agora o cabeçalho contem um cc, um bcc e um to: extra. Quando o utilizador
clicar no botão para submeter, o emial será enviado para todos os endereços
acima.
Parar Email Injections
A melhor forma de acabar com emails injections é a validação de dados.
Exemplo
O código abaixo é o mesmo do exemplo anterior, mas agora adicionámos uma
validação de dados que verifica o campo email do formulário.
<html>
<body>
<?php
function spamcheck($field)
{
//eregi() performs a case insensitive regular expression match
if(eregi("to:",$field) || eregi("cc:",$field))
{
return TRUE;
}
else
{
return FALSE;
}
}
//if "email" is filled out, send email
54
if (isset($_REQUEST['email']))
{
//check if the email address is invalid
$mailcheck = spamcheck($_REQUEST['email']);
if ($mailcheck==TRUE)
{
echo "Invalid input";
}
else
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
55
Capítulo XV - Tratamento de erros
Por defeito, o tratamento de erros em PHP é muito simples. Qualquer erro é
descrito no browser com o nome do ficheiro, o número da linha e uma
mensagem descrevendo o erro.
Quando se criam scripts e aplicações Web, o tratamento de erros é importante.
Se os erros não forem tratados, para além de a aplicação não ser muito
profissional, sujeita-se a riscos de segurança.
Existem diferentes formas de tratamento de erros:
• O uso do comando "die()"
• Custom errors e error triggers
• Error reporting
Tratamento básico de erros: die()
Exemplo
O primeiro exemplo mostra um script que abre um ficheiro de texto
<?php
$file=fopen("welcome.txt","r");
?>
Se o ficheiro não abrir então irá aparecer um erro do género:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
Para evitar que o utilizador receba esta mensagem de erro, há que verificar
primeiro a existência do ficheiro antes de o tentar abrir.
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
56
}
else
{
$file=fopen("welcome.txt","r");
}
?>
Agora se o ficheiro não existir a mensagem de erro será:
File not found
O código acima é mais eficiente que o anterior, dado que usa um mecanismo de
tratamento de erro simples para parar o script após o erro.
No entanto, parar simplesmente o script não é, muitas vezes, a forma correcta
de o fazer.
Criar um tratamento de Custom Error
Criar um tratamento de custom error é bastante simples, basta criar uma função
simples que possa ser chamada sempre que um erro ocorra.
Esta função deverá ser criada com um mínimo de dois parâmetros (error level e
error message), mas pode aceitar até cinco parâmetros (optionalmente: file,
line-number, e error context)
Sintaxe
error_function(error_level,error_message,error_file,error_line,error_context)
Parâmetros Descrição
error_level Necessário. Especifica o error report level. Deve ser um
número.
error_message Necessário. Especifica a mensagem de erro.
error_file Opcional. Especifica o nome do ficheiro em que ocorreu o
erro.
error_line Opcional. Especifica a linha em que ocorreu o erro
error_context Opcional. Especifica toas as variáveis, e os seus valores, emu
so aquando da ocorrência do erro.
57
Error Report levels
Os error report levels são diferentes tipos de erro de utilizador, definidos, que se
podem tratar.
Valor Constante Descrição
2 E_WARNING Não fatal. A execução do script não é
interrompida
8 E_NOTICE Notificação. O script encontrou algo que pode ser
um erro, mas tambem pode acontecer o script
corre normalmente.
256 E_USER_ERROR Erro fatal gerado pelo utilizador. Similar ao
E_ERROR enviado pelo programador usando a
função PHP trigger_error()
512 E_USER_WARNING Aviso não fatal, gerado pelo utilizador. Similar ao
E_WARNING enviado pelo programador usando a
função PHP trigger_error()
1024 E_USER_NOTICE Notificação gerada pelo utilizador. Similar ao
E_NOTICE enviado pelo programador usando a
função PHP trigger_error()
4096 E_RECOVERABLE_ERROR Introdução de um fatal error. Similar ao
E_ERROR mas pode ser causado por uma
manipulação incorrecta do utilizador
8191 E_ALL Todos os erros e avisos excepto E_STRICT
Exemplo
Vamos criar uma função para tratar erros:
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); }
A função acima é uma função simples de tratamento de erros. Quando aplicada,
recebe o error level e uma mensagem de erro. Após o qual mostra o error level e
a mensagem e termina o script.
58
E agora que criámos uma função que trata erros, precisamos de definir quando
deve ser aplicada.
Tratamento de erros: set_error_handler()
O padrão para tratamento de erros no PHP é construir uma função específica
para tal. Vamos fazer da função do exemplo anterior a função para tratar dos
erros que ocorram aquando do executar do script.
É possível alterar o erro para se tratar apenas de erros específicos. Desta forma
o script pode lidar com diferentes erros de formas diferentes. No entanto, neste
exemplo, vamos usar um erro personalizado para todos os erros:
set_error_handler("customError");
A função set_error_handler () apenas necessita de um parâmetro, um segundo
parâmetro poderá ser adicionada para especificar um erro nível.
Exemplo
Testar um erro tentando mostrar uma variável inexistente.
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
O resultado será:
Custom error: [8] Undefined variable: test
59
Captura de erros: trigger_error()
Num script onde os utilizadores podem introduzir dados, é útil que se capture um
erro quando uma há uma introdução ilegal. No PHP isto é feito pela função
trigger_error().
Exemplo
Neste exemplo um erro ocorre se a variável “test” for maior que 1
<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
O resultado será:
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6
Um erro pode ser capturado em qualquer parte do script, e adicionando um
segundo parâmetro à função, podemos especificar o nível do erro capturado.
Tipos de erro possíveis:
• E_USER_ERROR – erro fatal gerado pelo utilizador. Este erro não pode
ser recuperado. A execução do script é interrompida.
• E_USER_WARNING – aviso não fatal gerado pelo utilizador. A execução
do script não é interrompida.
• E_USER_NOTICE – aviso gerado pelo utilizador. O script encontrou algo
que pode ser prejudicial à sua execução, mas também pode ocorrer com a
execução normal do script.
Exemplo
Neste exemplo um E_USER_WARNING ocorre se a variável "test" for maior que
1. Se um E_USER_WARNING ocorrer, podemos usar o manipulador de erros para
terminar a execução do script:
<?php
60
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{ trigger_error("Value must be 1 or below",E_USER_WARNING);
} ?>
O resultado será:
Error: [512] Value must be 1 or below
Ending Script
Registo de erros: error_log()
Por defeito o PHP envia um registo de erro para o sistema de servidores
registados ou para um ficheiro, dependendo da configuração do error_log no
ficheiro php.ini. utilizando a função error_log() podemos enviar registo de erros
para um destinatário remoto específico.
Enviar mensagens de erro por email pode ser uma soa solução para se ser
notificado de erros específicos
Enviar uma mensagem de erro por email
Exemplo
Neste exemplo será enviado um email com uma mensagem de erro, e a
execução do script é interrompida, se ocorrer um erro específico.
<?php
61
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{ trigger_error("Value must be 1 or below",E_USER_WARNING); } ?>
O resultado será:
Error: [512] Value must be 1 or below
Webmaster has been notified
O email recebido será:
Error: [512] Value must be 1 or below
Nota: Isto não deverá ser usado com todos os erros.
Capítulo XVI - Tratamento de excepções
As excepções são usadas para mudar a execução normal de um script se ocorrer
um erro.
O que acontece quando ocorrer uma excepção:
• O estado corrente é guardado
• O código de execução é substituído por um predefinido
62
• Dependendo da situação, pode acontecer que o estado seja guardado e a
execução do script termine, ou então que a execução do script continue a
partir de uma parte diferente do código.
Existem diferentes métodos de tratar erros desta forma:
• Uso básico de excepções
• Criar uma função que trate os erros normais
• Múltiplas excepções
• Relançamento da excepção
• Definir um nível máximo de excepção
Nota: as excepções devem de ser apenas utilizadas em condições de erro, não
devendo ser usadas para ‘saltar’ para outro lugar no código, num dado
momento.
Uso básico de excepções
Quando uma excepção é lançada, o código a seguir não será executado, e o PHP
irá tentar encontrar esse bloco.
Se uma excepção não é capturada, será emitido um erro fatal com uma
mensagem de "Uncaught Exception”.
Exemplo
Vamos tentar lançar uma excepção sem a apanhar
<?php
//create function with an exception function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); }
return true; } //trigger exception checkNum(2); ?>
O código irá ter um erro como este:
Fatal error: Uncaught exception 'Exception'
with message 'Value must be 1 or below' in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
63
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6
Try, throw e catch
Para evitar o erro do exemplo anterior, necessitamos de criar o código
apropriadamente para tartar uma excepção.
Uma excepção apropriada deverá incluir:
• Try – uma função que use uma excepção deve estar num bloco “try”. Se a
excepção não for apanhada, o código irá continuar normalmente. No
entanto, se a excepção for apanhada, fica "throw"
• Throw – é a forma como se acciona uma excepção. Cada "throw" deverá
ter no mínimo um "catch"
• Catch – um bloco "catch" devolve uma excepção r cria um objecto
contend informação da excepção.
Exemplo
Vamos tentar accionar uma excepção com um código válido
<?php
//create function with an exception function checkNum($number)
{ if($number>1) {
throw new Exception("Value must be 1 or below"); }
return true; } //trigger exception in a "try" block try {
checkNum(2);
//If the exception is thrown, this text will not be shown echo 'If you see this, the number is 1 or below';
}
//catch exception catch(Exception $e)
{ echo 'Message: ' .$e->getMessage();
} ?>
O resultado será:
Message: Value must be 1 or below
64
Explicação do exemplo
O código acima lança uma excepção e apanha-a
1. A função checkNum() é criada. Verifica se um número é maior que 1. Se
sim, uma excepção é lançada
2. A função checkNum() é chamada num bloco "try"
3. A excepção dentro da função checkNum() é lançada
4. O bloco “catch” devilve a excepção e e cria um objeto ($e) contendo as
informações da excepção.
5. A mensagem erro é mostrada através da função $e->getMessage() do
objecto da excepção.
No entanto, uma forma de evitar a regra "every throw must have a catch" é
estabelecer um nível superior de excepção a ser tratadas.
Criar uma classe customException
Criar uma customException é simples. Basta criar uma classe especial com
funções que possam ser chamadas quando uma excepção ocorre no PHP.
Exemplo
Vamos criar uma classe de excepção, extensão da classe de excepções.
<?php class customException extends Exception { public function errorMessage() {
//error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'; return $errorMsg; } }
$email = "[email protected]"; try {
//check if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //throw exception if email is not valid
throw new customException($email); } } catch (customException $e) { //display custom message echo $e->errorMessage();
} ?>
65
A nova classe é uma cópia da antiga classe de excepção classe com um
acrescento da função errorMessage(). Desde que se trata de uma cópia da velha
classe, e que herda as propriedades e métodos da mesma, podemos usar
métodos da classe excepção como getLine(), getFile() e getMessage().
Explicação do exemplo
O código acima lança uma excepção e apanha-a com a classe customException()
1. A classe customException() class é criada como uma extensão da velha
classe Exception. Deste modo, ela herda todos os métodos e propriedades
dessa mesma classe.
2. A função errorMessage() é criada. Esta função devolve uma mensagem de
erro se um endereço de email é inválido.
3. A variável $email é definida como uma string que não é um endereço
válido de email.
4. O bloco "try" é executado e uma excepção é lançada desde que o endereço
de email seja inválido
5. O bloco "catch" apanha a excepção e mostra a mensagem de erro
Múltiplas excepções
É possível usar múltiplas excepções para verificar múltiplas condições.
Estas excepções podem usar diferentes classes de excepções e devolver
mensagens de erro diferentes.
Exemplo
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().':
<b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
66
$email = "[email protected]";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e->errorMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
Explicação do exemplo
O código acima testa duas condições e lança uma excepção se uma das
condições não for cumprida.
1. A classe customException() é criada como uma extensão da antiga classe
Exception(). Desta forma herda todos os métodos e propriedades dessa
classe.
2. A função errorMessage() é criada. Esta função devolve uma mensagem de
erro se um endereço de email for inválido.
67
3. A variável $email é definida como uma string que é um endereço válido de
email, mas que contem a palavra ‘exemplo’
4. O bloco "try" é executado e não é lançada, de acordo com a primeira
condição, uma excepção
5. A segunda condição acciona uma excepção desde que o endereço de email
contenha a palavra ‘exemplo’.
6. O bloco "catch" apanha a excepção e mostra a mensagem de erro correcta
Relançamento de excepções
Às vezes, quando uma excepção é lançada, pode-se querer tratar de forma
diferente da forma padrão. É possível lançar uma excepção, uma segunda vez,
dentro de um bloco "catch".
Um script deve esconder os erros de sistema do utilizador. Erros de sistema
podem ser importante para o programador, mas não são do interesse do
utilizador.
Para tornar as coisas mais fáceis para o utilizador, podemos relançar a excepção
com uma mensagem amigável para o utilizador
Exemplo
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = $this->getMessage().' is not a valid E-Mail address.';
return $errorMsg;
}
}
$email = "[email protected]";
try
{ try
{
68
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
//throw exception if email is not valid
throw new Exception($email);
}
}
catch(Exception $e)
{
//re-throw exception
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
Explicação do exemplo
O código acima testa se o endereço de email contém a palavra ‘example’. Se
sim, a excepção é reutilizada.
1. A classe customException() é criada como uma extensão da antiga classe
Exception(). Desta forma herda todos os métodos e propriedades dessa
classe.
2. A função errorMessage() é criada. Esta função devolve uma mensagem de
erro se um endereço de email for inválido.
3. A variável $email é definida como uma string que é um endereço válido de
email, mas que contem a palavra ‘exemplo’
4. O bloco "try" contém um outro bloco “try”para que seja possível relanção a
excepção.
5. A excepção é desencadeada desde que o mail contenha a palavra
‘example’
69
6. O bloco "catch" apanha a excepção e relança uma "customException"
7. A "customException" á apanhada e é mostrada a mensagem de erro.
Se a excepção não for capturada no bloco “try”, é procurado de um bloco “catch”
em níveis mais elevados.
Set_Exception_Handler
A função set_exception_handler() define uma função para apanhar excepções
não apanhadas.
Exemplo
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
O resultado será:
Exception: Uncaught Exception occurred
Nota: no código acima não existe bloco "catch". Em vez disso, temos o accionada
a set_exception_handler.
Regras para excepções
• O código pode ser cercado num bloco “try”, para ajudar a capturar
possíveis excepções
70
• Cada bloco “try” ou “throw” deve ter, pelo menos, um bloco “ catch”
correspondente
• Vários blocos “catch” podem ser usados para apanhar diferentes classes de
excepções
• Excepções podem ser lançadas(ou relanladas), numa captura dentro de
um bloco”try”
Uma simples regra: se lançamos alguma coisa, temos que a apanhar.
Capítulo XVII - Filtros
Os filtros em PHP são usados para validar e filtrar os dados vindos de fontes
inseguras, como introduções do utilizador
Porquê usar filtros?
Quase todas as aplicações web dependem de dados que são introduzidos pelo
utilizador, ou que provêm de outra aplicação. Ao usarmos filtros estamos a
garantir que os dados introduzidos sejam os correctos.
Um filtro de dados é uma das mais aplicações mais importantes de segurança.
Devem-se filtrar todos os dados externos.
O que são dados externos?
• Dados introduzidos através de um formulário
• Cookies
• Web services data4018
• Variáveis de servidor
• Resultado de consulta de bases de dados
Funções e filtros
71
Para filtrar uma variável devemos usar uma das seguintes funções filtro:
• filter_var() – filtra uma variável com um filtro específico
• filter_var_array() – filtra um conjunto de variáveis com um dou mais
filtros diferentes
• filter_input – recebe uma variavel introduzida e filtra-a
• filter_input_array – recebe um conjunto de variáveis e filtra-as com um
ou mais filtros diferentes
Exemplo
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
O código usa o filtro "FILTER_VALIDATE_INT" para filtrar a variável, desde que o
inteiro é válido, o resultadop do código será:
"Integer is valid"
Se tentarmos com uma variável que não seja inteira, o resultado será:
"Integer is not valid"
Validação e Saneamento
Existem dois tipos de filtro:
• Filtros de validação:
o Usados para validarem introdução de dados.
o Regras de formatação (como validação de url e de email)
72
o Devolve o tipo esperado de sucesso ou insucesso na falha
• Filtros de saneamento:
o Usados para permitirem caracteres específicos numa string
o Não tem regras de formatação
o Devolve sempre a string
Opções e bandeiras
São usadas para adicionar opções de filtro a um filtro específico.
Filtros diferentes têm diferentes opções e bandeiras.
Exemplo
No exemplo seguinte valida-se um inteiro usando filter_var() e as opções
“min_range" e "max_range"
<?php $var=300; $int_options = array(
"options"=>array ( "min_range"=>0, "max_range"=>256 ) );
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{ echo("Integer is not valid"); } else { echo("Integer is valid");
} ?>
Tal como o código acima, as opções devem ser colocados num array com o nome
"options". Se for utilizada uma bandeira, esta não precisa de estar num array.
Como o inteiro é "300", não está no intervalo especificado, e assim o resultado
será:
"Integer is not valid".
Validação de dados introduzidos
Vamos tentar validar entrada de um formulário.
73
Uma das primeiras coisas que temos a fazer é confirmar que a entrada de dados
existe.
Em seguida, o filtramos a entrada de dados usando a função filter_input().
Exemplo
No exemplo a seguir, a variável de entrada "email" é enviado para a página de
PHP.
<?php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
?>
Explicação do exemplo
O exemplo acima tem uma entrada (email) enviado usando o método "GET"
1. Verifica se existe uma entrada da variável "email"do tipo GET
2. Se a entrada da variável existe, verifica se se trata de um email válido
Sanear a introdução de dados
Vamos tentar limpar um URL enviado por um formulário.
Primeiro confirmamos que os dados introduzidos existem.
74
Depois saneamos os dados usando a função filter_input().
Exemplo
Neste exemplo, a variável de entrada "url" é enviada para a página de PHP
<?php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST,
"url", FILTER_SANITIZE_URL);
}
?>
Explicação do exemplo
O exemplo em cima tem um input (url) enviado pelo método "POST"
1. Verifica se o input "url" do "POST" existe
2. Se existir, saneia (elimina os caracteres inválidos) e guarda-a na variável
$url
Se a variável de introdução é similar a:
http://www.W3ååSchøøools.com/
A variável $url depois de saneada será similar a :
http://www.W3Schools.com/
Filtrar introduções múltiplas
Um formulário é constituído quase sempre por mais de um campo. Para evitar
chamar as funções filter_var ou filter_input, repetidamente, podemos usar as
funções filter_var_array ou filter_input_array.
75
Exemplo
Usamos a função filter_input_array() função para filtrar três variáveis GET. As
variáveis GET recebidas são um nome, uma idade e um endereço de correio
electrónico:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING
), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array
( "min_range"=>1,
"max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"])
{ echo("Age must be a number between 1 and 120.<br />"); } elseif(!$result["email"]) { echo("E-Mail is not valid.<br />");
}
else { echo("User input is valid"); } ?>
Explicação do exemplo
O exemplo acima tem três introduções (nome, idade e email) enviado pelo
método "GET" método.
1. Define-se um array contendo o nome das variáveis introduzidas e os filtros
utilizados na introdução das variáveis.
2. Chama-se a função filter_input_array() com as variáveis GET introduzidas
e o array acabado de definir.
3. Verificam-se as variáveis "idade" e "email" na variável $result para as
introduções inválidas. (Se nenhuma das variáveis for inválida, o resultado
será FALSE após a função filter_input_array())
76
O Segundo parâmetro da função filter_input_array() pode ser um array ou uma
única identificação de um filtro.
Se o parâmetro for uma simples chave filtrada, todos os valores no array são
filtrados pelo filtro especificado.
Se o parâmetro for um array então deverá respeitar as seguintes regras:
• Deve ser um array contendo uma variável introduzida como chave do
array (por exemplo a variável introduzida "age")
• O valor do array deve ser filtrado ou deve especificar um filtro, bandeira
ou opção
Filter Callback
É possível chamar uma função definida pelo utilizador e usá-la com o filtro
FILTER_CALLBACK. Desta forma, podemos ter um controlo total sobre os dados
filtrados.
Podemos criar a nossa própria função ou usar uma já existente no PHP.
Exemplo
Neste exemplo usamos uma função criada para converter todos os “_” em
espaços em branco.
<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>
O resultado sera:
77
Peter is a great guy!
Explicação do exemplo
O exemplo acima converte todos os “_” em espaços em branco
1. Cria uma função que substitui todos os “_” por espaços em branco.
2. Chama a função filter_var() com o filtro FILTER_CALLBACK e um vetor
contend a nossa função.