Sie sind auf Seite 1von 238

PROFISSIONAL EM WEBDESIGN

b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PROFISSIONAL EM WEBDESIGN

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

?
0155 - Bases de dados para Internet
(server-side)
Que raio de nome!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

0155 - PHP e mySQL


Assim est melhor!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

O QUE O PHP
- uma linguagem de programao comummente usada em servidores web
- Quer dizer PHP: HyperText PreProcessor
- Cdigo Aberto
- Cdigo embebido em pginas web
EMAIL
HTML
&
JS

Dvidas?
Pergunte. Agora!

PHP

Qualquer coisa:
eu@afonsogomes.com

SQL

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

QUE SITE USAR PARA INFORMAO

www.php.net
Unanimemente, a melhor fonte de informao.z

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FAZER DO NOSSO PC UM SERVIDOR HTTP

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FAZER DO NOSSO PC UM SERVIDOR HTTP

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FAZER DO NOSSO PC UM SERVIDOR HTTP

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP: Fundamentais
PHP embebido dentro de pginas HTML com as tags:
<?php ... ?>

Ficheiros HTML com cdigo PHP dentro de si, tm de ter a


extenso .php (e no .html). Isto obrigatrio!

As linhas de cdigo em PHP so fechadas com ponto e virgula

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP: Fundamentais
Todos os nossos documentos tero de estar dentro da pasta:
C:\xampp\htdocs

O endereo no nosso browser:

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

Ttulo da pgina

localhost/

10

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

<html>

PHP

Sem mais demoras... OL MUNDO!

index.php

<head>
<title>Ol Mundo</title>
</head>
<body>
<?php echo <p>Ol Mundo</p>; ?>
</body>
</html>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

11

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Informaes do nosso servidor


Podemos tambm ver quais so as definies do servidor

<?php

phpinfo.php

PHP

que estamos a usar, recorrendo funo phpinfo();

phpinfo();
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

12

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Consideraes sobre Literals (os valores de variveis)


- Todas as strings devem ser fechadas dentro de aspas
ou aspas duplas: Ol Mundo ou Ol Mundo

- Nmeros no so fechados dentro de aspas: 1 ou 45 ou 3 4.15

- Booleanos (true/false) podem ser directamente escritos


como true ou false

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

13

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Comentrios em PHP
// Isto um comentrio
# Isto outro comentrio
/* Isto tambm
um comentrio*/

- No usem comentrios dentro de comentrios


- Recomenda-se o uso do // e no o #

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

14

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Mostrar dados
- Existem duas funes disponveis para mostrar dados:
print() e o echo()

- Podem ser usadas com ou sem os parntesis ()

- Os dados gerados pelo PHP passam para o browser como


HTML. Ao fazer Ver fonte s vemos o resultado e no o
cdigo PHP que o gerou.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

15

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

<?php

echoprint.php

PHP

Mostrar dados

echo (Ol Mundo);


echo Ol Mundo;
print (Ol Mundo);
print Ol Mundo;
?>
O resultado sempre o mesmo no ?
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

16

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Escapando Caracteres
- Alguns caracteres so considerados especiais
- Temos de escapar estes caracteres com o smbolo \
(a barra para trs ou backslash)
- Caracteres especiais sero flagueados quando aparecerem,
por exemplo uma aspa simples ou aspas duplas, e se estiver
escapado o PHP processa-os, seno interpreta-os como sendo
parte do cdigo e vai gerar erros...
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

17

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Escapando Caracteres

PHP

Um exemplo:
escaping.php

<?php
echo A minha amiga irlandesa;
echo Mary O\Bradley ;
echo disse \Ol Mundo\.;

// A minha amiga irlandesa Mary OBradley disse


Ol Mundo
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

18

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: O que so
Quando trabalhamos com PHP, quase sempre precisamos de
um stio onde guardar um valor (string, numero, booleano, etc)
para que mais tarde possamos usar este valor noutros stios
do nosso programa.

A estes stios onde guardamos valores chamamos VARIVEIS

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

19

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: Vamos chamar-lhes nomes!


- Uma varivel comea sempre com $ e depois o seu nome
- So sensveis a maisculas/minsculas
- $variavel diferente de $Variavel diferente de $VARIAVEL
- Escrever sempre em minsculas para jogar pelo seguro!
- O nome de uma varivel deve comear sempre com uma letra
ou um undescore ( _ ). NUNCA por um nmero.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

20

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

VARIVEIS: Um exemplo

variaveis.php

<?php
$nome = Afonso;
$idade = 31;
echo O . $nome;
echo tem ;
echo $idade;
// Resultado: O Afonso tem 31
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

21

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: Outro exemplo

PHP

preciso um certo cuidado com o que fazemos ...


variaveis.php

<?php
$nome = Afonso;
$idade = 31;
$idade = 22;

echo O . $nome . tem . $idade . anos;


// Resultado: O Afonso tem 22 anos
?>
Neste exemplo vemos tambm concatenao!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

22

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

USO DE OU DE
Uma dvida recorrente o uso de aspa dupla ou aspa simples
- H uma diferena entre strings escritas com ou com
- Numa string com aspas duplas, qualquer varivel
expandida para o seus valor.
- Numa string com aspa simples, no h expanso da
varivel para o seu valor.

Vamos ver um exemplo...


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

23

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

USO DE OU DE
aspasteste.php

<?php
$nome = Afonso;
$idade = 31;
echo O $nome tem $idade anos;
// Resultado: O Afonso tem 31 anos
echo O $nome tem $idade anos;

// Resultado: O $nome tem $idade anos


?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

24

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: Em profundidade!
Agora que j vimos os conceitos globais de variveis e constantes,
vamos aprofundar um bocadinho mais nos diferentes tipos de
variveis:

O PHP suporta 8 tipo de variveis primitivas

- 4 escalares: boolean , integer, float e string


- 2 compostos: array e object
- 2 especiais: resource e NULL

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

25

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: BOOLEANOS
Exprimem valores lgicos. TRUE (verdadeiro) ou FALSE (falso)
Podem ser escritos em minsculas ou maisculas

PHP

$b1 = true;
$b2 = false;

$b1 = TRUE;
$b2 = FALSE;

PHP

Passar uma varivel a booleano:


$b3 = 5;
$b4 = (bool) $b3;

ORIGINA =>

$b3 = 5;
$b4 = TRUE;

D FALSE quando: - O booleano falso; O inteiro 0 (Zero); O real


0.0 (zero); - Array vazio; o tipo especial NULL; String vazio
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

26

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: INTEIROS

PHP

Um nmero inteiro - integer - um nmero do conjunto de Z


$a = 1234;
// Decimal

$b = -1234;
Negativo

$c = 0x1A;
Hexadecimal

VARIVEIS: REAIS

PHP

Um nmero real - float - um nmero do conjunto de R


$a = 1.234;
// 1,234

Dvidas?
Pergunte. Agora!

$b = 1.2E3;
1200

Qualquer coisa:
eu@afonsogomes.com

$c = 7E-5;
0.000005

27

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: STRINGS

PHP

J vimos anteriormente estas:


$a = Afonso;
// Afonso

$b = Afonso Gomes;
Afonso Gomes

PHP

Assim tambm funciona:


$c = <<<FIM
Exemplo de um texto que se estende por algumas
linhas usando uma sintaxe entre marca.
<div class="umaclasse">Afonso</div>
FIM;
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

28

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS: STRINGS, Acesso a caracteres

PHP

Tambm podemos aceder a caracteres de uma string...


<?php
$d = Afonso!;
echo String Original: . $d;
echo Primeiro Caracter: . $d[0];

// A

echo Ultimo Caracter: . $d[strlen($d)-1]; // !


?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

29

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES
Outra maneira de armazenar dados em vectores (Arrays)
Um vector pode ser criado utilizando a funo array() que usa,
como parmetro uma sequncia de pares chave => valor
separados por vrgula.

<?php

PHP

Chave: inteiro/string. Valor: qualquer coisa

$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);


print_r( $e);
echo $e[2];
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

30

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES
No gostou como apareceram as coisas no browser quando

PHP

testou? Experimente mudar para isto:

<?php
$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);
echo <pre>;
print_r( $e);
echo </pre>;
echo O segundo valor do vector : . $e[2];
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

d
31

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES
Reparamos que podemos ver o valor de uma chave do vector...
Mas tambm podemos apagar, acrescentar e at editar chaves .

<?php

PHP

Continuando o nosso cdigo:

$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);


print_r $e;
echo $e[2];
unset( $e[2] ) ;
echo $e[2];
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

32

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

VECTORES

<?php
$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);
print_r ( $e);
echo $e[2];
unset( $e[2] ) ; // Funo que apaga elemento de um vector
echo $e[3];
$e[4] = Que seca de sesso!;
$e[4] = Est a ser porreiro!;
print_r ( $e);
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

33

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES
Tambm podemos criar vectores vazios e depois introduzir-lhe

<?php

PHP

elemento a elemento!

$a = 10;
$b = Afonso;
$e = array();
$e[1] = $a;
$e[2] = $b;
$e[3] = Um teste;
print_r($e) ;
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

34

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES ASSOCIATIVOS
Neste tipo de vectores associamos um valor a uma chave qual
damos um nome. Nos vectores anteriores no davamos nomes

<?php

PHP

s nossas chaves!

$f[clube] = FC Porto;
$f[cidade] = Porto;
$f[pas] = Portugal;
$f[umasocor ] = Azul e Branco;
print_r ( $f);
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

35

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES MULTIDIMENSIONAIS

PHP

Nome bonito para ... vectores dentro de vectores


$g = array( 1 => array( clube => FC Porto,
cidade => Porto,
cor => Azul
),
2 => array( clube => Sporting CP,
cidade => Lisboa,
cor => Verde
)
);
print_r ($g);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

36

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES MULTIDIMENSIONAIS

PHP

Como procurar elementos nestes vectores?


<?php
echo <pre>;
print_r( $g ) ;
echo </pre>;
echo $g[1][clube] . <br>;
echo $g[2][cidade] . <br>;
echo $g[1][cor ] . <br>;
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

37

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VECTORES MULTIDIMENSIONAIS (EXERCICIO)


Prepare um vector multidimensional (com um mnimo de 4
elementos no primeiro nvel). Chame-lhe $turma

Em cada elemento vamos guardar, tambm em vector, informaes


sobre pessoas da turma. Nome, Sobrenome, Idade, Funo, etc...

Exemplo:

nome = Afonso
sobrenome = Gomes
idade = 31
funcao = formador

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

38

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OBJECTOS

PHP

outro tipo de dados em PHP


<?php
class teste{
function testar() {
echo "Em teste.";
}
}
$x = new teste;
$x->testar();
?>
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

39

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Recursos
Um recurso uma varivel especial que contem uma referncia

PHP

para um recurso externo. A vai um exemplo:

<?php
$servidor = localhost;
$user = admin;
$password = 12345;
$ligao = mysqli_connect($servidor, $user, $password);
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

40

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NULL
O tipo especial NULL representa uma varivel que no tem
valor definido. O termo NULL pode ser escrito em maisculas

PHP

ou minsculas.

<?php
$variavelvazia = NULL;
echo $variavelvazia;
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

41

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS PREDEFINIDAS EM PHP


O PHP tem um conjunto de variveis j definidas que contm
informaes relevantes sobre o ambiente que o rodeia e o
programa em curso. So chamadas as SUPERGLOBAIS
.

$_SERVER - Variveis da responsabilidade do servidor web


$_GET - Variveis obtidas por meio do HTTP GET
$_POST - Variveis obtidas por meio do HTTP POST
$_COOKIE - Variveis obtidas a partir dos cookies
$_SESSION - Variveis associadas sesso do utilizador actual
$_FILES - Variveis respeitantes ao upload de ficheiros.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

42

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS SUPERGLOBAIS: $_SERVER


Quero explorar todas estas com vocs aqui! Mas, para j e para

PHP

vermos qualquer coisa a funcionar vamos ver a $_SERVER


<?php
echo $_SERVER[SERVER_ADDR] . <br> ;
echo $_SERVER[SERVER_NAME] . <br> ;
echo $_SERVER[REMOTE_ADDR] . <br> ;
//REMOTE_HOST no funciona Localhost
echo $_SERVER[DOCUMENT_ROOT] . <br> ;
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

43

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS REVISO

PHP

Pequeno exemplo de variveis...

<?php
$nome = Felismino ;
$Nome = Felisberto ;
echo $nome, $Nome<br>; // Funciona!
$1teste = Teste; // D ERRO!
$_1teste = Teste; // Funciona!
echo $_SERVER[DOCUMENT_ROOT]; // V. Superglobal
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

44

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

MBITO DAS VARIVEIS


As variveis tm um mbito de aplicao. Podem ser SuperGlobais
Globais ou Estticas
VARIVEIS GLOBAIS

PHP

A varivel $i global e pode ser utilizada pelo cdigo que est


presente no ficheiro que foi

<?php

includo!

$i = 5 ;
include ( ficheiro.php) ;
?>

Este exemplo usa incluso de ficheiros... no se preocupem com


isso para j!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

45

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS GLOBAIS
Ao contrrio dos ficheiros, as variveis no se estendem para
funes. No exemplo seguinte, nada imprimido porque a

<?php

PHP

varivel $b no est definida dentro da funo

$b = 5;
function teste(){
echo $b;
}
teste();
?>

Este exemplo usa funes de PHP... no se preocupem com isto!


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

46

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

VARIVEIS ESTTICAS (LOCAIS)


Uma varivel esttica uma varivel que mantm o seu valor
mesmo aps o programa ter abandonado o mbito onde ela foi

PHP

definida
<?php
$a = 5;
echo "Antes: " . $a . "<br>";
function teste2() {
static $a;

teste2();

$a = 10;

echo <br>Depois: " . $a;

echo Durante: . $a;

?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

47

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CONSTANTES
Enquanto uma varivel pode, l est, variar ao longo do cdigo,
uma constante mantem-se inaltervel de inicio ao fim.
- Os nomes no comeam com o $ (cifro)
- As constantes so definidas com a funo define();
- As constantes so GLOBAIS. Podem ser acedidas dentro de
outras funes.
- As constantes no podem ser redefinidas nem eliminadas.

Vamos ver um exemplo...


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

48

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CONSTANTES

contantes.php

<?php
define (_NOME_,Afonso);
define (_IDADE_, 31);

echo O . _NOME_ . tem . _IDADE_ . anos;


// Resultado: O Afonso tem 31 anos
?>
Possvel aplicao? Ficheiros de lnguas de um site multi-lngua
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

49

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

EXPRESSES
Agora que sabemos tudo sobre variveis... o que podemos fazer
com elas? E como o podemos fazer? Usamos expresses.
.

J vimos algumas ... vamos dar-lhes um olhar mais atento para

<?php

PHP

perceber como funcionam!

$nome = Afonso;

EXPRESSO

echo $nome;
?>

Dvidas?
Pergunte. Agora!

OPERADOR

Qualquer coisa:
eu@afonsogomes.com

50

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

EXPRESSES

PHP

Alguns exemplos! (Ter em mente... OPERADORES mais frente!)


<?php
$a = 10;
$b = $c = 2; // $b = 2 E $c = 2
$d = $c + $b;
$e = 10 + $d + ($c * $b);
$e++; // Incrementa um valor!
// igual a $e = $e + 1;
$f = $e;
echo $f;

44

?>
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

51

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES
Uma funo tambm uma expresso. As funes so usadas

<?php

A funo do exemplo no possui

PHP

para fazer re-aproveitamento de cdigo.

qualquer parmetro de entrada.

function dizOla(){
echo Ol Mundo;
}

Quando chamada apenas


imprime Ol Mundo.

dizOla();
?>
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

52

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES
Parmetros de entrada? Que isso??

<?php

PHP

So valores que queremos dar de entrada funo!

function dizOla2($nome){
echo Ol . $nome;
}

Experimentem esta!

$nome = Afonso;
dizOla2($nome);
?>
Dvidas?
Pergunte. Agora!

Invocao (Chamada) com passagem de


parmetros
Qualquer coisa:
eu@afonsogomes.com

53

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES
Vamos ver mais exemplos com parmetros de entrada...

PHP

<?php

PHP

Funces podem executar uma aco ou retornar um valor

function soma($a, $b){

<?php
function soma($a, $b){

echo $a + $b;
}
soma(4154,10124);

return $a + $b;

}
$c = soma(457,215);
echo $c;

?>

?>

A execuo de uma funo pra assim que um valor for retornado


44
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

54

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES
Em funes podemos permitir que no seja necessrio introduzir

PHP

certos parmetros. Usamos parmetros predefinidos...


<?php
function multiplica($a, $b = 10){
return $a * $b;
}
echo multiplica(5); // Resultado: 50
echo multiplica(3,5); // Resultado: 15
?>
Dvidas?
Pergunte. Agora!

44
Qualquer coisa:
eu@afonsogomes.com

55

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ... mais um exemplo!

PHP

Agora que somos experts em funes, voltemos ao ex de vectores!


$e = array(1 => 'Valor1', 2 => 'Valor2', 3 => 'Valor3');
array_pop($e);
echo "<b>Depois do ARRAY_POP</b>";
print_r($e);
array_push($e,"Um Valor qualquer");
echo "<b>Vector depois do ARRAY_PUSH</b>";
print_r($e);
O PHP j vem cheio de funes para tarefas corriqueiras...

44

Lista de funes p/ vectores: php.net/manual/en/ref.array.php


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

56

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ... dentro de Funes

function soma2nums($a,$b){

PHP

Muitas vezes essencial ... e no nada de difcil...

return $a + $b;
}
echo soma2nums(15,soma2nums(3,6));

Simples
no ?
44
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

57

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES
Em PHP h imensos operadores para muitas operaes diferentes
Vamos ver os mais usuais! (Alguns j foram vistos antes!)

Um operador indica uma aco a ser executada entre membros

<?php

PHP

de uma expresso

$nome = Afonso;

EXPRESSO

echo $nome;
?>

Dvidas?
Pergunte. Agora!

OPERADOR
Qualquer coisa:
eu@afonsogomes.com

58

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: Aritmticos

EXEMPLO

NOME

RESULTADO

$a + $b

Adio

Soma de $a com $b

$a - $b

Subtraco

Diferena entre $a e $b

$a * $b

Multiplicao

Produto de $a por $b

$a / $b

Diviso

Quociente entre $a por $b

$a % $b

Mdulo

Resto da diviso de $a por $b

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

59

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: Relacionais
EXEMPLO

NOME

RESULTADO

$a == $b

Igual

Verdade se $a igual a $b

$a === $b

Idntico

Verdade se $a igual a $b (e mesmo tipo)

$a != $b

Diferente

Verdade se $a diferente de $b

$a !== $b

No Idntico

Verdade se $a diferente de $b
(ou de tipos diferentes)

$a < $b

Menor

Verdade se $a menor que $b

$a > $b

Maior

Verdade se $a mairo que $b

$a <= $b

Menor/Igual

Verdade se $a menor ou igual a $b

$a >= $b

Maior/Igual

Verdade se $a maior ou igual a $b

55
51
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

60

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: Lgicos
EXEMPLO

NOME

RESULTADO

$a AND $b

Conjuno

TRUE se $a E $b forem TRUE

$a && $b

Conjuno

TRUE se $a E $b forem TRUE

$a OR $b

Disjuno
Inclusiva

TRUE se $a OU $b forem TRUE

$a || $b

Disjuno
Inclusiva

TRUE se $a OU $b forem TRUE

$a XOR $b

Disjuno
Inclusiva

TRUE se $a OU $b forem TRUE


(mas no ambos simultneamente)

!$a

Negao
Lgica

TRUE se $a for FALSE

55
51
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

61

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: Incremento/Decremento

EXEMPLO

NOME

RESULTADO

$a++

Ps-Incremento

Incrementa $a e depois devolve $a

++$a

Pr-Incremento

Devolve $a e depois incrementa $a

$a--

Ps-Decremento

Decrementa $a e depois devolve $a

--$a

Pre-Decremento

Devolve $a e depois decrementa $a

Sem medo... vamos ver mais disto nos CICLOS.

55
51
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

62

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: Condicional
Representa-se por ? e tem uma estrutura muito semelhante
a uma estrutura de controlo SE. Sintaxe: expr1 ? expr2 : expr3
.

A expr1 avaliada. Se TRUE devolvido o valor da expr2

PHP

Se FALSE devolvido o valor da expr3


$a = 9;

$b = 10;

print ($a > $b ? $a maior : $a menor );


.

$d = 5; $e = $d * $d; // $e o quadrado de $d

55
51

print ($e >= 100 ? maior : menor );


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

63

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: De Strings

PHP

Operador de concatenao
$k = Ol;
$k = $k . Mundo !; // Ol Mundo !

55
51

PHP

Operador de concatenao e atribuio


$m = Ol;
$m .= mundo !; // Ol mundo !

55
51
55
51
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

64

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

OPERADORES: Lista completa

Referncia completa de todos os operadores, aqui:

http://php.net/manual/en/language.operators.php
(basta ir a php.net e pesquisar Operators)

55
51

55
51
55
51
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

65

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

EXERCICIOS
1) Escreva uma funo que faa a soma de dois nmeros

PHP

Teste 2 vezes com valores a serem imprimidos no browser


<?php
function soma2nums($num1,$num2) {
return $num1 + $num2;
}

55
51

$a = 10;
$b = 15;
echo soma2nums($a, $b);
echo soma2nums(27,$b);
?>
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

55
51
55
51

66

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

EXERCICIOS

2) Escreva uma funo que calcule o cubo de um nmero


Teste 2 vezes com valores a serem imprimidos no browser

3) Escreva uma funo que diga se um nmero par ou impar


Teste 2 vezes com valores a serem imprimidos no browser

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

67

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

EXERCICIOS
<?php
function cubomaiorquemil($a){
$b = $a * $a * $a;

55
51

echo ($b >= 1000 ? "SIM ($b >= 1000)<br>" : "NO ($b)<br>");
}
function parouimpar($a){
echo ($a % 2 == 0 ? "($a) PAR<br>" : "($a) IMPAR<br>");
}

55
51
55
51

parouimpar(10);

parouimpar(7);

cubomaiorquemil(9);

cubomaiorquemil(15);

?>
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

68

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS NO PHP (1)


O PHP possui uma extensa biblioteca de funes definidas para
facilitar a vida malta. Ao longo do curso, de vez em quando,
vamos ver as mais importantes. Hoje ... vamos ver algumas

PHP

funes para texto. Vejam a sintaxe de cada em php.net ...


$string1 = ol mundo!;
$string2 = OL MUNDO!;
echo ucfirst ($string1); // Ol mundo!
echo ucwords ($string1); // Ol Mundo!
echo strtolower ($string2); // ol mundo!
echo strtoupper ($string1); // OL MUNDO!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

55
51
55
51

69

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If
Esta estrutura a famosa SE ENTO SENO da programao.
a estrutura mais usada em qualquer linguagem de programao
Tambm conhecida como sendo uma Estrutura de controlo

SINTAXE: Pode assumir 3 formas.


if (expresso) Instruo
if (expresso) Instruo else Instruo
if (expresso) Instruo elseif Instruo else Instruo ....

55
51
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

70

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

INSTRUES CONDICIONAIS: If

Um exemplo:

$a = 10;
$b = 15;

55
51
if($a > $b) {
echo $a maior que $b;
}
elseif($a == $b) {
echo $a igual a $b;
}
else {
echo $a menor que $b;

55
51
55
51
55
51

}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

71

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

INSTRUES CONDICIONAIS: If
$a = 10;
$b = 15;
if($a > $b) {
$msg = $a maior que $b;

Um exemplo:
Preparamos uma
mensagem e s
a imprimimos no51
55
fim.

}
elseif($a == $b) {
$msg = $a igual a $b;
}
else {
$msg = $a menor que $b;
}

55
51
55
51
55
51

echo $msg;
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

72

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If
Um uso tpico de um IF simples quando recebemos variveis

PHP

numa pgina atravs do HTTP GET

$nome = $_GET[nome];
echo $nome;

Notice: Undefined index: nome in


C:\xampp\htdocs\cesae\exemplos.php on line 282

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

73

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If

PHP

Mudem o endereo para: localhost/index.php?nome=Felismino

$nome = $_GET[nome];
echo $nome;

Acontece que o nosso .php no estava preparado para o caso


da varivel $_GET[nome] poder no estr definida !
.

Resolve-se isso de uma forma muito simples!

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

74

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If
Usa-se um IF para verificar se a varivel est ou no definida

PHP

O PHP tem uma funo que faz essa verificao: isset();

if( isset($_GET[nome]) ) {
$nome = $_GET[nome];
} else {
$nome = desconhecido;
}
echo Ol . $nome;

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

75

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If

PHP

Vrias variveis de entrada? Sem problema!


if( isset($_GET[nome]) && isset($_GET[email]) ) {
$nome = $_GET[nome];
$email = $_GET[email];
$msg = $nome . ( . $email . );
} else {
$msg = Erro na introduo de parmetros;
}
echo $msg;

No endereo: index.php ? nome=Felisberto & email=a@gmail.com


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

76

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If

PHP

Se soubessemos o funcionamento da isset() melhor...


if( isset($_GET[nome], $_GET[email]) ) {
$nome = $_GET[nome];
$email = $_GET[email];
$msg = $nome . ( . $email . );
} else {
$msg = Erro na introduo de parmetros;
}
echo $msg;

No endereo: index.php ? nome=Felisberto & email=a@gmail.com


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

77

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If
Outro bom uso recorrente do IF quando definimos as nossas
funes. J tinhamos visto que ocorre um erro se tivermos 2

if(!function_exists(encurtaTexto)){

PHP

funes com o mesmo nome ...

function encurtaTexto($text,$chars='25'){
.

...
.

}
}

Ou seja, definimos a funo s se j no estiver definida!


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

78

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If

PHP

if ($a == 5):

PHP

Tambm temos o IF com uma sintaxe alternativa

echo "a igual a 5";

<?php if ($a == 5): ?>


<p> A igual a 5!</p>
<?php endif; ?>

echo "...";
elseif ($a == 6):

Tambm podemos ter uma


coisa deste gnero!

echo "a igual a 6";


echo "!!!";
else:
echo "a nem 5 nem 6";
endif;

Simplifica a leitura mas pode ser confuso...


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

79

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If

if(1){

PHP

E para acabar os IFs ... um que sempre verdade !

echo Sou sempre verdade;


} else {
echo Esta mensagem nunca ser exibido!;
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

80

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

INSTRUES CONDICIONAIS: If (Exerccio)


Faa um ficheiro PHP que receba por HTTP GET 2 variveis
numricas. E nesse ficheiro deve existir:
>> Uma funo para calcular a multiplicao dessas variveis
>> Uma estrutura IF que verifique se a multiplicao desses dois
nmeros d menor que 100, igual a 100 ou maior que 100.
>> Em cada caso deve imprimir uma mensagem para o ecr, do
gnero: A multiplicao entre X e Y d Z que menor que 100
em W unidades.
DICA: Defina as variveis auxiliares que achar convenientes!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

81

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

O funcionamento de um SWITCH

PHP

INSTRUES CONDICIONAIS: Switch

igual ao de um IF.

$i = 2;
switch($i){
case 0:
echo $i igual a 0;

Pode e deve ser usado quando

break;
case 1:

queremos comparar muitos

echo $i igual a 1;

valores...

break;
case 2:
echo $i igual a 2;
break;
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

82

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

INSTRUES CONDICIONAIS: Switch


$i = Ana;
switch($formando){
case Glria:
echo Sentada direita;
break;
case Ana:
echo Sentada em frente;
break;
case Marlia:
echo Sentada esquerda;
break;
[...]
}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

83

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

INSTRUES CONDICIONAIS: Switch - Caso prtico


function StringFloracao($mes){
switch($mes){
case 1: $stringmes = Janeiro; break;
case 2: $stringmes = Fevereiro; break;
case 3: $stringmes = Maro; break;
case 4: $stringmes = Abril; break;
case 5: $stringmes = Maio; break;
case 6: $stringmes = Junho; break;
[...]
}
return $stringmes;
}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

84

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

INSTRUES ITERATIVAS (CICLOS): WHILE


$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador;
$contador++;
}

Num ciclo, uma qualquer aco processada enquanto uma


condio for verdadeira.
Antes de se fechar o ciclo devemos ter o cuidado de incrementar
o contador...

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

85

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS PHP (2): EXPLODE e LIST e IMPLODE


So das mais usadas funes de PHP. O IMPLODE condensa vrias
variveis numa s, o EXPLODE explode uma string para vrios
pedaos e a LIST facilita a definio de muitas variveis ao mesmo
tempo.

PHP

EXPLODE
$pizza = fatia1|fatia2|fatia3|fatia4|fatia5|fatia6;
$fatias = explode(|, $pizza);
echo $fatias[0] . <br>; // fatia1
echo $fatias[1]; // fatia2

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

86

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS PHP (2): EXPLODE e LIST e IMPLODE

PHP

EXPLODE
$carro = rodas, motor, volante, pedais;
$pecas = explode(, , $carro, 2);
echo $pecas[0] . <br>; // rodas
echo $pecas[1]; // motor, volante, pedais

PHP

EXPLODE com o LIST


$clubes = FC Porto:SL Benfica:Sporting CP;
list($grande, $medio, $assimassim) = explode(:,$clubes);
echo $grande . <br>; // FC Porto
echo $assimassim; // Sporting CP

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

87

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS PHP (2): EXPLODE e LIST e IMPLODE

PHP

IMPLODE
$dados = array(pnome,unome,email,telemovel);
echo $dados[1]; // unome
$todosjuntos = implode( | , $dados);
echo $todosjuntos; // pnome | unome | email | telemovel

PHP

IMPLODE (Exemplo prtico)


$elems = array(Elemento 1, Elemento 2, Elemento 3);
echo <ul><li> . implode(</li><li>", $elems) . </li></ul>;

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

88

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: WHILE ... CICLOS INFINITOS


$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador;
$contador++;
}

So dos erros mais comuns em programas...


Entra-se em ciclos infinitos quando a condio que estamos
a verificar sempre verdadeira .

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

89

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: WHILE
$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador++;
}

Neste exemplos usamos o operador de ps-incremento dentro


do prprio echo...
impresso o seu valor e logo a seguir incrementado.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

90

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: WHILE
$contador = 1;
while($contador <= 10){
echo $contador igual a . ++$contador;
}

J neste exemplo, usado o operador de pr-incremento,


a varivel $contador incrementada e s depois disso
que impressa no ecr.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

91

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: DO ... WHILE


Temos tambm a variante DO .... WHILE (fazer enquanto)
O cdigo pouco altera.
Nesta verso, a condio apenas verificada depois do ciclo

PHP

ser processado pelo PHP.

$contador = 1;
do {

echo $contador igual a . $contador;


$contador++;
} while ($contador <= 10);
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

92

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

INSTRUES ITERATIVAS (CICLOS): WHILE

$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador++;

PHP

$contador = 1;
do {

echo $contador igual a . $contador++;


} while ($contador <= 10);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

93

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: Exerccio 1
Faa um contador que comece no 1 e quando chegar a 10
imprima a linha Ol Mundo!.
Dever aparecer no ecr algo do gnero:
1
2
...
8
9
Ol Mundo

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

94

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: Exerccio 1 Resoluo

$i = 1;

while($i <= 10){

if($i < 10) {

echo $i . <br>;

}else
echo Ol Mundo!;

7
8

Dvidas?
Pergunte. Agora!

Ol Mundo!

Qualquer coisa:
eu@afonsogomes.com

95

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: Exerccio 1 Resoluo (Floreada!)


$i = 1;

while($i <= 10){

if($i < 3 || $i > 7 && $i < 10) {


echo $i . <br>;

...

}elseif($i > 3 && $i < 7){

...
...

echo ...<br>;

Podia ter
ficado melhor!

...

}else
echo Ol Mundo!;

8
9

Ol Mundo!

Dvidas?
Pergunte. Agora!

...

Qualquer coisa:
eu@afonsogomes.com

96

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CICLOS: Exerccio 1
Resoluo (Floreada!)

PHP

CENTRO DE SERVIOS E APOIO S EMPRESAS

$i = 1;

$flag = false;

while($i <= 10){


if($i < 3 || $i > 7 && $i < 10 ){

echo $i . "<br>";

}elseif($i >= 3 && $i <= 7){

...

if($flag == false) {

echo "...<br>";

$flag = true;

Ol Mundo!

}
}elseif($i == 10){
echo "Ol Mundo!";
}
$i++;
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

97

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: Exerccio 2
Faa um contador decrescente que comece no 20 e mostre
linha a linha a contagem at 0.
Dever aparecer no ecr algo tipo:
Falta 20...
Falta 19...
Falta 18...
Mas quando chegar ao zero. Em vez de dizer Falta 0...
deve dizer J est!

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

98

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: Exerccio 2 Resoluo


$i = 20;
while($i >= 0){
if($i != 0){
echo "Falta $i ...";
}else{
echo "J est!";
}
echo "<br>";
$i--;
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

99

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: FOR
Tipo um While... com os comandos definidos no nicio do bloco.
.

SINTAXE: for(expr1; expr2; expr3) { ... }


expr1: Avaliada apenas uma vez na primeira iterao
expr2: Avaliada a cara iterao. O ciclo pra se der False .
expr3: Avaliada no final de cada iterao. Contm a varivel

PHP

de controlo.
for($conta = 1; $conta < 10; $conta++){
echo Nmero: <b> . $i . </b><br>;
}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

100

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: FOREACH
A instruo FOREACH, funciona exclusivamente com vectores.
Podemos utiliza-la para chegar ao valor do vector ou ao
valor e chave do vector
.
SINTAXE: foreach($vector AS $valor) { Instrues }
foreach($vector AS $chave => $valor) { Instrues }

Vamos ver exemplos

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

101

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: FOREACH
A instruo FOREACH, funciona exclusivamente com vectores.
Podemos utiliza-la para chegar ao valor do vector ou ao

PHP

valor e chave do vector


.

$vector = array(um => 1,


dois => Nmero dois,

SINTAXE: foreach($vector
AS $valor)
tres
=> 3, { Instrues }
quatro
=> 4);
foreach($vector
AS $chave
=> $valor) { Instrues }
foreach($vector AS $valor){

Vamos ver exemplos


echo $valor<br>;
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

102

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: FOREACH
A instruo FOREACH, funciona exclusivamente com vectores.
Podemos utiliza-la para chegar ao valor do vector ou ao

PHP

valor e chave do vector


.

$vector = array(um => 1,


dois => Nmero dois,

SINTAXE: foreach($vector
AS $valor)
tres
=> 3, { Instrues }
quatro
=> 4);
foreach($vector
AS $chave
=> $valor) { Instrues }
foreach($vector AS $chave => $valor){

Vamos ver exemplos


echo A chave $chave tem o valor $valor<br>;
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

103

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: FOREACH (Como faramos se... ?)


Quisssemos que, se o valor da chave dois for igual a

PHP

Nmero dois muda-la para 2 ?


$vector = array(um => 1,
dois => Nmero dois, // Novo Valor: 2
tres => 3,
quatro => 4);
foreach($vector AS $chave => $valor){

?
}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

104

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: FOREACH

$vector = array(um => 1,


dois => Nmero dois, // Novo Valor: 2
tres => 3,
quatro => 4);
foreach($vector AS $chave => $valor){
if ($valor == "Nmero dois"){
$vector[$chave] = 2;
}
}
print_r($vector);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

105

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

CICLOS: FOREACH (Como faramos se... ?)


Quisssemos que as os valores para cada chave, fossem,

PHP

respectivamente: 5 .... 6 ... 7 ... 8 ?


$vector = array(um => 1,

// Novo Valor: 5

dois => Nmero dois,

// Novo Valor: 6

tres => 3,

// Novo Valor: 7

quatro => 4);

// Novo Valor: 8

foreach($vector AS $chave => $valor){

?
}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

106

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

CICLOS: FOREACH (Como faramos se... ?)


$vector = array(um => 1,

// Novo Valor: 5

dois => Nmero dois,

// Novo Valor: 6

tres => 3,

// Novo Valor: 7

quatro => 4);

// Novo Valor: 8

$contador = 5;
foreach($vector AS $chave => $valor){
$vector[$chave] = $contador;
$contador++;
}
print_r($vector);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

107

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

RESUMO INSTRUES
Instrues Condicionais:
- IF
- Switch (Uma espcie de IF para quando h mtas instrues)

Instrues Iteractivas (ou Ciclos)


- While
- Do ... While
- For
- Foreach (S para vectores!)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

108

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME


Uma funo extremamente usada em PHP a DATE
frequentemente usada com a TIME e a MKTIME que ajudam a
fazer clculos...

PHP

Vamos ver uns exemplos:

Dvidas?
Pergunte. Agora!

$hoje = date("Y-m-d H:i:s");


echo $hoje . "<br>";

Qualquer coisa:
eu@afonsogomes.com

109

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME


O timezone por defeito o UTC.
Precisamos de definir o que queremos...

PHP

Assim j deve funcionar melhor:

date_default_timezone_set(Europe/Lisbon);
$hoje = date(Y-m-d H:i:s);
echo $hoje . <br>;

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

110

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME

PHP

Temos muitas maneiras de definir o formato da data desejada,


dependendo das necessidades
$hoje = date("d/m/y"); // 21/10/13
$hoje = date("d-m-Y"); // 21-10-2013
$hoje = date("g:i:s A"); // 2:04:50 AM
$hoje = date("H:i:s");

// 02:04:50

$hoje = date("l");

// Monday

$hoje = date(Y-m-d H:i:s); // 2013-10-21 02:04:50


// Esta ltima maneira sempre a melhor para
interaes com uma Base de Dados

Todas as maneiras possveis em php.net


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

111

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME


Usando o time para definir o momento ... O time() calcula um
valor baseado no incio da Era UNIX ! Retorna o valor em

PHP

segundos desde 1 de Janeiro de 1970 s 00:00:00 GMT

$proxSem = time() + (7 * 24 * 60 * 60);


echo <b>Agora</b>: . date(Y-m-d H:i:s) . <br>;
echo <b>Prxima Sem.</b>: . date(Y-m-d H:i:s, $proxSem);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

112

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME


Usando o time para definir o momento ... O time() calcula um
valor baseado no incio da Era UNIX ! Retorna o valor em

PHP

segundos desde 1 de Janeiro de 1970 s 00:00:00 GMT

$proxSem = time() + (7 * 24 * 60 * 60);


echo <b>Agora</b>: . date(Y-m-d H:i:s) . <br>;
echo <b>Prxima Sem.</b>: . date(Y-m-d H:i:s, $proxSem);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

113

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME


A funo MKTIME usada em conjunto com o DATE bastante

PHP

til para calcular datas seja no passado ou no futuro. Assim:

echo 12/05/1982 foi um . date(l, mktime(0, 0, 0, 5, 12, 1982));

PHP

Ou assim:
$hoje = mktime(0, 0, 0, date(m), date(d)+1, date(Y));
$mespassado = mktime(0, 0, 0, date(m)-1, date(d), date(Y));
$proxano = mktime(0, 0, 0, date(m), date(d), date(Y)+1);
echo Mes Passado: . date(d-m-Y,$mespassado) . "<br>";

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

114

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME

PHP

Algumas utilidades... ou no:

$datadif1 = time() - strtotime(1982-05-12);


$dias1 = floor($datadif1/(60*60*24));
echo O Afonso j viveu . $dias1 . dias!;
$datadif2 = time() + strtotime(2014-02-28);
$dias2 = floor($datadif2/(60*60*24));
echo <br>Faltam . $dias2 . dias para a Ana nascer!;

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

115

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

include() , include_once() , require() e require_once()


Funes que se usam sempre em PHP!
Servem para incluir dentro de um ficheiro .PHP ficheiros externos

<?php

PHP

com cdigo PHP ou no! Podemos incluir ficheiros .txt, .html, etc.

require ("php/connection.php");
require ("php/functions.php");
?>

Diferentes na reaco a erros. Se ficheiro no encontrado:


REQUIRE - produz erro fatal. Pra toda a execuo da pgina.
INCLUDE - produz aviso. Continua toda a execuo da pgina.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

116

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

include() , include_once() , require() e require_once()


O require_once() e include_once() diferem das anteriores, apenas
por no incluir o ficheiro caso este j tenha sido incluido antes.

<?php

PHP

Evita problemas como redefinio de variveis...

require_once ("php/connection.php");
include_once ("php/functions.php");
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

117

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

include() , include_once() , require() e require_once()


Exemplos prticos... os que vimos anteriormente de chamada
a ficheiros com a nossa ligao Base de Dados, ou ficheiros

PHP

com as nossas funes... e nestes casos:


<div id=header >
<?php include(inc/header.php"); ?>
</div>
<div id=sh>
<div id=shesq>Voc est aqui: [...]</div>
<?php include(inc/headersub.php); ?>
</div>
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

118

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP SESSIONS
As SESSES so uma forma de guardar info sobre um visitante.

O servidor atribui um id nico ao cliente, que mantido


enquanto a sesso estiver activa.

Variveis de sesso criada, podem ser consultadas pelas pginas


seguintes (do mesmo site) que o cliente visitar.

A sesso apagada no fim da visita.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

119

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP SESSIONS
Vamos fazer um pequeno site para ver um exemplo de SESSES.

Salvem estes cdigo fontes no vosso localhost


Mudando a extenso do ficheiro para .php
http://cesae.afonsogomes.com/exemplo-sessoes.txt
http://cesae.afonsogomes.com/exemplo-sessoes2.txt
http://cesae.afonsogomes.com/exemplo-sessoes-unset.txt

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

120

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP SESSIONS
Verificar se a Sesso j est definida.

PHP

Seno ... criar a varivel de sesso que desejamos...


session_start();
if(!isset($_SESSION['contador'])){
// Sesso ainda no definida. Iniciar varivel
$_SESSION['contador'] = 1;
} else {
// Sesso J definida. Incrementar contador.
$_SESSION['contador']++;
}
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

121

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP SESSIONS
O cdigo anterior cria um simples contador de pginas vistas.

Este contador ser apagado quando o utilizador sair do site

Por alguma razo podemos querer apaga-lo antes dele sair e


isso to simples como, apagarmos as variveis que crimos

PHP

para essa sesso...

Dvidas?
Pergunte. Agora!

session_start();
unset($_SESSION['contador']);

Qualquer coisa:
eu@afonsogomes.com

122

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP COOKIES
Os Cookies funcionam de maneira idntica s
Sesses.

A grande diferena que as informaes das


variveis que definirmos ficam armazenadas num pequeno
ficheiro txt no computador do visitante do site.

Duas notas importantes:


- H pessoas que tm os cookies desligados nos seus browsers.
- A info fica disponvel para acesso numa prxima visita.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

123

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP COOKIES
Para definirmos um cookie temos de dar um nome e um valor
varivel e definirmos uma durao (validade).

<?php

PHP

Sintaxe: setcookie(name, value, expire, path, domain);

setcookie(utilizador , Afonso, time()+60*60*24*30);


setcookie(contadorvisitas, 1, time()+60*60*24*30);
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

124

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP COOKIES
Para usarmos informaes guardadas numa cookie...

PHP

Verificamos se elas esto definidas e apanhamo-las:


<?php
if (isset($_COOKIE[utilizador ])) {
echo Bem Vindo . $_COOKIE[utilizador ] . !<br>;
} else {
echo Bem vindo visitante!<br>;
}
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

125

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP COOKIES
Para apagarmos uma cookie, definimos uma validade j

<?php

PHP

expirada (no passado!) bem como os valores do cookie vazio!

setcookie(utilizador , , time()-60*60*24*30);
setcookie(contadorvisitas, , time()-60*60*24*30);
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

126

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP COOKIES
Vamos ver um pequeno exemplo

Salvem estes cdigo fontes no vosso localhost


Mudando a extenso do ficheiro para .php
http://cesae.afonsogomes.com/exemplo-cookies.txt
http://cesae.afonsogomes.com/exemplo-cookies-apaga.txt

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

127

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

TRABALHAR COM FICHEIROS EM PHP


Uma das funcionalidades do PHP poder manipular ficheiros.

Como se fossemos ns a mexer nos nossos ficheiros...

E o que podemos fazer?


No ficheiro: Criar novo , Abrir, Fechar, Apagar
Nos contedos do ficheiro: Escrever, Ler, Adicionar coisas , Apagar

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

128

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: FOPEN e FCLOSE

PHP

Ento ... vamos l comear a perceber como a coisa funciona:

<?php
$filename = onossoficheiro.txt;

Pode ser:
W, R ou A

$filehandle = fopen($filename, w )
or die(Erro: Impossvel abrir!);
fclose($filehandle);
?>

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

129

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: FWRITE

PHP

No adianta abrir e fechar se no for para fazer alguma coisa!

// Acrescentem isto depois do fopen e antes do fclose


// Salvar... executar no browser... ver como ficou no ficheiro
$escreveisto = Funciona! Impacbel! . PHP_EOL;
fwrite($filehandle, $escreveisto);
$eisto = Altamente!;
fwrite($filehandle, $eisto);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

130

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: FWRITE

PHP

E mais um pouco do FWRITE!

// Agora troquem as linhas do slide anterior por estas!


// Salvar... executar no browser... ver como ficou no ficheiro
$istotambem = Isto afinal fcil! . PHP_EOL;
fwrite($filehandle, $istotambem);

Problemas? :)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

131

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: FWRITE

PHP

E mais um pouco do FWRITE... com o APPEND


$filename = onossoficheiro.txt;
$filehandle = fopen($filename, A)
or die(Erro: Impossvel abrir!);
$escreveisto = Funciona! Impacbel! . PHP_EOL;
fwrite($filehandle, $escreveisto);
$istotambem = Isto afinal fcil! . PHP_EOL;
fwrite($filehandle, $istotambem);
fclose($filehandle);
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

132

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: FREAD

PHP

Para fazer leitura de contedos de um ficheiro...


$filename = onossoficheiro.txt;
$filehandle = fopen($filename, r )
or die(Erro: Impossvel abrir!);
$dados = fread($filehandle, 5);

echo <b>Os dados do ficheiro: </b> . $dados;


fclose($filehandle);

Os primeiros 5 bytes (1 byte = 1 caracter)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

133

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: FREAD

PHP

Para fazer leitura de contedos de um ficheiro...


$filename = onossoficheiro.txt;
$filehandle = fopen($filename, r )
or die(Erro: Impossvel abrir!);

$dados = fread($filehandle, filesize($filename));


echo <b>Os dados do ficheiro: </b> . $dados;
fclose($filehandle);

Assim j l todo o ficheiro!

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

134

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

FICHEIROS EM PHP: UNLINK (Apagar)

PHP

A funo unlink apaga completamente o ficheiro

$filename = onossoficheiro.txt;
unlink($filename);

CUIDADO! Quanto mais poderosa uma funo, maior a


probabilidade de fazer borrada... A funo unlink propcia
a causar acessos de raiva 1 minuto depois de a termos usado!

Testem e depois deixem esta linha comentada nos exemplos.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

135

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PROCESSAR FORMULRIOS EM PHP


Processar formulrios talvez a funo mais importante do PHP

- Gere toda a interactividade entre o utilizador e a


infra-estrutura do nosso site.

- Permite que o utilizador afecte de forma efectiva os recursos


do nosso servidor (inseres na BD, envio de emails, etc).

- Todo o cuidado pouco ao nvel da segurana quando


lidamos com inputs submetidos pelos utilizadores
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

136

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PROCESSAR FORMULRIOS EM PHP


Vamos estudar o caso de um formulrio submetido no nosso site
que far com que seja enviado um email para a nossa conta de
email de uso dirio.

A funo que trata disto em PHP a mail()


.

Mas antes de deixarmos os dados entrar nessa funo, temos de


fazer algumas verificaes e introduzir algumas seguranas.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

137

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PROCESSAR FORMULRIOS EM PHP


Um dos lemas essenciais na segurana de um site :

if(!function_exists("seguranca_dados")){

PHP

Nunca confiar em nada que um utilizador submete.

function seguranca_dados($dados){
$dados = trim($dados);
$dados = stripslashes($dados);
$dados = htmlspecialchars($dados);
return $dados;
}
}

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

138

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PROCESSAR FORMULRIOS EM PHP


Vamos analisar um exemplo prtico e til...

Salvem estes cdigos mudando a extenso do ficheiro para .php


(O envio de email s funciona no servidor e no no localhost)
http://cesae.afonsogomes.com/form.txt
http://cesae.afonsogomes.com/functions.txt
http://cesae.afonsogomes.com/processa-form.txt

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

139

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

BASES DE DADOS: O que so

Uma vez que o constituinte central de qualquer sistema de informao


a sua memria (conjunto armazenado de dados), a soluo
informtica, para qualquer organizao, deve assentar num
depsito integrado de dados a base de dados.

Uma base de dados , por definio, um conjunto organizado de dados,


disponvel a todos os utilizadores ou processamentos da organizao
que deles tenham necessidade

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

140

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

BASES DE DADOS: Informao poder!


Dados so apenas elementos ou valores discretos que, isoladamente,
no tm qualquer valor, s se transformam em informao quando
relacionados ou interpretados de alguma forma.

Para que possa ser utilizada como apoio eficaz tomada de deciso
nas organizaes, a informao s tem valor se se verificarem,
simultaneamente, algumas condies: actualidade, correco,
relevncia, disponibilidade e legibilidade .

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

142

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Antes: Sistemas de Gesto de Ficheiros


Os antecessores, em termos de evoluo tecnolgica, dos modernos
sistemas de BDs foram os sistemas de gesto de ficheiros. Utilizando
sistemas de gesto de ficheiros, as organizaes comearam por
automatizar algumas das tarefas at a realizadas manualmente.

PROBLEMA1: Basta que ocorra uma alterao na estrutura dum ficheiro


para que essa alterao se propague, necessariamente, para todas as
aplicaes que o utilizam a partilha de dados apresenta problemas
ao nvel da manuteno dos prprios sistemas.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

143

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Antes: Sistemas de Gesto de Ficheiros


PROBLEMA2: O acesso concorrente aos dados partilhados tem de ser
feito ao nvel das prprias aplicaes, utilizando funes de baixo-nvel.
Isto gera uma imensa confuso quando vrias pessoas, ou processos,
tentam aceder aos ficheiros simultaneamente.

Os sistemas de BDs surgem como tentativa de resolver estes problemas.


A abordagem pelos sistemas de Bds tem uma caracterstica fundamental:
os dados so organizados num nico conjunto.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

143

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

AGORA: Sistemas de Gesto de Ficheiros


Todos os acessos aos dados passam sempre por uma entidade
designada Sistema de Gesto de Bases de Dados (SGBD), que centraliza

Aplicao
1
Aplicao
2

SGBD

em si o acesso fsico Base de Dados.

BD

Aplicao
3

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

144

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Sistemas de Gesto de Ficheiros


Por definio, o Sistema de Gesto de Bases de Dados (SGBD) um
conjunto de software, destinado a gerir todo o armazenamento e
manipulao dos dados do sistema, fazendo a interface entre o
nvel aplicacional e a base de dados propriamente dita.
.

O SGBD esconde os detalhes de armazenamento fsico dos dados e


Aplicao
1

um grau de abstraco elevado.


Aplicao
2

SGBD

proporciona, ao nvel aplicacional,

BD

Aplicao
3

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

145

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Conceito de transao
um dos conceitos mais importantes num sistema BDs. Praticamente
todas as tarefas de gesto de base de dados vivem custa deste conceito.
.

Exemplo tpico: transferncia de valores entre duas contas bancrias.


Debitar de A e creditar em B S a sua execuo conjunta produz
um resultado vlido.
.

Por definio, uma transaco um conjunto de operaes sobre


a base de dados, perfeitamente delimitado, que exibe algumas
caractersticas importantes, conhecidas por ACID (Atomicity, Consistency,
Isolation and Durability) .
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

146

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Conceito de transao
Atomicidade: o conjunto de operaes que constituem uma transaco
formam um grupo indivisvel (atmico), no sentido em que ou todas elas
so executadas com sucesso ou nenhuma executada.

Consistncia: uma transaco, se envolver actualizao de dados, deve


transportar a base de dados de um estado de integridade para outro
estado tambm de integridade.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

147

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Conceito de transao
Isolamento: apesar de as transaces executarem concorrentemente,
o sistema deve dar a cada transaco a iluso de que a nica a
executar no sistema executa isoladamente das outras

Durabilidade: o sistema deve assegurar que todos os efeitos provocados


por uma transaco bem sucedida se tornam persistentes na base de
dados e visveis para as outras transaces

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

148

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Requisitos fundamentais de um SGBD


Segurana: O objectivo das medidas de segurana dos SGBDs
proteger os dados armazenados de acessos no autorizados,
garantindo que apenas os utilizadores autorizados acedem ao sistema,
de acordo com os seus privilgios atravs de perfis ou contas.

Integridade: Por definio, uma base de dados est num estado de


integridade se contm apenas dados vlidos, isto , que no
contradizem a realidade que esto a representar, antes a reflectem
correctamente.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

149

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Requisitos fundamentais de um SGBD


Controlo da concorrncia: Um dos pressupostos fundamentais dos
SGBDs a partilha dos dados armazenados pelo nvel aplicacional.
O controlo da concorrncia relaciona-se com a coordenao dessa
partilha por vrias aplicaes e/ou utilizadores. A unidade base do
controlo da concorrncia a transaco .

Recuperao/tolerncia a falhas: a actividade que tem por objectivo o


restaurar da base de dados, aps a ocorrncia de uma qualquer falha,
para um estado de integridade garantido.
Mecanismos de recuperao: backups e transaction logs .
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

150

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

BASES DE DADOS: Como chegar a um boa BD

Modelo Conceptual

Problema
Real

de Dados
EX: Diagrama E-R

Modelo Fsico de

Modelo de

Base de Dados

Base de Dados

EX: Oracle,
mySQL, MSSQL

EX: hierrquico
rede, relacional

Base de Dados

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

151

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

BASES DE DADOS: Software muito til


brModelo: Pequeno executvel de 500KB para desenhar Diagramas E-R
http://cesae.afonsogomes.com/brModelo.exe

MySQL Workbench: A ferramenta para Bases de Dados. Faz tudo!


Diagramas, Modelos Relacionais, gera cdigos para criar a BD, etc...
http://cesae.afonsogomes.com/mysql-workbench.msi (WIN)
http://cesae.afonsogomes.com/mysql-workbench.dmg (MAC)

MySQL: O servidor de Base de Dados. Est includo no vosso XAMPP


(localhost) e nas contas de alojamento caso tenham comprado domnios.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

152

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Conceptual de dados


Diagrama E-R (Entidade-Relacionamento)

- Proposto por Peter Chen em 1976

- Devido sua notao simples e poderosa, depressa se tornou numa


abordagem quase universal para a modelao de dados. Curiosamente,
ainda hoje no existe uma notao E-R normalizada.

- Como proposto originalmente, os elementos bsicos de um diagrama


E-R so as entidades , os relacionamentos e os atributos .

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

153

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Entidades


Uma entidade representa um conjunto de objectos (concreto ou
abstrato) do mundo real que possuem caractersticas comuns.
.

As entidades representam uma classe de objectos do mundo real


Os objectos em si so as instncias (ocorrncias)

Dvidas?
Pergunte. Agora!

Pessoa

Cidade

Ana Lusa

Penafiel

Isabel

Porto

Cristiana

Gaia
Qualquer coisa:
eu@afonsogomes.com

154

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Relacionamentos


Um relacionamento representa uma associao entre entidades.

Pessoa

Residncia

Cidade

Ana Lusa

Penafiel

Isabel

Porto

Cristiana

Gaia

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

155

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Cardinalidade de um Relacionamento


Cardinalidade mxima (1 ou N) representa a quantidade mxima
de ocorrncias de uma entidade que pode estar associada a uma
mesma ocorrncia de outra entidade.

Equipa

Tem

Jogador

1 equipa tem N jogadores


Cada jogador pode estar em apenas uma equipa
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

156

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Cardinalidade de um Relacionamento


Quanto Cardinalidade mxima , os relacionamentos podem ser do tipo:
1:1 (Um para um)

Equipa

1:N (Um para muitos)

Tem

N:N (Muitos para Muitos)

Jogador

1 equipa tem N jogadores


Cada jogador pode estar em apenas uma equipa
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

157

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Cardinalidade de um Relacionamento


Cardinalidade Mnima (0 ou 1) indica se a participao de todas as
ocorrncias de uma entidade num determinado relacionamento
obrigatria ou opcional.

Livro

Autoria

Pessoa

1 livro obrigatoriamente tem pelo menos 1 autor


1 pessoa pode no ser autor de 1 livro
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

158

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Atributos


A cada entidade (ou relacionamento) podem estar associados um
ou mais atributos que representam as suas propriedades elementares.

Num

Nome

Piloto

Idade

Corrida

Circuito

Nome

Kms

Classificao

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

159

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Atributos identificadores


Um identificador um atributo que determina inequivocamente
uma entidade. Toda a entidade deve possuir um e apenas um
identificador.

NumBI

Corrida

Nome
Ano
Cidado

Dvidas?
Pergunte. Agora!

Classificao

Qualquer coisa:
eu@afonsogomes.com

160

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Diagrama E-R: Tipos de Atributos


Atributo Identificador

Atributo Derivado

J vimos o que faz!

Pode ser obtido de outro atributo

Num

Idade
Rua

Atributo Composto

Morada

Porta
Cidade
Cod Postal

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

161

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Conceptual (Diagrama E-R): EXERCCIO


Considere que se pretende criar uma BD para gerir casos de investigao
policial. Numa investigao policial existe um crime, caracterizado por
um identificador nico, a data e local da ocorrncia e uma pequena
descrio do sucedido. Um crime supostamente cometido por um ou
mais suspeitos, caracterizados por um identificador, um nome,
uma morada completa, um contacto e um nmero de um documento de
identificao. Um crime est tambm associado a um conjunto de provas,
que so recolhidas por um investigador criminal numa determinada data
e local. Cada prova caracterizada por um identificador, um nome e uma
pequena descrio. Por seu lado, o investigador criminal identificado
por um nmero de identificao, o seu nome e o respectivo contacto.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

162

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Conceptual (Diagrama E-R): EXERCCIO


Considere que se pretende criar uma BD para gerir casos de investigao
policial. Numa investigao policial existe um crime , caracterizado por
um identificador nico , a data e local da ocorrncia e uma pequena
descrio do sucedido. Um crime supostamente cometido por um ou
mais suspeito s, caracterizados por um identificador, um nome ,
uma morada completa , um contacto e um nmero de um documento de
identificao . Um crime est tambm associado a um conjunto de prova s,
que so recolhidas por um investigador criminal numa determinada data
e local . Cada prova caracterizada por um identificador, um nome e uma
pequena descrio . Por seu lado, o investigador criminal identificado
por um nmero de identificao , o seu nome e o respectivo contacto .
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

163

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Conceptual (Diagrama E-R): EXERCCIO

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

164

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Conceptual (Diagrama E-R): EXERCCIO 2


O exerccio 2 tem muito texto e no cabe neste slide:

Abram este ficheiro:


http://cesae.afonsogomes.com/bdconceptual-ex2.txt

A pergunta:
Desenhe o diagrama conceptual para a base de dados do sistema
de gesto de reparaes em estaes de extraco de petrleo.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

165

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Conceptual (Diagrama E-R): EXERCCIO 2

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

166

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo de Base de Dados: Modelo Relacional


O Modelo Relacional tem a sua base num ramo da matemtica que ,
simultaneamente, simples e poderosa a teoria dos conjuntos .

Artigo com os fundamentos tericos do Modelo Relacional publicado


a 1970 por Edgar Cordd da IBM.

Alguns dos SGDB relacionais mais representativos so a Oracle ,


MSSQL e MS Access (ambos da Microsoft), DB2 e Informix (da IBM)
e o mySQL (cdigo livre! Mas agora detida pela Oracle depois desta
ter comprado a SUN MicroSystems.

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

167

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Relacional: Tabelas


A tabela a estrutura fundamental do modelo relacional.
Uma relao uma estrutura com um determinado esquema e zero
ou mais instncias.

O esquema de uma relao constitudo por um ou mais atributos


(tambm designados por colunas ). Cada atributo ter associado um
tipo de dados de acordo com a informao que ir armazenar.

A cada instncia do esquema de uma relao designa-se por linha .

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

168

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Relacional: Tabelas


TABELA FORMANDO

Linhas

Atributos (ou Colunas)

Cod_formando

Nome

Sexo

1001

Francisco Telles

1002

Felismino Felizardo

1003

Ana Magalhes

Formando(Cod_formando, Nome, Sexo)


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

169

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Relacional: Tipos de Chaves


Superchave: associao de um ou mais atributos que, em conjunto,
identificam univocamente cada uma das linhas. Nota: no limite, a
associao de todos os atributos de uma relao forma uma superchave.
Chave Candidata: subconjunto dos atributos de uma superchave que,
sendo ainda superchave, no pode ser reduzido sem perder esse estatuto
Chave Primria: chave seleccionada entre as vrias chaves candidatas
para, efectivamente, identificar cada linha.
Chave Estrangeira: atributo ou conjunto de atributos de uma relao,
que chave primria noutra relao
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

170

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Relacional: Tipos de Chaves


A existncia de uma chave estrangeira numa tabela prende-se com a
necessidade de manter a interligao entre essa tabela e a tabela onde
esse conjunto de atributos chave primria.

Curso

Formando

Dvidas?
Pergunte. Agora!

Cod_curso

Nome

15

Web Design

16

Multimedia

Cod_formando

Nome

1001

Felizardo Felicidade M

15

1002

Felismino Felizardo M

16

1003

Felisberto Felismino F

15

Qualquer coisa:
eu@afonsogomes.com

Sexo

Cod_curso

171

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Modelo Relacional: Restries de Integridade Implcitas


Integridade de Domnio: O valor de um atributo deve obedecer ao tipo
de dados e s restries de valores que lhe esto admitidos.
Integridade da Entidade: Cada linha de uma tabela deve poder ser
identificada inequivocamente. Isto quer dizer que cada tabela dever
possuir na sua definio uma chave primria. A existncia de uma chave
primria garante que o atributo ou os atributos que a constituem no
podem ser nulos, nem podem ser repetidos.
Integridade Referencial: O valor dos atributos que constituem a chave
estrangeira de uma tabela deve estar tambm presente na chave
primria da tabela referenciada.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

172

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Mapeamento Diagrama E-R para o Modelo Relacional


Chega a uma altura do desenvolvimento de Base de Dados em que
temos os nossos diagramas E-R feitos e precisamos de converte-los
para o Modelo Relacional.
Vamos ver alguns casos de como fazer isso
Ndoc

Docente

Nome

1
Ensina
Disc

Tel

N
Disciplina

PreReq
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

173

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento 1:1

Docente

CASO 1: Participao obrigatria das duas entidades.

Ensina

Todos os docentes tm de leccionar um s disciplina.

Cada disciplina tem de ser assegurada por um docente

Disciplina

Ndoc

Nome

Tel

Disc

Prereq

101

Afonso

12345

Amat2

Amat1

P1

D1

125

Felismino 54321

Inf1

Nenhum

P2

D2

P3

D3

Docente (Ndoc, Nome, Tel, Disc, Prereq)


apenas necessria 1 entidade.

A chave primria pode ser a chave primria de qualquer entidade


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

174

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento 1:1
Docente

CASO 2: Participao obrigatria de apenas uma entidade.


Todos os docentes tm de leccionar uma s disciplina.
Ndoc

Nome

Tel

Disc

Prereq

101

Afonso

12345

Amat2

Amat1

Inf1

Nenhum

1
Disciplina

Ndoc

Nome

Tel

Disc

Disc

Prereq

101

Afonso

12345

Amat2

Amat2

Amat1

Inf1

Nenhum

Docente (Ndoc, Nome, Tel, Disc)

Ensina

P1
P2
P3

D1
D2
D3
D4

Disciplina (Disc, Prereq)

Necessria 2 tabelas. Cada com a sua chave primria.


Chave primria Disc chave estrangeira na tabela Docente
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

175

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento 1:N
CASO 3
Ndoc

Nome

Tel

Disc

Prereq

Ndoc

101

Afonso

12345

Amat2

Amat1

101

125

Felismino 54321

PHP Av

PHP

101

Docente (Ndoc, Nome, Tel)

Disciplina (Disc, Prereq, Ndoc)

Necessria 2 tabelas.
Cada com a sua chave primria.
Chave primria do lado 1 (Ndoc) tem de ser usada como atributo
na entidade do lado N
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

176

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento 1:N

Docente

CASO 3: Participao obrigatria do lado N

Ensina

Os docentes podem leccionar vrias disciplinas

Cada disciplina tem de ser assegurada por um s docente

Disciplina

Ndoc

Nome

Tel

Disc

Prereq

101

Afonso

12345

Amat2

Amat1

101

Afonso

12345

PHP Av.

PHP

P1

125

Felismino 54321

P2
P3

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

D1
D2
D3
D4

177

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento 1:N

Docente

CASO 4: Participao no obrigatria nem do lado 1

Ensina

nem do lado N. Um docente pode estar dispensado


do servio. Uma disciplina pode no ter inscritos

suficientes para ser leccionada nesse ano.

Disciplina

Ndoc

Nome

Tel

Disc

Prereq

101

Afonso

12345

Amat2

Amat1

101

Afonso

12345

PHP Av.

PHP

P1

125

Felismino 54321

P2

CSS

HTML

P3

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

D1
D2
D3
D4

178

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento 1:N
CASO 4
Ndoc

Nome

Tel

101

Afonso

12345

125

Felismino 54321

Docente (Ndoc, Nome, Tel)

Disc

Prereq

Amat2

Amat1

PHP Av

PHP

CSS

HTML

Disciplina (Disc, Prereq)

Disc

Ndoc

Amat2

101

PHP Av

101

Ensina (Disc, Ndoc)

Necessrias 3 tabelas.

As tabelas principais, cada com a sua chave primria.


A tabela do relacionamento tem como atributos as chaves primrias
de cada uma das outras tabelas.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

179

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento N:N

Docente

CASO 5: Participao no obrigatria nem do lado 1


nem do lado N. Um docente pode ensinar vrias

Ensina

disciplinas. Uma disciplina pode ser ensinada por

vrios docentes

Disciplina
Ndoc

Nome

Tel

Disc

Prereq

101

Afonso

12345

Amat2

Amat1

101

Afonso

12345

PHP Av.

PHP

125

Felismino 54321

CSS

HTML

P2
P3
P4

A soluo igual ao CASO 4


Dvidas?
Pergunte. Agora!

P1

Qualquer coisa:
eu@afonsogomes.com

D1
D2
D3
D4
D5

180

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Relacionamento TERNRIO N:N:N


CASO 6: Nem tudo so sempre relaes binrias!

Seminrio

O modelo final seria:

Aluno (Id_aluno, ...)


Aluno

Inscrito

Orientador

Orientador (Id_orient, ...)


Seminario (Id_sem, ...)

Inscrio (Id_aluno,Id_orient,Id_sem)
Necessrias 4 tabelas.
As tabelas principais, cada com a sua chave primria.
A tabela do relacionamento tem como atributos as chaves primrias
de cada uma das outras tabelas.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

181

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO
A normalizao o processo sistemtico de remover dados redundantes
de tabelas, como vista a melhorar armazenamento, eficincia,
integridade de dados, e escalabilidade.
No modelo relacional, existem mtodos para quantificar o quo
eficiente uma BD. Estes estados so chamados Forma Normais (FN)
Este processo de normalizao pelas vrias fases FN normalmente
envolve dividir uma tabela em mltiplas tabelas

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

182

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO
BoyceCodd
1FN

2FN

mais Redundncia
menos Relaes

3FN

5FN

FN

Ponto

6FN

menos Redundncia

de

mais Relaes

Equilibrio
Edgar Codd, inicialmente definiu as 3 primeiras FNs
Agora h tambm a 4FN e a 5FN que so ainda mais trabalhadas mas
a 3FN considerada suficiene para a maioria das aplicaes.
Quando uma BD atinge a 3FN tambm esto na FN Boyce-Codd (BCFN)
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

183

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO

1FN

2FN

3FN

BC-FN

5FN

6FN

Uma relao diz-se na Primeira Forma Normal (1FN) quando:


- No contm atributos multivalor e no contm grupos repetitivos
Uma relao diz-se na Segunda Forma Normal (2FN) quando:
- Est na Primeira Forma Normal (1FN);
- Todos os atributos no chave dependem funcionalmente da
totalidade da chave.
Uma relao diz-se na Terceira Forma Normal (3FN) quando:
- Est na Segunda Forma Normal (2FN);
- Todos os atributos no chave no dependem funcionalmente
uns dos outros.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

184

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO

1FN

2FN

3FN

BC-FN

5FN

6FN

O que so dependncias funcionais?


Dependncia Funcional: Existe uma dependncia funcional
X -> Y entre dois conjuntos de atributos X e Y, se uma
instncia de valores de X determina ou identifica univocamente
uma instncia de valores dos atributos de Y

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

185

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

1FN

NORMALIZAO

2FN

3FN

BC-FN

5FN

6FN

Consideremos esta tabela:


Ttulo

Autor1

Autor2

ISBN

Assunto

Pgs

DB System
Concepts

Abraham
Silberschatz

Henry F.
Korth

0072958863 MySQL, PCs 1168

McGraw-Hill

OS System
concepts

Abraham
Silberschatz

Henry F.
Korth

0471694665 Pcs

McGraw-Hill

944

Editor

Esta tabela no muito eficiente com o armazenamento, o design dela


no protege a integridade de dados e no tem uma boa escalabilidade.
2 violaes da 1FN!! Temos dois campos de autor. E o campo de Assunto
contm mais de um dado. Com mais de um dado num campo seria
muito difcil pesquisar todos os livros de um determinado assunto.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

186

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO
A mesma tabela mas ... na PRIMEIRA FORMA NORMAL !
Ttulo

Autor

ISBN

DB System
Concepts

Abraham
Silberschatz

DB System
Concepts

Assunto

Pgs

Editor

0072958863 MySQL

1168

McGraw-Hill

Henry F.
Korth

0072958863 PCs

1168

McGraw-Hill

OS System
concepts

Abraham
Silberschatz

0471694665 Pcs

944

McGraw-Hill

OS System
concepts

Henry F.
Korth

0471694665 Pcs

944

McGraw-Hill

Temos agora 2 linhas para cada livro (para alm de) estarmos a
violar a 2FN. Uma soluo para o 1 problema separar as tabelas...
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

187

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO

As nossas tabelas separadas...

Ttulo

ISBN

Pgs

DB System
Concepts

0072958863 1168

OS System
concepts

0471694665 944

ID_autor

Pnome

Unome

Abraham

Silberschatz

Henry

F. Korth

Editor

ID_assunto Assunto

McGraw-Hill

MySQL

Pcs

McGraw-Hill

Cada tabela tem uma Primary Key, usadas para juntar tabelas quando
pedirmos os dados. Uma Primary Key tambm um index o que ajuda
a acelerar este processo. Agora temos de definir tabelas de relao!
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

188

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO
LivroAutor
ISBN

Tabelas de relaes... nada mais simples


LivroAssunto

Id_autor

ISBN

Id_assunto

0072958863 1

0072958863 1

0072958863 2

0072958863 2

0471694665 1

0471694665 2

0471694665 2

Enquanto a 1FN lida com redundncia de dados em filas a 2FN lida


com redundncia de dados em colunas. Como vimos antes, as FN so
progressivas. para atingir a 2FN precisamos de ter atingido a 1FN
o que j fizemos. Vamos ver a Tabela Livro para o exemplo da 2FN
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

189

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO

Passagem para a 2FN

Livro

Editor
Editor

ID_editor

Editor

0072958863 1168

McGraw-Hill

0471694665 944

Ttulo

ISBN

DB System
Concepts
OS System
concepts

Pgs

E pronto ... j est na 2FN


Aqui temos uma relao 1:N entre tabelas Livro e Editor. Quando temos
relao 1:N, pomos a chave estrangeira na tabela Livro a apontar para
a chave primria da tabela Editor.
E para a 3FN? Todos os atributos no chave dependem funcionalmente
ou no uns dos outros?
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

190

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

NORMALIZAO

Passagem para a 3FN

Livro
Ttulo

ISBN

DB System
Concepts

0072958863 1168

OS System
concepts

0471694665 944

Editor

LivroEditor

Id_editor Editor

ISBN

0072958863 1

Pgs

McGraw-Hill

Id_editor

0471694665 1

E pronto ... j est na 3FN


Isto porque j estava na 2FN e todos os atributos no-chace da tabela
Livro no dependem funcionalmente uns dos outros. O modelo final:
Livro (ISBN, Ttulo, Pgs)

Editor (Id_editor, Editor)

Autor (Id_autor, Pnome, Unome)

Assunto (Id_assunto, Assunto)

LivroEditor (ISBN, Id_editor)

LivroAssunto (ISBN, Id_assunto)

LivroAutor (ISBN, Id_autor)


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

191

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Como linguagem de definio de Dados


A SQL, enquanto Linguagem de Definio de Dados, disponibiliza
um conjunto de comandos para a criao (CREATE), alterao
(ALTER) e remoo (DROP) de tabelas e outras estruturas.

SQL

Comando CREATE DATABASE permite criar uma BD.

CREATE DATABASE nome_da_base_de_dados

Comando DROP DATABASE permite remover uma determinada BD,

SQL

apagando todas as tabelas e, consequentemente, todos os dados

Dvidas?
Pergunte. Agora!

DROP DATABASE nome_da_base_de_dados


Qualquer coisa:
eu@afonsogomes.com

192

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Comando CREATE TABLE


O comando CREATE TABLE permite criar uma tabela.

CREATE TABLE nome_tabela(

Dvidas?
Pergunte. Agora!

SQL

Exemplo
a

SQL

Sintaxe Bsica

CREATE TABLE Professor(


id_prof

INT PRIMARY KEY,

tipo,

nome

VARCHAR(50),

...

...,

data_nasc

DATETIME,

colunan

tipo,

salario

FLOAT)

coluna1

tipo,

coluna2

Qualquer coisa:
eu@afonsogomes.com

193

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Colunas - Valores por defeito


Na criao de uma tabela por defeito as colunas podem assumir valores
nulos. possvel especificar se admite ou no atravs da clusula
NULL ou NOT NULL
tambm possvel associar um outro valor por defeito atravs da

SQL

clusula DEFAULT

Dvidas?
Pergunte. Agora!

CREATE TABLE Professor(


id_prof

INT NOT NULL,

nome

VARCHAR(50),

data_nasc

DATETIME NULL,

salario

FLOAT DEFAULT 1000 )

Qualquer coisa:
eu@afonsogomes.com

194

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Tipos de Dados Bsicos

XXX Os mais comuns

Tipos de Dados

Descrio

CHAR

Um nico caracter

CHAR(N)

String comprimento fixo (n>0)

VARCHAR(N)

String comprimento varivei (n>0)

INTEGER ou INT

Inteiro (com sinal)

SMALINT

Pequeno Inteiro

FLOAT

Nmero Real (virgula flutuante)

BOOL ou BOOLEAN

Booleano: True ou false

DATE

Data (DD-MM-AAAA)

TIME

Tempo (HH:MM:SS)

DATETIME ou TIMESTAMP

Tipo Datetime (os anteriores juntos)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

195

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Restries
So regras a que os valores de uma ou mais colunas devem obedecer.
A utilizao de restries a nica garantia que temos de que os dados
existentes nas colunas esto de acordo com as regras especificadas
no desenho da base de dados ( esta verificao feita no servidor SQL,
a aplicao que programarmos, deve fazer verificaes antes d
submeter dados a uma BD! ). Restries mais frequentes:
- NOT NULL : a restrio de uso mais generalizado, pois impede
a introduo de valores nulos na coluna.
- CHECK() - permite realizar a validao os dados introduzidos numa
coluna atravs da especificao de condies. So admitidos apenas
dados cujo resultado da avaliao da condio resulte em Verdadeiro.
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

196

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Restries (e vemos j tambm os operadores.)


Operadores a usar na restrio CHECK(). LGICOS: AND, OR, NOT

CREATE TABLE Professor(


Id_prof INT NOT NULL ,

SQL

RELACIONAIS: =, <, >, >=, <= ou != OUTROS: BETWEEN, IN, IS, LIKE

Nome VARCHAR(50) NOT NULL CHECK(Nome NOT LIKE %Feli%) ,


Idade INT NOT NULL CHECK(Idade BETWEEN 0 AND 150) ,
Sexo CHAR NOT NULL CHECK(Sexo IN (M, F)) ,
Salario FLOAT NOT NULL CHECK(Salario >= 0) ,
Data_Nasc DATE NOT NULL ,
Data_Admi DATE NOT NULL ,
CHECK(Data_Admi > Data_Nasc)
)
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

197

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Restrio UNIQUE

CREATE TABLE Professor(

SQL

Permite indicar que os valores dessa coluna no se podem repetir.

Id_prof INT,
Nome VARCHAR(50) UNIQUE ,
Telefone VARCHAR(9),
BI INT UNIQUE
)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

198

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Restrio PRIMARY KEY

CREATE TABLE Professor(

SQL

utilizada para indicar qual a chave primria (se houver) da tabela

Id_prof INT PRIMARY KEY,


Nome VARCHAR(50) UNIQUE ,
Telefone VARCHAR(9),
BI INT UNIQUE
)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

199

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Restrio FOREIGN KEY

CREATE TABLE Professor(

SQL

utilizada para indicar qual as chaves estrangeiras da tabela

Id_prof INT,
Nome VARCHAR(50) NOT NULL ,
Telefone VARCHAR(9),
BI NUMERIC NOT NULL UNIQUE ,
Cod_Postal NUMERIC(4) REFERENCES Postal(Codigo) ,
Salario FLOAT(10,2) NOT NULL CHECK(Salario >= 0) ,
PRIMARY KEY(Id_prof) ,
FOREIGN KEY(BI) REFERENCES Seg_Social(BId)
)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

200

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: ALTER TABLE e DROP TABLE

ALTER TABLE nome_tabela ADD nome_coluna tipo_coluna

SQL

ALTER TABLE permite alterar a estrutura de uma tabela

ALTER TABLE nome_tabela MODIFY nome_coluna tipo_coluna


ALTER TABLE nome_tabela DROP nome_coluna

DROP TABLE permite remover uma tabela (toda a estrutura e valores

SQL

so apagados)
DROP TABLE nome_tabela

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

201

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: INSERT
A SQL enquanto Linguagem de Manipulao de Dados, disponibiliza
um conjunto de comandos que podem ser classificados em 2 grupos:
- Actualizao da BD (comandos INSERT, UPDATE e DELETE )
- Interrogao BD (comando SELECT )

SQL

O comando INSERT permite inserir novos registos numa tabela da BD.


INSERT INTO nome tabela VALUES(valor1, ...., valorn)
.

OU
.

INSERT INTO nometabela(coluna1, ..., colunan)


VALUES (valor1, ..., valorn)
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

202

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: INSERT
SQL

INSERT INTO Professor(Nome, Telefone)

VALUES (Felismino Felisberto, 961122334)

Se queremos inserir valores em todas as colunas poderemos utilizar o

SQL

formato abreviado. A ordem das colunas deve ser a da tabela!


INSERT INTO Professor(nome) VALUES (Felismino Felisberto)

SQL

E um exemplo com datas...


INSERT INTO Professor(Nome, Telefone, Data_Nasc)
VALUES (Felismino Felisberto, 961122334, 1970-02-13)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

203

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: UPDATE

SQL

Permite alterar valores j existentes no campo de uma tabela


UPDATE nome_tabela
SET coluna1 = {expressao ou valor},
coluna2 = {expressao ou valor},
....,
colunan = {expressao ou valor}
[WHERE condio]

A clusula WHERE permite restringir o conjunto de registos que iro


ser afectados pelo comando. Se no for colocada as alteraes sero
realizadas em todos os registos da tabela
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

204

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: UPDATE

SQL

EXEMPLO:

UPDATE Professor
SET Salario = Salario * 100

SQL

OUTRO EXEMPLO:
UPDATE Professor
SET Salario = Salario * 100
WHERE Categoria = Professor Catedrtico

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

205

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT

SQL

Permite consultar uma base de dados relacional


SELECT coluna1, coluna2, ..., colunan, *
FROM tabela1, ...., tabelak
[WHERE condio]
[GROUP BY ...]
[ORDER BY ...]
Todos os exemplos seguintes sero baseados nas seguintes tabelas:
Aluno (Numero, Nome, Idade, Propina, Telefone, Cod_curso)
Curso (Cdigo, Designao)
Disciplina (Cod_disciplina, Nome_Disciplina)
Avaliao (Id_aval, Cod_disciplina, Nota)
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

206

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: DELETE

SQL

Permite apagar conjuntos de linhas existentes numa nica tabela


DELETE FROM nome_tabela
[WHERE condio]

SQL

EXEMPLO:
DELETE FROM Professor

SQL

OUTRO EXEMPLO:

Dvidas?
Pergunte. Agora!

DELETE FROM Professor


WHERE Id_prof = 125

Qualquer coisa:
eu@afonsogomes.com

207

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT

SQL

Exemplo bsico de um SELECT


SELECT Designacao FROM Curso

SQL

Aqui podemos usar o asterisco (selecionar todas as colunas da tabela)


SELECT * FROM Curso

SQL

Podemos tambm, s querer selecionar algumas colunas da tabela

Dvidas?
Pergunte. Agora!

SELECT Numero, Nome, Cod_Curso FROM Aluno

Qualquer coisa:
eu@afonsogomes.com

208

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT com restries


J vimos operadores l atrs.. vamos ver alguns exemplos...

SQL

Operadores Relacionais:
SELECT *
FROM Aluno

SQL

WHERE Idade = 21

SELECT Numero, Nome, Propina


FROM Aluno
WHERE Idade >= 23

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

209

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT com restries

SQL

Operadores Lgicos: AND, OR, NOT

SELECT Numero, Nome, Idade


FROM Aluno

SQL

WHERE Idade >= 20 AND Idade <= 30

SELECT Numero, Nome, Idade


FROM Aluno
WHERE NOT (Idade < 20 OR Idade > 30)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

210

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT com restries


Operador LIKE
A comparao de strings com operadores relacionais (=, !=, etc) utiliza
sempre a totalidade da string. Para partes de strings utiliza-se o LIKE

Caracteres especiais de comparao:


% (percentagem) - Conjunto de zero ou mais caracteres

SQL

_ (underscore) - Um caractere qualquer


SELECT Numero, Nome, Idade
FROM Aluno
WHERE Nome LIKE P%

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

211

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT com restries

SQL

Operador LIKE... Outos exemplos:

SELECT Numero, Nome, Idade


FROM Aluno

SQL

WHERE Nome LIKE %ui%

SELECT Numero, Nome, Idade


FROM Aluno
WHERE Nome LIKE _ui%

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

212

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECT com restries


Operador COUNT e Operador AS
O COUNT efectua uma contagem de todos os elementos que se
enquadram na restrio. O AS faz com que a base de dados

SQL

devolva o valor da contagem num campo com o nome que quisermos.

SELECT COUNT(*) AS contagem


FROM Aluno
WHERE Idade = 23

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

213

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Ordenando os SELECTS


A ordenao realizada com a clusula ORDER BY. Esta clusula a

SQL

existir aparece sempre posicionada no final do comando SELECT:


SELECT coluna1, coluna2, ..., colunan, *
FROM tabela1, ...., tabelak
[WHERE condio]
[GROUP BY ...]
[ORDER BY coluna [ASC|DESC]]

ASC indica ordenao ascendente. DESC indica ordenao descendente

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

214

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Ordenando os SELECTS

SQL

Por defeito, a ordenao ascendente


SELECT *

SELECT *

FROM Aluno

FROM Aluno

ORDER BY Idade

ORDER BY Idade ASC

SQL

E outro exemplo:
SELECT Nome, Propina
FROM Aluno
WHERE Telefone IS NOT NULL
ORDER BY Propina DESC

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

215

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: Ordenando os SELECTS (mltiplas colunas)


Caso se indique que se pretende ordenar o resultado de um SELECT
por mais do que uma coluna, a ordenao feita pela primeira coluna,

SQL

SELECT *

SQL

e entre os valores iguais ordenada pela segunda coluna, etc etc etc...

FROM Aluno
ORDER BY Idade, Propina

Dvidas?
Pergunte. Agora!

SELECT *
FROM Aluno
ORDER BY Idade DESC , Propina

Qualquer coisa:
eu@afonsogomes.com

216

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECTS de dados em mltiplas tabelas


J vimos ao estudar a Normalizao em Modelo de Bases de Dados
que vamos ter informaes divididas por vrias tabelas.

SQL

Para seleccionar este tipo de dados poderiamos fazer, por ex, assim:

SELECT *
FROM Livro, Autor, LivroAutor
WHERE Livro.ISBN = LivroAutor.ISBN
AND Autor.ISBN = LivroAutor.ISBN
ORDER BY Livro.ISBN

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

217

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: SELECTS de dados em mltiplas tabelas


Tambm podemos atribuir nomes abreviados e escolhidos por ns

SQL

s tabelas para facilitar e escrevermos menos coisas!

SELECT titulo
FROM filmes F, actores A, filmesactores FA
WHERE F.id_filme = FA.id_filme
AND A.id_actor = FA.id_actor
AND A.nome = 'Clint Eastwood'

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

218

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
Considerando a seguinte BD:
1) Quais os docentes registados no
sistema? [informao completa]
2) Quantos equipamentos esto
registados no sistema?
3) Qual a distribuio de
equipamentos por docente? (Quantos)
4) Quantos equipamentos existem no edifcio com nome Engenharias I?
5) Quais os equipamentos possui o docente com o nome
Joo Antnio no edifcio Geocincias?
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

219

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
1) Quais os docentes registados no
sistema? [informao completa]

SELECT * FROM Docente

2) Quantos equipamentos esto


registados no sistema?

SELECT COUNT(*) FROM Equipamento AS contagem_equipamentos

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

220

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
3) Qual a distribuio de equips
por docente? (Quantos)

SELECT idDocente,
COUNT(*) FROM Equipamento E
AS numero_equips1,
Docente D
WHERE E.idDocente = D.idDocente
GROUP BY idDocente

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

221

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
4) Quantos equipamentos existem no edifcio com nome Engenharias I?

SELECT COUNT(*) AS num_equips2


FROM E, Docente D, Departamento X, EdificioDepartamento Y, Edificio Z
WHERE Z.nome = Engenharias I
AND Z.idEdificio = Y.idEdificio
AND Y.idDepartamento = X.idDepartamento
AND X.idDepartamento = D.idDepartamento
AND D.idDocente = E.idDocente

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

222

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
4) Quais os equipamentos possui o docente com o nome
Joo Antnio no edifcio Geocincias?
SELECT * FROM Equipamentos E, Docente D, Departamento X,
EdificioDepartamento Y, Edificio Z
WHERE D.nome = Joo Antnio
AND Z.nome = Geocincias
AND E.idDocente = D.idDocente
AND D.idDepartamento = X.idDepartamento
AND X.idDepartamento = Y.idDepartamento
AND Y.idEdificio = Z.idEdificio
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

223

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
Considerando a seguinte BD:
1) Quais os filmes registados no sistema? [informao completa]
2) Quais os filmes nomeados para scares em 2007?
3) Quantas categorias existem registadas no sistema?
4) Quantos filmes distintos ganharam
scares em 2007?
5) Qual o filme tipo Drama
que venceu na categoria de
Melhor Filme no ano
de 2003?
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

224

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
1) Quais os filmes registados no sistema? [informao completa]

SELECT * FROM Filme

2) Quais os filmes nomeados para scares em 2007?

SELECT * FROM Filme F, Nomeacao N


WHERE F.idFilme = N.idFilme
AND N.ano = 2007

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

225

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
3) Quantas categorias existem registadas no sistema?

SELECT COUNT(*) AS contador_categorias FROM Categoria

4) Quantos filmes distintos ganharam scares em 2007?

SELECT COUNT(DISTINCT titulo)


FROM Filme F, Nomeacao N
WHERE N.ano = 2007
AND N.idFilme = F.idFilme
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

226

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

SQL: EXERCCIOS
5) Qual o filme tipo Drama que venceu na categoria de Melhor
Filme no ano de 2003?
SELECT titulo FROM Filme F, Nomeacao N, Categoria C,
Tipo T, TipoFilme X
WHERE N.ano = 2003
AND T.tipo = Drama
AND C.nome = Melhor Filme
AND C.idCategoria = N.idCategoria
AND N.idFilme = F.idFilme
AND F.idFilme = X.idFilme AND X.idTipo = T.idTipo
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

227

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

O PHP COM MYSQL


Agora que j sabemos tudo sobre Modelos Conceptuais,
Modelos de Bases de Dados e sabemos como fazer queries
em SQL... Vamos ver como interligar o mySQL e o PHP

EMAIL
HTML
&
JS

Dvidas?
Pergunte. Agora!

PHP

Qualquer coisa:
eu@afonsogomes.com

SQL

228

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

O PHP e MYSQL

Dvidas?
Pergunte. Agora!

Vamos ligar o nosso servidor de mySQL

Qualquer coisa:
eu@afonsogomes.com

229

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

O PHP e MYSQL
Agora vamos ao browser ao endereo localhost/phpmyadmin

O phpmyadmin uma GUI (ferramenta visual) para auxiliar


em interaes com bases de dados em mySQL.

No PHPMYADMIN precisamos de criar um utilizador para uso


posterior. Este utilizador ter privilgios totais (s) BD(s) que
utilizarmos no nosso site.

Vejam como fao e faam nos vossos computadores...


Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

230

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP e MYSQL: mysqli_connect e mysql_set_charset


Agora que criamos a nossa Base de Dados e o Utilizador ...

PHP

Vamos ter um ficheiro que estabelece a ligao entre PHP e mySQL


$dbhost = localhost;

liga.php

$dbuser = XXXXXXXX;
$dbpass = YYYYYYYYY;
$db = filmescesae;
$liga = mysqli_connect($dbhost,$dbuser,$dbpass,$db)
or die("Erro: " . mysqli_error($liga));
mysql_set_charset($liga,utf8);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

231

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP e MYSQL: mysqli_query e mysqli_close()

APENAS EXEMPLO

include(liga.php);

PHP

Agora o comando essencial de interao entre PHP e mySQL.

$query = CREATE TABLE pessoas(


id_pessoa INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(30),
idade INT,
PRIMARY KEY(id_pessoa));
$resultado = mysqli_query($liga, $query);
mysqli_close($link);
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

232

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP e MYSQL: Ler dados de uma Base de Dados

APENAS EXEMPLO

include(liga.php);

PHP

Uma outra operao corriqueira em BDs ler os dados

$query = SELECT * FROM pessoas;


$resultado = mysqli_query($liga, $query) or
die(mysqli_error($liga));
while($linha = mysql_fetch_array( $resultado)){
echo $linha[nome] . tem $linha[idade]
}
mysqli_close($link);
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

233

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP e MYSQL: Inserir dados

APENAS EXEMPLO

include(liga.php);

PHP

Usamos o mysqli_query para criar tabelas. Vamos inserir dados

$query = INSERT INTO pessoas(nome,idade)


VALUES(Afonso Gomes,31);
$resultado = mysqli_query($liga, $query) or
die(mysqli_error($liga));
if($resultado){ echo Dados inseridos com sucesso; }
mysqli_close($link);
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

234

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP e MYSQL: EXERCICIO


Crie um ficheiro PHP que receba via $_GET as variveis nome e

PHP

idade e que as insira na nossa Base de Dados:


ex-inserts.php

include(liga.php);
[...?]

$query = INSERT INTO pessoas(nome,idade)


VALUES( [...?] , [...?] );
$resultado = mysqli_query($liga, $query);
if($resultado){ echo Dados inseridos com sucesso; }
mysqli_close($link);
Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

235

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP

PHP e MYSQL: EXERCICIO


ex-inserts.php

include(liga.php);
$nome = $_GET[nome];
$idade = $_GET[idade];

$query = INSERT INTO pessoas(nome,idade)


VALUES( $nome , $idade );
$executa = mysqli_query($liga, $query);
if($executa){ echo Dados inseridos com sucesso; }
mysqli_close($link);

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

236

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

PHP/MYSQL
Como puderam constatar, PHP e SQL um mundo grande, cheio
de coisas para explorar.

Aqui, como em outras reas, tem de reinar o sentimento de


nunca se sabe tudo e estarmos continuamente a aprender.

Comecem um projecto vosso, para gerir filmes, msicas, ficheiros,


etc. e ponham em prtica tcnicas que aprenderam e pratiquem
para no esquecer. Isto no como andar de bicicleta !! :-)

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

237

PROFISSIONAL EM WEBDESIGN
b PHP e mySQL

CENTRO DE SERVIOS E APOIO S EMPRESAS

Acabou!

Dvidas?
Pergunte. Agora!

Qualquer coisa:
eu@afonsogomes.com

238

Das könnte Ihnen auch gefallen