O documento discute conceitos fundamentais de PHP, incluindo como configurar um servidor local, variáveis, tipos de dados, e funções básicas como echo. Há também exemplos de código PHP simples.
1. PROFISSIONAL EM WEBDESIGN
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
4. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
4
HTML
JS
&
SQL
EMAIL
PHP
O QUE É O PHP
- É uma linguagem de programação comummente usada em servidores web
- Quer dizer PHP: HyperText PreProcessor
- Código Aberto
- Código embebido em páginas web
9. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
9
PHP: Fundamentais
PHP é embebido dentro de páginas HTML com as tags:
...
Ficheiros HTML com código PHP dentro de si, têm de ter a
extensão .php (e não .html).
As linhas de código em PHP são fechadas com ponto e virgula
<?php ?>
Isto é obrigatório!
12. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
12
Informações do nosso servidor
Podemos também ver quais são as definições do servidor
que estamos a usar, recorrendo à função phpinfo();
aPHP
<?php
?>
phpinfo();
phpinfo.php
13. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
13
Considerações sobre Literals (os valores de variáveis)
- Todas as devem ser fechadas dentro de aspas
ou aspas duplas: ou
- não são fechados dentro de aspas: ou ou 3
- (true/false) podem ser directamente escritos
como ou
strings
Números
Booleanos
‘’Olá Mundo’’ ‘Olá Mundo’
1 45 4.15
true false
14. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
14
Comentários em PHP
// Isto é um comentário
# Isto é outro comentário
/* Isto também
é um comentário*/
// #
- Não usem comentários dentro de comentários
- Recomenda-se o uso do e não o
15. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
15
Mostrar dados
- Existem duas funções disponíveis para mostrar dados:
e o
- Podem ser usadas com ou sem os parêntesis ()
- Os dados gerados pelo PHP passam para o browser como
HTML. Ao fazer «Ver fonte» só vemos o resultado e não o
código PHP que o gerou.
print() echo()
16. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
16
Mostrar dados
O resultado é sempre o mesmo não é?
aPHP
<?php
?>
(’Olá Mundo’);
‘’Olá Mundo’’;
(‘’Olá Mundo’’);
‘’Olá Mundo’’;
echo
echo
print
print
echoprint.php
17. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
17
Escapando Caracteres
- Alguns caracteres são considerados ‘’especiais’’
- Temos de ‘’escapar’’ estes caracteres com o símbolo
(a barra para trás ou backslash)
- Caracteres especiais serão flagueados quando aparecerem,
por exemplo uma aspa simples ou aspas duplas, e se estiver
escapado o PHP processa-os, senão interpreta-os como sendo
parte do código e vai gerar erros...
18. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
aPHP
<?php
?>
‘’A minha amiga irlandesa’’;
Mary O’Bradley’;
‘’disse ‘’Olá Mundo‘’.’’;
echo
echo ‘
echo
// A minha amiga irlandesa Mary O’Bradley disse
‘’Olá Mundo’’
escaping.php
18
Escapando Caracteres
Um exemplo:
19. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
19
VARIÁVEIS: O que são
Quando trabalhamos com PHP, quase sempre precisamos de
um sítio onde guardar um valor (string, numero, booleano, etc)
para que mais tarde possamos usar este valor noutros sítios
do nosso programa.
A estes sítios onde guardamos valores chamamos VARIÁVEIS
20. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
20
VARIÁVEIS: Vamos chamar-lhes nomes!
- Uma variável começa sempre com e depois o seu
- São sensíveis a maiúsculas/minúsculas
- é diferente de diferente de
- O nome de uma variável deve começar sempre com uma letra
ou um undescore ( _ ). por um número.
$ nome
$variavel $VARIAVEL$Variavel
NUNCA
- Escrever sempre em minúsculas para jogar pelo seguro!
21. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESASaPHP
<?php
?>
‘’Afonso’’;
31;
‘’O ’’ . $nome;
‘’ tem ’’;
$idade;
$nome =
$idade =
echo
echo
echo
// Resultado: O Afonso tem 31
variaveis.php
21
VARIÁVEIS: Um exemplo
22. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESASaPHP
<?php
?>
‘’Afonso’’;
31;
22;
‘’O ’’ . $nome . ‘’ tem ’’ . $idade . ‘’ anos’’;
$nome =
$idade =
$idade =
echo
// Resultado: O Afonso tem 22 anos
variaveis.php
22
VARIÁVEIS: Outro exemplo
É preciso um certo ...cuidado com o que fazemos
Neste exemplo vemos também concatenação!
23. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
23
USO DE ‘’ OU DE ‘
Uma dúvida recorrente é o uso de aspa dupla ‘’ ou aspa simples ‘
- Há uma diferença entre strings escritas com ‘’ ou com ‘
- Numa string com aspas duplas, qualquer variável é
expandida para o seus valor.
- Numa string com aspa simples, não há expansão da
variável para o seu valor.
Vamos ver um exemplo...
24. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
24
USO DE ‘’ OU DE ‘
aPHP
<?php
?>
= ‘’Afonso’’;
31;
‘’O $nome tem $idade anos’’;
‘O $nome tem $idade anos’;
$nome
$idade =
echo
echo
// Resultado: O Afonso tem 31 anos
// Resultado: O $nome tem $idade anos
aspasteste.php
25. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
25
VARIÁVEIS: Em profundidade!
Agora que já vimos os conceitos globais de variáveis e constantes,
vamos aprofundar um bocadinho mais nos de
variáveis:
- 4 escalares: , , e
- 2 compostos: e
- 2 especiais: e
diferentes tipos
O PHP suporta 8 tipo de variáveis primitivas
boolean integer float string
array object
resource NULL
26. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
26
VARIÁVEIS: BOOLEANOS
Exprimem valores lógicos. TRUE (verdadeiro) ou FALSE (falso)
Podem ser escritos em minúsculas ou maiúsculas
aPHP
= true;
false;
$b1
$b2 =
= TRUE;
FALSE;
$b1
$b2 ==
Passar uma variável a booleano:
aPHP
= 5;
(bool) $b3;
$b3
$b4 =
= 5;
= TRUE;
$b3
$b4
Dá FALSE quando: - O booleano falso; O inteiro 0 (Zero); O real
0.0 (zero); - Array vazio; o tipo especial NULL; String vazio
ORIGINA =>
27. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
27
VARIÁVEIS: INTEIROS
Um número inteiro - integer - é um número do conjunto de Z
aPHP
$a $b = $c == 1234; -1234; 0x1A;
// Decimal Negativo Hexadecimal
VARIÁVEIS: REAIS
Um número real - float - é um número do conjunto de R
aPHP
$a $b = $c == 1.234; 1.2E3; 7E-5;
// 1,234 1200 0.000005
28. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
28
VARIÁVEIS: STRINGS
Já vimos anteriormente estas:
aPHP
$a $b == ‘’Afonso’’; ‘Afonso Gomes’;
// Afonso Afonso Gomes
Assim também funciona:
aPHP
$c = <<<FIM
Exemplo de um texto que se estende por algumas
linhas usando uma sintaxe entre marca.
<div class="umaclasse">Afonso</div>
FIM;
29. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
29
VARIÁVEIS: STRINGS, Acesso a caracteres
Também podemos aceder a caracteres de uma string...
aPHP
<?php
?>
$d
echo
echo
echo
= ‘’Afonso!’’;
‘’String Original: ‘’ . $d;
‘’Primeiro Caracter:’’ . $d[0];
‘’Ultimo Caracter:’’ . $d[strlen($d)-1];
// A
// !
30. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
30
VECTORES
Outra maneira de armazenar dados é em vectores (Arrays)
Um vector pode ser criado utilizando a função array() que usa,
como parâmetro uma sequência de pares chave => valor
separados por vírgula.
inteiro/string. qualquer coisaChave: Valor:
aPHP
<?php
?>
$e
print_r(
echo
= array(1 => ‘Valor1’, 2 => ‘Valor2’, 3 => ‘Valor3’);
$e);
$e[2];
31. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
31
VECTORES
Não gostou como apareceram as coisas no browser quando
testou? Experimente mudar para isto:
aPHP
<?php
?>
$e
echo
print_r(
echo
echo
= array(1 => ‘Valor1’, 2 => ‘Valor2’, 3 => ‘Valor3’);
‘’<pre>’’;
$e);
‘’</pre>’’;
‘’O segundo valor do vector é: ‘’ . $e[2];
d
32. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
32
VECTORES
Reparamos que podemos ver o valor de uma chave do vector...
Mas também podemos .
Continuando o nosso código:
apagar, acrescentar e até editar chaves
aPHP
<?php
?>
$e
print_r
echo
unset( )
echo
= array(1 => ‘Valor1’, 2 => ‘Valor2’, 3 => ‘Valor3’);
$e;
$e[2];
$e[2] ;
$e[2];
33. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
33
VECTORES
aPHP
<?php
?>
$e
print_r (
echo
unset( )
echo
print_r (
= array(1 => ‘Valor1’, 2 => ‘Valor2’, 3 => ‘Valor3’);
$e);
$e[2];
$e[2] ;
$e[3];
$e[4] = ‘’Que seca de sessão!’’;
$e[4] = ‘’Está a ser porreiro!’’;
$e);
// Função que apaga elemento de um vector
34. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
34
VECTORES
aPHP
<?php
?>
$a = 10;
$b = ‘’Afonso’’;
$e
$e[1] = $a;
$e[2] = $b;
$e[3] = ‘’Um teste’’;
print_r($e)
= array();
;
Também podemos criar vectores vazios e depois introduzir-lhe
elemento a elemento!
35. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
35
VECTORES ASSOCIATIVOS
Neste tipo de vectores associamos um valor a uma chave à qual
damos um nome. Nos vectores anteriores davamos nomes
às nossas chaves!
não
aPHP
<?php
?>
$f[’clube’]
$f[’cidade’]
$f[’país’]
$f[’umasocor’]
print_r (
= ‘’FC Porto’’;
= ‘’Porto’’;
= ‘’Portugal’’;
= ‘’Azul e Branco’’;
$f);
36. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
36
VECTORES MULTIDIMENSIONAIS
Nome bonito para ... vectores dentro de vectores
aPHP
$g = array( 1 => array( ’’clube’’ => ‘’FC Porto’’,
’’cidade’’ => ‘’Porto’’,
’’cor’’ => ‘’Azul’’
),
2 => array( ’’clube’’ => ‘’Sporting CP’’,
’’cidade’’ => ‘’Lisboa’’,
’’cor’’ => ‘’Verde’’
)
);
print_r ($g);
37. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
37
VECTORES MULTIDIMENSIONAIS
Como procurar elementos nestes vectores?
aPHP
<?php
?>
echo
print_r( )
echo
echo
echo
echo
‘’<pre>’’;
$g ;
‘’</pre>’’;
$g[1][’clube’] . ‘’<br>’’;
$g[2][’cidade’] . ‘’<br>’’;
$g[1][’cor’] . ‘’<br>’’;
38. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
38
VECTORES MULTIDIMENSIONAIS (EXERCICIO)
Prepare um vector multidimensional (com um mínimo de 4
elementos no primeiro nível). Chame-lhe $turma
Em cada elemento vamos guardar, também em vector, informações
sobre pessoas da turma. Nome, Sobrenome, Idade, Função, etc...
nome = Afonso
sobrenome = Gomes
idade = 31
funcao = formador
Exemplo:
40. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
40
Recursos
Um recurso é uma variável especial que contem uma referência
para um recurso externo. Aí vai um exemplo:
aPHP
<?php
?>
$servidor = ‘’localhost’’;
$user = ‘’admin’’;
$password = ‘’12345’’;
$ligação = mysqli_connect($servidor, $user, $password);
41. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
41
NULL
O tipo especial NULL representa uma variável que não tem
valor definido. O termo NULL pode ser escrito em maiúsculas
ou minúsculas.
aPHP
<?php
?>
$variavelvazia = NULL;
echo $variavelvazia;
42. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
42
VARIÁVEIS PREDEFINIDAS EM PHP
O PHP tem um conjunto de variáveis já definidas que contêm
informações relevantes sobre o ambiente que o rodeia e o
programa em curso. São chamadas as
- Variáveis da responsabilidade do servidor web
- Variáveis obtidas por meio do HTTP GET
- Variáveis obtidas por meio do HTTP POST
- Variáveis obtidas a partir dos cookies
- Variáveis associadas à sessão do utilizador actual
- Variáveis respeitantes ao upload de ficheiros.
SUPERGLOBAIS
.
$_SERVER
$_GET
$_POST
$_COOKIE
$_SESSION
$_FILES
43. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
43
VARIÁVEIS SUPERGLOBAIS: $_SERVER
Quero explorar todas estas com vocês aqui!
vermos qualquer coisa a funcionar vamos ver a
Mas, para já e para
$_SERVER
aPHP
<?php
?>
echo
echo
echo
echo
$_SERVER[’SERVER_ADDR’] . ‘’<br>’’;
$_SERVER[’SERVER_NAME’] . ‘’<br>’’;
$_SERVER[’REMOTE_ADDR’] . ‘’<br>’’;
$_SERVER[’DOCUMENT_ROOT’] . ‘’<br>’’;
//REMOTE_HOST não funciona Localhost
44. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
44
VARIÁVEIS REVISÃO
Pequeno exemplo de variáveis...
aPHP
<?php
?>
$nome ;
$Nome ;
echo ‘’
$1teste =
$_1teste =
echo
= ‘’Felismino’’
= ‘’Felisberto’’
$nome, $Nome<br>’’;
‘’Teste’’;
‘’Teste’’;
$_SERVER[’DOCUMENT_ROOT’];
// Funciona!
// DÁ ERRO!
// Funciona!
// V. Superglobal
45. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
45
ÂMBITO DAS VARIÁVEIS
As variáveis têm um âmbito de aplicação. Podem ser SuperGlobais
Globais ou Estáticas
aPHP
<?php
?>
$i ;
include ( ;
= 5
‘’ficheiro.php’’)
Este exemplo usa inclusão de ficheiros... não se preocupem com
isso para já!
VARIÁVEIS GLOBAIS
A variável $i é global e pode ser utilizada pelo código que está
presente no ficheiro que foi
incluído!
46. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
46
VARIÁVEIS GLOBAIS
Ao contrário dos ficheiros, as variáveis não se estendem para
funções. No exemplo seguinte, nada é imprimido porque a
dentro da funçãovariável $b não está definida
aPHP
<?php
?>
$b = 5;
function teste(){
echo $b;
}
teste();
Este exemplo usa funções de PHP... não se preocupem com isto!
47. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
47
VARIÁVEIS ESTÁTICAS (LOCAIS)
Uma variável estática é uma variável que mantém o seu valor
mesmo após o programa ter abandonado o âmbito onde ela foi
definida
aPHP
<?php
$a = 5;
echo "Antes: " . $a . "<br>";
function teste2() {
static $a;
$a = 10;
echo ‘’Durante: ‘’ . $a;
}
teste2();
echo ‘’<br>Depois: " . $a;
?>
48. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
48
CONSTANTES
Enquanto uma variável pode, lá está, variar ao longo do código,
uma constante mantem-se inalterável de inicio ao fim.
- Os nomes não começam com o $ (cifrão)
- As constantes são definidas com a função define();
- As constantes são GLOBAIS. Podem ser acedidas dentro de
outras funções.
- As constantes não podem ser redefinidas nem eliminadas.
Vamos ver um exemplo...
49. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESASaPHP
<?php
?>
(’_NOME_’,’Afonso’);
(’_IDADE_’, 31);
‘’O ’’ . _NOME_ . ‘’ tem ’’ . _IDADE_ . ‘’ anos’’;
define
define
echo
// Resultado: O Afonso tem 31 anos
contantes.php
49
CONSTANTES
Possível aplicação? Ficheiros de línguas de um site multi-língua
50. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
50
EXPRESSÕES
Agora que sabemos tudo sobre variáveis... o que podemos fazer
com elas? E o podemos fazer? Usamos expressões.
.
Já vimos algumas ... vamos dar-lhes um olhar mais atento para
perceber como funcionam!
como
aPHP
<?php
?>
$nome
echo
= ‘’Afonso’’;
$nome;
EXPRESSÃO
OPERADOR
51. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
44
EXPRESSÕES
Alguns exemplos! (Ter em mente... OPERADORES é mais à frente!)
aPHP
<?php
?>
$a = 10;
$b = $c = 2;
$d = $c + $b;
$e = 10 + $d + ($c * $b);
$e++;
$f = $e;
echo $f;
// $b = 2 E $c = 2
// Incrementa um valor!
// É igual a $e = $e + 1;
51
52. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
FUNÇÕES
Uma função é também uma expressão. As funções são usadas
para fazer ‘’re-aproveitamento’’ de código.
aPHP
<?php
?>
function dizOla(){
echo ‘’Olá Mundo’’;
}
dizOla();
52
A função do exemplo não possui
qualquer parâmetro de entrada.
Quando chamada apenas
imprime Olá Mundo.
53. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
Parâmetros de entrada?
São valores que queremos dar de entrada à função!
Que é isso??
aPHP
<?php
?>
function dizOla2($nome){
echo ‘’Olá ’’ . $nome;
}
$nome = ‘’Afonso’’;
dizOla2($nome);
53
Experimentem esta!
Invocação (Chamada) com passagem de
parâmetros
FUNÇÕES
54. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
44
Vamos ver mais exemplos com parâmetros de entrada...
Funcões podem executar uma acção ou retornar um valor
aPHP
<?php
?>
function soma($a, $b){
echo $a + $b;
}
soma(4154,10124);
54
aPHP
<?php
?>
function soma($a, $b){
return $a + $b;
}
$c = soma(457,215);
echo $c;
=
A execução de uma função pára assim que um valor for retornado
FUNÇÕES
55. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
44
Em funções podemos permitir que não seja necessário introduzir
certos parâmetros. Usamos parâmetros predefinidos...
55
aPHP
<?php
?>
function multiplica($a, $b = 10){
return $a * $b;
}
echo multiplica(5);
echo multiplica(3,5);
// Resultado: 50
// Resultado: 15
FUNÇÕES
56. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
44
Agora que somos experts em funções, voltemos ao ex de vectores!
56
aPHP
$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 funções para tarefas corriqueiras...
Lista de funções p/ vectores: php.net/manual/en/ref.array.php
FUNÇÕES ... mais um exemplo!
57. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
44
Muitas vezes é essencial ... e não é nada de difícil...
57
aPHP
function soma2nums($a,$b){
return $a + $b;
}
echo soma2nums(15,soma2nums(3,6));
Simples não é ?
FUNÇÕES ... dentro de Funções
58. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
OPERADORES
Em PHP há imensos operadores para muitas operações diferentes
Vamos ver os mais usuais! (Alguns já foram vistos antes!)
Um operador indica uma acção a ser executada entre membros
de uma expressão
58
aPHP
<?php
?>
$nome
echo
= ‘’Afonso’’;
$nome;
EXPRESSÃO
OPERADOR
59. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
59
EXEMPLO NOME RESULTADO
$a + $b Adição Soma de $a com $b
$a - $b Subtracção Diferença entre $a e $b
$a * $b Multiplicação Produto de $a por $b
$a / $b Divisão Quociente entre $a por $b
$a % $b Módulo Resto da divisão de $a por $b
OPERADORES: Aritméticos
60. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
EXEMPLO NOME RESULTADO
$a == $b Igual Verdade se $a igual a $b
$a === $b Idêntico Verdade se $a igual a $b (e mesmo tipo)
$a != $b Diferente Verdade se $a diferente de $b
$a !== $b Não Idêntico
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
OPERADORES: Relacionais
60
61. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
EXEMPLO NOME RESULTADO
$a AND $b Conjunção TRUE se $a $b forem TRUEE
$a && $b Conjunção TRUE se $a $b forem TRUEE
$a OR $b
Disjunção
Inclusiva
TRUE se $a $b forem TRUEOU
$a || $b
Disjunção
Inclusiva
TRUE se $a $b forem TRUEOU
$a XOR $b
Disjunção
Inclusiva
TRUE se $a $b forem TRUE
(mas não ambos simultâneamente)
OU
!$a
Negação
Lógica
TRUE se $a for FALSE
OPERADORES: Lógicos
61
62. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
EXEMPLO NOME RESULTADO
$a++ Pós-Incremento Incrementa $a e depois devolve $a
++$a Pré-Incremento Devolve $a e depois incrementa $a
$a-- Pós-Decremento Decrementa $a e depois devolve $a
--$a Pre-Decremento Devolve $a e depois decrementa $a
OPERADORES: Incremento/Decremento
62
Sem medo... vamos ver mais disto nos CICLOS.
63. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
OPERADORES: Condicional
63
Representa-se por
expr1 ? expr2 : expr3
Se FALSE é devolvido o valor da expr3
? e tem uma estrutura muito semelhante
a uma estrutura de controlo SE.
A expr1 é avaliada. Se TRUE é devolvido o valor da expr2
Sintaxe:
.
5155
aPHP
$a = 9; $b = 10;
print ($a > $b ? ‘’$a é maior’’ : ‘’$a é menor’’);
$d = 5; $e = $d * $d;
print ($e >= 100 ? ‘’É maior’’ : ‘’É menor’’);
.
// $e é o quadrado de $d
64. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
OPERADORES: De Strings
64
Operador de concatenação
Operador de concatenação e atribuição
5155
aPHP
$k = ‘’Olá’’;
$k = $k . ‘’ Mundo !‘’; // Olá Mundo !
5155
aPHP
$m = ‘’Olá’’;
$m .= ‘’ mundo !’’; // Olá mundo !
65. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
65
5155
5155
Referência completa de todos os operadores, aqui:
http://php.net/manual/en/language.operators.php
php.net(basta ir a e pesquisar Operators)
OPERADORES: Lista completa
66. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
EXERCICIOS
66
5155
5155
1) Escreva uma função que faça a soma de dois números
Teste 2 vezes com valores a serem imprimidos no browser
aPHP
<?php
?>
function soma2nums($num1,$num2) {
return $num1 + $num2;
}
$a = 10;
$b = 15;
echo soma2nums($a, $b);
echo soma2nums(27,$b);
67. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
EXERCICIOS
67
2) Escreva uma função que calcule o cubo de um número
Teste 2 vezes com valores a serem imprimidos no browser
3) Escreva uma função que diga se um número é par ou impar
Teste 2 vezes com valores a serem imprimidos no browser
68. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
EXERCICIOS
68
5155
5155
aPHP
<?php
?>
function cubomaiorquemil($a){
$b = $a * $a * $a;
echo ($b >= 1000 ? "SIM ($b >= 1000)<br>" : "NÃO ($b)<br>");
}
function parouimpar($a){
echo ($a % 2 == 0 ? "($a) PAR<br>" : "($a) IMPAR<br>");
}
parouimpar(10); parouimpar(7);
cubomaiorquemil(9); cubomaiorquemil(15);
69. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
FUNÇÕES ESSENCIAIS NO PHP (1)
69
5155
aPHP
O PHP possui uma extensa biblioteca de funções definidas para
facilitar a vida à malta. Ao longo do curso, de vez em quando,
vamos ver as mais importantes. Hoje ... vamos ver algumas
funções para texto. Vejam a sintaxe de cada em php.net ...
$string1 = ‘’olá mundo!’’;
$string2 = ‘’OLÁ MUNDO!’’;
echo ($string1);
echo ($string1);
echo ($string2);
echo ($string1);
ucfirst
ucwords
strtolower
strtoupper
// Olá mundo!
// Olá Mundo!
// olá mundo!
// OLÁ MUNDO!
70. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
INSTRUÇÕES CONDICIONAIS: If
70
Esta estrutura é a famosa da programação.
É a estrutura mais usada em qualquer linguagem de programação
Também é conhecida como sendo uma Estrutura de controlo
Pode assumir 3 formas.
(expressão) Instrução
(expressão) Instrução Instrução
(expressão) Instrução Instrução Instrução ....
SE ENTÃO SENÃO
if
if else
if elseif else
SINTAXE:
71. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
INSTRUÇÕES CONDICIONAIS: If
71
Um exemplo:
5155
5155
5155
aPHP
$a = 10;
$b = 15;
if($a > $b) {
echo ‘’$a é maior que $b’’;
}
elseif($a == $b) {
echo ‘’$a é igual a $b’’;
}
else {
echo ‘’$a é menor que $b’’;
}
72. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5155
INSTRUÇÕES CONDICIONAIS: If
72
Um exemplo:
5155
5155
5155
aPHP
$a = 10;
$b = 15;
if($a > $b) {
$msg = ‘’$a é maior que $b’’;
}
elseif($a == $b) {
$msg = ‘’$a é igual a $b’’;
}
else {
$msg = ‘’$a é menor que $b’’;
}
echo $msg;
Preparamos uma
mensagem e só
a imprimimos no
fim.
73. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
73
aPHP
$nome = $_GET[’nome’];
echo $nome;
Um uso típico de um IF simples é quando recebemos variáveis
numa página através do HTTP GET
Notice: Undefined index: nome in
C:xampphtdocscesaeexemplos.php on line 282
74. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
74
aPHP
$nome = $_GET[’nome’];
echo $nome;
Mudem o endereço para: localhost/index.php?nome=Felismino
Acontece que o nosso .php não estava preparado para o caso
da variável $_GET[’nome’] !
Resolve-se isso de uma forma muito simples!
poder não estár definida
.
75. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
75
aPHP
if( ) {
$nome = $_GET[’nome’];
} else {
$nome = ‘’desconhecido’’;
}
echo ‘’Olá ‘’ . $nome;
isset($_GET[’nome’])
Usa-se um IF para verificar se a variável está ou não definida
O PHP tem uma função que faz essa verificação: isset();
76. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
76
aPHP
if( && ) {
$nome = $_GET[’nome’];
$email = $_GET[’email’];
$msg = $nome . ‘’ (’’ . $email . ‘’)’’;
} else {
$msg = ‘’Erro na introdução de parâmetros’’;
}
echo $msg;
isset($_GET[’nome’]) isset($_GET[’email’])
Várias variáveis de entrada? Sem problema!
No endereço: index.php nome=Felisberto email=a@gmail.com? &
77. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
77
aPHP
if( ) {
$nome = $_GET[’nome’];
$email = $_GET[’email’];
$msg = $nome . ‘’ (’’ . $email . ‘’)’’;
} else {
$msg = ‘’Erro na introdução de parâmetros’’;
}
echo $msg;
isset($_GET[’nome’], $_GET[’email’])
Se soubessemos o funcionamento da isset() melhor...
No endereço: index.php nome=Felisberto email=a@gmail.com? &
78. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
78
aPHP
if(!function_exists(’encurtaTexto’)){
function encurtaTexto($text,$chars='25'){
...
}
}
.
.
Outro bom uso recorrente do IF é quando definimos as nossas
funções. Já tinhamos visto que ocorre um erro se tivermos 2
funções com o mesmo nome ...
Ou seja, definimos a função só se já não estiver definida!
79. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
79
aPHP
if ($a == 5):
echo "a é igual a 5";
echo "...";
elseif ($a == 6):
echo "a é igual a 6";
echo "!!!";
else:
echo "a nem é 5 nem 6";
endif;
Também temos o IF com uma sintaxe alternativa
Simplifica a leitura mas pode ser confuso...
aPHP
if ($a == 5):
<p> A é igual a 5!</p>
endif;
<?php ?>
<?php ?>
Também podemos ter uma
coisa deste género!
80. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If
80
aPHP
if(1){
echo ‘’Sou sempre verdade’’;
} else {
echo ‘’Esta mensagem nunca será exibido!’’;
}
E para acabar os IFs ... um que é !sempre verdade
81. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: If (Exercício)
81
Faça um ficheiro PHP que receba por HTTP GET 2 variáveis
numéricas. E nesse ficheiro deve existir:
Uma função para calcular a multiplicação dessas variáveis
Uma estrutura IF que verifique se a multiplicação desses dois
números dá menor que 100, igual a 100 ou maior que 100.
Em cada caso deve imprimir uma mensagem para o ecrã, do
género: A multiplicação entre e dá que é menor que 100
em unidades.
Defina as variáveis auxiliares que achar convenientes!
>>
>>
>>
DICA:
X Y Z
W
82. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: Switch
82
aPHP
$i = 2;
switch($i){
case 0:
echo ‘$i é igual a 0’;
break;
case 1:
echo ‘$i é igual a 1’;
break;
case 2:
echo ‘$i é igual a 2’;
break;
}
O funcionamento de um SWITCH
é igual ao de um IF.
Pode e deve ser usado quando
queremos comparar muitos
valores...
83. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: Switch
83
aPHP
$i = ‘’Ana’’;
switch($formando){
case ‘’Glória’’:
echo ‘’Sentada à direita’’;
break;
case ‘’Ana’’:
echo ‘’Sentada em frente’’;
break;
case ‘’Marília’’:
echo ‘’Sentada à esquerda’’;
break;
}
[...]
84. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES CONDICIONAIS: Switch - Caso prático
84
aPHP
function StringFloracao($mes){
switch($mes){
case 1: $stringmes = ‘’Janeiro’’; break;
case 2: $stringmes = ‘’Fevereiro’’; break;
case 3: $stringmes = ‘’Março’’; break;
case 4: $stringmes = ‘’Abril‘’; break;
case 5: $stringmes = ‘’Maio‘’; break;
case 6: $stringmes = ‘’Junho‘’; break;
}
return $stringmes;
}
[...]
85. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES ITERATIVAS (CICLOS): WHILE
85
aPHP
$contador = 1;
while($contador <= 10){
echo ‘$contador é igual a’ . $contador;
$contador++;
}
Num ciclo, uma qualquer acção é processada enquanto uma
condição for verdadeira.
Antes de se fechar o ciclo devemos ter o cuidado de incrementar
o contador...
86. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
86
aPHP
$pizza = ‘’fatia1|fatia2|fatia3|fatia4|fatia5|fatia6’’;
$fatias = explode(’’|’’, $pizza);
echo $fatias[0] . ‘’<br>’’;
echo $fatias[1];
// fatia1
// fatia2
São das mais usadas funções de PHP. O condensa várias
variáveis numa só, o explode uma string para vários
pedaços e a facilita a definição de muitas variáveis ao mesmo
tempo.
IMPLODE
EXPLODE
LIST
EXPLODE
FUNÇÕES ESSENCIAIS PHP (2): e eEXPLODE LIST IMPLODE
87. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
87
aPHP
$carro = ‘’rodas, motor, volante, pedais’’;
$pecas = explode(’’, ’’, $carro, 2);
echo $pecas[0] . ‘’<br>’’;
echo $pecas[1];
// rodas
// motor, volante, pedais
EXPLODE
aPHP
$clubes = ‘’FC Porto:SL Benfica:Sporting CP’’;
list($grande, $medio, $assimassim) = explode(’’:’’,$clubes);
echo $grande . ‘’<br>’’;
echo $assimassim;
// FC Porto
// Sporting CP
EXPLODE com o LIST
FUNÇÕES ESSENCIAIS PHP (2): e eEXPLODE LIST IMPLODE
88. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
FUNÇÕES ESSENCIAIS PHP (2): e eEXPLODE LIST IMPLODE
88
aPHP
$dados = array(’’pnome’’,’’unome’’,’’email’’,’’telemovel’’);
echo $dados[1];
$todosjuntos = implode(’’ | ‘’, $dados);
echo $todosjuntos;
// unome
// pnome | unome | email | telemovel
IMPLODE
aPHP
$elems = array(’Elemento 1’, ‘Elemento 2’, ‘Elemento 3’);
echo ‘’<ul><li>’’ . implode(’’</li><li>", $elems) . ‘’</li></ul>’’;
IMPLODE (Exemplo prático)
89. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
CICLOS: WHILE ... CICLOS INFINITOS
89
aPHP
$contador = 1;
while($contador <= 10){
echo ‘$contador é igual a’ . $contador;
}
$contador++;
São dos erros mais comuns em programas...
Entra-se em ciclos infinitos quando a
.
condição que estamos
a verificar é sempre verdadeira
90. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
CICLOS: WHILE
90
aPHP
$contador = 1;
while($contador <= 10){
echo ‘$contador é igual a’ . $contador++;
}
Neste exemplos usamos o operador de pós-incremento dentro
do próprio echo...
É impresso o seu valor e logo a seguir incrementado.
91. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
91
aPHP
$contador = 1;
while($contador <= 10){
echo ‘$contador é igual a’ . ++$contador;
}
Já neste exemplo, é usado o operador de pré-incremento,
a variável $contador é incrementada e só depois disso
é que é impressa no ecrã
CICLOS: WHILE
.
92. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
92
aPHP
$contador = 1;
do {
echo ‘$contador é igual a’ . $contador;
$contador++;
} while ($contador <= 10);
Temos também a variante DO .... WHILE (fazer enquanto)
O código pouco altera.
Nesta versão,
pelo PHP.
a condição é apenas verificada depois do ciclo
ser processado
CICLOS: DO ... WHILE
.
93. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
INSTRUÇÕES ITERATIVAS (CICLOS): WHILE
93
aPHP
$contador = 1;
do {
echo ‘$contador é igual a’ . $contador++;
} while ($contador <= 10);
.
aPHP
$contador = 1;
while($contador <= 10){
echo ‘$contador é igual a’ . $contador++;
}
94. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
94
CICLOS: Exercício 1
Faça um contador que comece no 1 e quando chegar a 10
imprima a linha ‘’Olá Mundo!’’.
Deverá aparecer no ecrã algo do género:
1
2
...
8
9
Olá Mundo
95. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
95
aPHP
$i = 1;
while($i <= 10){
if($i < 10) {
echo $i . ‘’<br>’’;
}else
echo ‘’Olá Mundo!’’;
}
}
CICLOS: Exercício 1 Resolução
1
2
3
4
5
6
7
8
9
Olá Mundo!
98. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
98
CICLOS: Exercício 2
Faça um contador decrescente que comece no 20 e mostre
linha a linha a contagem até 0.
Deverá aparecer no ecrã algo tipo:
Mas quando chegar ao zero. Em vez de dizer ‘’Falta 0...’’
deve dizer
Falta 20...
Falta 19...
Falta 18...
Já está!
100. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
100
CICLOS: FOR
aPHP
for($conta = 1; $conta < 10; $conta++){
echo ‘’Número: <b>’’ . $i . ‘’</b><br>’’;
}
Tipo um While... com os comandos definidos no ínicio do bloco.
.
SINTAXE: for(expr1; expr2; expr3) { ... }
expr1:
expr2:
expr3:
Avaliada apenas uma vez na primeira iteração
Avaliada a cara iteração. O ciclo pára se der .
Avaliada no final de cada iteração. Contém a variável
de controlo.
False
101. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
101
CICLOS: FOREACH
A instrução 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) { Instruções }
foreach($vector AS $chave => $valor) { Instruções }
Vamos ver exemplos
102. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
102
CICLOS: FOREACH
A instrução 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) { Instruções }
foreach($vector AS $chave => $valor) { Instruções }
Vamos ver exemplos
aPHP
$vector = array(’’um’’ => 1,
‘’dois’’ => ‘’Número dois’’,
‘’tres’’ => 3,
‘’quatro’’ => 4);
foreach($vector AS $valor){
echo ‘’$valor<br>’’;
}
103. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
103
CICLOS: FOREACH
A instrução 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) { Instruções }
foreach($vector AS $chave => $valor) { Instruções }
Vamos ver exemplos
aPHP
$vector = array(’’um’’ => 1,
‘’dois’’ => ‘’Número dois’’,
‘’tres’’ => 3,
‘’quatro’’ => 4);
foreach($vector AS $chave => $valor){
echo ‘’A chave $chave tem o valor $valor<br>’’;
}
104. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
104
CICLOS: (Como faríamos se... ?)FOREACH
Quiséssemos que, se o valor da chave ‘’dois’’ for igual a
‘’Número dois’’ muda-la para 2 ?
aPHP
$vector = array(’’um’’ => 1,
‘’dois’’ => ‘’Número dois’’,
‘’tres’’ => 3,
‘’quatro’’ => 4);
foreach($vector AS $chave => $valor){
}
// Novo Valor: 2
?
105. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
105
aPHP
$vector = array(’’um’’ => 1,
‘’dois’’ => ‘’Número dois’’,
‘’tres’’ => 3,
‘’quatro’’ => 4);
foreach($vector AS $chave => $valor){
if ($valor == "Número dois"){
$vector[$chave] = 2;
}
}
print_r($vector);
// Novo Valor: 2
CICLOS: FOREACH
106. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
106
Quiséssemos que as os valores para cada chave, fossem,
respectivamente: 5 .... 6 ... 7 ... 8 ?
aPHP
$vector = array(’’um’’ => 1,
‘’dois’’ => ‘’Número dois’’,
‘’tres’’ => 3,
‘’quatro’’ => 4);
foreach($vector AS $chave => $valor){
}
// Novo Valor: 5
// Novo Valor: 6
// Novo Valor: 7
// Novo Valor: 8
?
CICLOS: (Como faríamos se... ?)FOREACH
107. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
107
aPHP
$vector = array(’’um’’ => 1,
‘’dois’’ => ‘’Número dois’’,
‘’tres’’ => 3,
‘’quatro’’ => 4);
$contador = 5;
foreach($vector AS $chave => $valor){
$vector[$chave] = $contador;
$contador++;
}
print_r($vector);
// Novo Valor: 5
// Novo Valor: 6
// Novo Valor: 7
// Novo Valor: 8
CICLOS: (Como faríamos se... ?)FOREACH
108. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
108
RESUMO INSTRUÇÕES
Instruções Condicionais:
Instruções Iteractivas (ou Ciclos)
- IF
- Switch
- While
- Do ... While
- For
- Foreach
(Uma espécie de IF para quando há mtas instruções)
(Só para vectores!)
109. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
109
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
Uma função extremamente usada em PHP é a
É frequentemente usada com a TIME e a MKTIME que ajudam a
fazer cálculos...
Vamos ver uns exemplos:
DATE
aPHP
$hoje = date("Y-m-d H:i:s");
echo $hoje . "<br>";
110. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
110
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
O timezone por defeito é o UTC.
Precisamos de definir o que queremos...
Assim já deve funcionar melhor:
aPHP
date_default_timezone_set(’’Europe/Lisbon’’);
$hoje = date(’’Y-m-d H:i:s’’);
echo $hoje . ‘’<br>’’;
111. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
111
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
Temos muitas maneiras de definir o formato da data desejada,
dependendo das necessidades
aPHP
$hoje = date("d/m/y");
$hoje = date("d-m-Y");
$hoje = date("g:i:s A");
$hoje = date("H:i:s");
$hoje = date("l");
$hoje = date(’’Y-m-d H:i:s’’);
// 21/10/13
// 21-10-2013
// 2:04:50 AM
// 02:04:50
// Monday
// 2013-10-21 02:04:50
// Esta última maneira é sempre a melhor para
interações com uma Base de Dados
Todas as maneiras possíveis em php.net
112. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
112
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
Usando o time para definir o momento ... O calcula um
valor baseado no início da Era UNIX ! Retorna o valor em
segundos desde 1 de Janeiro de 1970 ás 00:00:00 GMT
time()
aPHP
$proxSem = time() + (7 * 24 * 60 * 60);
echo ‘’<b>Agora</b>:’’ . date(’Y-m-d H:i:s’) . ‘’<br>’’;
echo ‘’<b>Próxima Sem.</b>: ‘’. date(’Y-m-d H:i:s’, $proxSem);
113. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
113
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
Usando o time para definir o momento ... O calcula um
valor baseado no início da Era UNIX ! Retorna o valor em
segundos desde 1 de Janeiro de 1970 ás 00:00:00 GMT
time()
aPHP
$proxSem = time() + (7 * 24 * 60 * 60);
echo ‘’<b>Agora</b>:’’ . date(’Y-m-d H:i:s’) . ‘’<br>’’;
echo ‘’<b>Próxima Sem.</b>: ‘’. date(’Y-m-d H:i:s’, $proxSem);
114. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
114
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
A função MKTIME usada em conjunto com o DATE é bastante
útil para calcular datas seja no passado ou no futuro. Assim:
aPHP
echo ‘’12/05/1982 foi um ‘’ . date(’’l’’, mktime(0, 0, 0, 5, 12, 1982));
aPHP
$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>";
Ou assim:
115. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
115
FUNÇÕES ESSENCIAIS DO PHP (3): e eTIME DATE MKTIME
Algumas utilidades... ou não:
aPHP
$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!’’;
116. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
116
include() include_once() require() require_once(), , e
Funções que se usam sempre em PHP!
Servem para incluir dentro de um ficheiro .PHP ficheiros externos
com código PHP ou não! Podemos incluir ficheiros .txt, .html, etc.
aPHP
require ("php/connection.php");
require ("php/functions.php");
<?php
?>
Diferentes na reacção a erros.
- produz erro fatal. Pára toda a execução da página.
- produz aviso. Continua toda a execução da página.
Se ficheiro não encontrado:
REQUIRE
INCLUDE
117. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
117
include() include_once() require() require_once(), , e
O require_once() e include_once() diferem das anteriores, apenas
por não incluir o ficheiro caso este já tenha sido incluido antes.
Evita problemas como redefinição de variáveis...
aPHP
require_once ("php/connection.php");
include_once ("php/functions.php");
<?php
?>
118. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
118
include() include_once() require() require_once(), , e
Exemplos práticos... os que vimos anteriormente de chamada
a ficheiros com a nossa ligação à Base de Dados, ou ficheiros
com as nossas funções... e nestes casos:
aPHP
<div id=’’header’’>
</div>
<div id=’’sh’’>
<div id=’’shesq’’>Você está aqui: [...]</div>
</div>
<?php ?>
<?php ?>
include(’’inc/header.php");
include(’’inc/headersub.php’’);
119. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
119
PHP SESSIONS
As são uma forma de guardar info sobre um visitante.
O servidor atribui um id único ao cliente, que é mantido
enquanto a sessão estiver activa.
Variáveis de sessão criada, podem ser consultadas pelas páginas
seguintes (do mesmo site) que o cliente visitar.
A sessão é apagada no fim da visita.
SESSÕES
120. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
120
PHP SESSIONS
Vamos fazer um pequeno site para ver um exemplo de SESSÕES.
Salvem estes código fontes no vosso localhost
Mudando a extensão 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
121. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
121
PHP SESSIONS
Verificar se a Sessão já está definida.
Senão ... criar a variável de sessão que desejamos...
aPHP
session_start();
if(!isset($_SESSION['contador'])){
$_SESSION['contador'] = 1;
} else {
$_SESSION['contador']++;
}
// Sessão ainda não definida. Iniciar variável
// Sessão JÁ definida. Incrementar contador.
122. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
122
PHP SESSIONS
aPHP
session_start();
unset($_SESSION['contador']);
O código anterior cria um simples contador de páginas vistas.
dele sair e
isso é tão simples como, apagarmos as variáveis que criámos
para essa sessão...
Este contador será apagado quando o utilizador sair do site
Por alguma razão podemos querer apaga-lo antes
123. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
123
PHP COOKIES
Os Cookies funcionam de maneira idêntica às
Sessões.
A grande diferença é que as informações das
variáveis que definirmos ficam armazenadas num pequeno
ficheiro txt no computador do visitante do site.
- Há pessoas que têm os cookies desligados nos seus browsers.
- A info fica disponível para acesso numa próxima visita.
Duas notas importantes:
124. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
124
PHP COOKIES
Para definirmos um cookie temos de dar um nome e um valor
à variável e definirmos uma duração (validade).
Sintaxe: setcookie(name, value, expire, path, domain);
aPHP
<?php
?>
setcookie(’’utilizador’’, ‘’Afonso’’, time()+60*60*24*30);
setcookie(’’contadorvisitas’’, 1, time()+60*60*24*30);
125. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
125
PHP COOKIES
Para usarmos informações guardadas numa cookie...
Verificamos se elas estão definidas e apanhamo-las:
aPHP
<?php
?>
if (isset($_COOKIE[’’utilizador’’])) {
echo ‘’Bem Vindo ‘’ . $_COOKIE[’’utilizador’’] . ‘’!<br>’’;
} else {
echo ‘’Bem vindo visitante!<br>’’;
}
126. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
126
PHP COOKIES
Para apagarmos uma cookie, definimos uma validade já
expirada (no passado!) bem como os valores do cookie vazio!
aPHP
<?php
?>
setcookie(’’utilizador’’, ‘’ ’’, time()-60*60*24*30);
setcookie(’’contadorvisitas’’, ‘’ ‘’, time()-60*60*24*30);
127. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
127
PHP COOKIES
Vamos ver um pequeno exemplo
Salvem estes código fontes no vosso localhost
Mudando a extensão do ficheiro para .php
http://cesae.afonsogomes.com/exemplo-cookies.txt
http://cesae.afonsogomes.com/exemplo-cookies-apaga.txt
128. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
128
TRABALHAR COM FICHEIROS EM PHP
Uma das funcionalidades do PHP é poder manipular ficheiros.
Como se fossemos nós a mexer nos nossos ficheiros...
E o que podemos fazer?
, , ,
, , ,
No ficheiro:
Nos conteúdos do ficheiro:
Criar novo Abrir Fechar Apagar
Escrever Ler Adicionar coisas Apagar
129. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
129
FICHEIROS EM PHP: eFOPEN FCLOSE
Então ... vamos lá começar a perceber como a coisa funciona:
aPHP
<?php
?>
$filename = ‘’onossoficheiro.txt’’;
$filehandle = fopen($filename, ‘w’)
or die(’’Erro: Impossível abrir!’’);
fclose($filehandle);
Pode ser:
W, R ou A
130. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
130
FICHEIROS EM PHP: FWRITE
Não adianta abrir e fechar se não for para fazer alguma coisa!
aPHP
// Acrescentem isto depois do fopen e antes do fclose
// Salvar... executar no browser... ver como ficou no ficheiro
$escreveisto = ‘’Funciona! Impacábel!’’ . PHP_EOL;
fwrite($filehandle, $escreveisto);
$eisto = ‘’Altamente!’’;
fwrite($filehandle, $eisto);
131. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
131
FICHEIROS EM PHP: FWRITE
E mais um pouco do FWRITE!
aPHP
// Agora troquem as linhas do slide anterior por estas!
// Salvar... executar no browser... ver como ficou no ficheiro
$istotambem = ‘’Isto afinal é fácil!’’ . PHP_EOL;
fwrite($filehandle, $istotambem);
Problemas? :)
132. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
132
FICHEIROS EM PHP: FWRITE
E mais um pouco do FWRITE... com o APPEND
aPHP
$filename = ‘’onossoficheiro.txt’’;
$filehandle = fopen($filename, ‘A’)
or die(’’Erro: Impossível abrir!’’);
$escreveisto = ‘’Funciona! Impacábel!’’ . PHP_EOL;
fwrite($filehandle, $escreveisto);
$istotambem = ‘’Isto afinal é fácil!’’ . PHP_EOL;
fwrite($filehandle, $istotambem);
fclose($filehandle);
133. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
133
FICHEIROS EM PHP: FREAD
Para fazer leitura de conteúdos de um ficheiro...
aPHP
$filename = ‘’onossoficheiro.txt’’;
$filehandle = fopen($filename, ‘r’)
or die(’’Erro: Impossível abrir!’’);
$dados = fread($filehandle, 5);
echo ‘’<b>Os dados do ficheiro: </b>’’ . $dados;
fclose($filehandle);
*
* Os primeiros 5 bytes (1 byte = 1 caracter)
134. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
134
FICHEIROS EM PHP: FREAD
Para fazer leitura de conteúdos de um ficheiro...
aPHP
$filename = ‘’onossoficheiro.txt’’;
$filehandle = fopen($filename, ‘r’)
or die(’’Erro: Impossível abrir!’’);
$dados = fread($filehandle, filesize($filename));
echo ‘’<b>Os dados do ficheiro: </b>’’ . $dados;
fclose($filehandle);
*
* Assim já lê todo o ficheiro!
135. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
135
FICHEIROS EM PHP: UNLINK (Apagar)
A função unlink apaga completamente o ficheiro
aPHP
$filename = ‘’onossoficheiro.txt’’;
unlink($filename);
CUIDADO! Quanto mais poderosa é uma função, maior a
probabilidade de fazer borrada... A função unlink é propícia
a causar acessos de raiva 1 minuto depois de a termos usado!
Testem e depois deixem esta linha comentada nos exemplos.
136. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
136
PROCESSAR FORMULÁRIOS EM PHP
Processar formulários é talvez a função 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 (inserções na BD, envio de emails, etc).
- Todo o cuidado é pouco ao nível da segurança quando
lidamos com inputs submetidos pelos utilizadores
137. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
137
PROCESSAR FORMULÁRIOS EM PHP
Vamos estudar o caso de um formulário submetido no nosso site
que fará com que seja enviado um email para a nossa conta de
email de uso diário.
A função que trata disto em PHP é a mail()
.
Mas antes de deixarmos os dados entrar nessa função, temos de
fazer algumas verificações e introduzir algumas seguranças.
138. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
138
Um dos lemas essenciais na segurança de um site é:
Nunca confiar em nada que um utilizador submete.
PROCESSAR FORMULÁRIOS EM PHP
aPHP
if(!function_exists("seguranca_dados")){
function seguranca_dados($dados){
$dados = trim($dados);
$dados = stripslashes($dados);
$dados = htmlspecialchars($dados);
return $dados;
}
}
139. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
Vamos analisar um exemplo prático e útil...
Salvem estes códigos mudando a extensão do ficheiro para .php
(O envio de email só funciona no servidor e não no localhost)
http://cesae.afonsogomes.com/form.txt
http://cesae.afonsogomes.com/functions.txt
http://cesae.afonsogomes.com/processa-form.txt
PROCESSAR FORMULÁRIOS EM PHP
139
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
140. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
140
BASES DE DADOS: O que são
Uma vez que o constituinte central de qualquer sistema de informação
é a sua memória (conjunto armazenado de dados), a “solução
informática”, para qualquer organização, deve assentar num
depósito integrado de dados – a base de dados.
Uma base de dados é, por definição, um conjunto organizado de dados,
disponível a todos os utilizadores ou processamentos da organização
que deles tenham necessidade
141. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
142
BASES DE DADOS: Informação É poder!
Dados são apenas elementos ou valores discretos que, isoladamente,
não têm qualquer valor, só se transformam em informação quando
relacionados ou interpretados de alguma forma.
·Para que possa ser utilizada como apoio eficaz à tomada de decisão
nas organizações, a informação só tem valor se se verificarem,
simultaneamente, algumas condições:
.
actualidade, correcção,
relevância, disponibilidade e legibilidade
142. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
143
Antes: Sistemas de Gestão de Ficheiros
Os antecessores, em termos de evolução tecnológica, dos modernos
sistemas de BDs foram os sistemas de gestão de ficheiros. Utilizando
sistemas de gestão de ficheiros, as organizações começaram por
automatizar algumas das tarefas até aí realizadas manualmente.
Basta que ocorra uma alteração na estrutura dum ficheiro
para que essa alteração se propague, necessariamente, para todas as
aplicações que o utilizam – a partilha de dados apresenta problemas
ao nível da manutenção dos próprios sistemas.
PROBLEMA1:
143. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
143
Antes: Sistemas de Gestão de Ficheiros
PROBLEMA2: O acesso concorrente aos dados partilhados tem de ser
feito ao nível das próprias aplicações, utilizando funções de baixo-nível.
Isto gera uma imensa confusão quando várias 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 característica fundamental:
os dados são organizados num único conjunto.
144. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
144
AGORA: Sistemas de Gestão de Ficheiros
Todos os acessos aos dados passam sempre por uma entidade
designada Sistema de Gestão de Bases de Dados (SGBD), que centraliza
em si o acesso físico à Base de Dados.
SGBD
BD
Aplicação
1
Aplicação
2
Aplicação
3
145. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
145
Sistemas de Gestão de Ficheiros
Por definição, o Sistema de Gestão de Bases de Dados (SGBD) é um
conjunto de software, destinado a gerir todo o armazenamento e
manipulação dos dados do sistema, fazendo a interface entre o
nível aplicacional e a base de dados propriamente dita.
O SGBD “esconde” os detalhes de armazenamento físico dos dados e
proporciona, ao nível aplicacional,
um grau de abstracção elevado.
.
SGBD
BD
Aplicação
1
Aplicação
2
Aplicação
3
146. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
146
Conceito de transação
É um dos conceitos mais importantes num sistema BDs. Praticamente
todas as tarefas de gestão de base de dados vivem à custa deste conceito.
transferência de valores entre duas contas bancárias.
Debitar de A e creditar em B Só a sua execução conjunta produz
um resultado válido.
Por definição, uma transacção é um conjunto de operações sobre
a base de dados, perfeitamente delimitado, que exibe algumas
características importantes, conhecidas por
.
.
.
Exemplo típico:
ACID (Atomicity, Consistency,
Isolation and Durability)
147. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
147
Atomicidade:
Consistência:
o conjunto de operações que constituem uma transacção
formam um grupo indivisível (atómico), no sentido em que ou todas elas
são executadas com sucesso ou nenhuma é executada.
uma transacção, se envolver actualização de dados, deve
transportar a base de dados de um estado de integridade para outro
estado também de integridade.
Conceito de transação
148. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
148
Conceito de transação
Isolamento:
Durabilidade:
apesar de as transacções executarem concorrentemente,
o sistema deve dar a cada transacção a ilusão de que é a única a
executar no sistema – executa isoladamente das outras
o sistema deve assegurar que todos os efeitos provocados
por uma transacção bem sucedida se tornam persistentes na base de
dados e visíveis para as outras transacções
149. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
149
Requisitos fundamentais de um SGBD
Segurança:
Integridade:
O objectivo das medidas de segurança dos SGBDs é
proteger os dados armazenados de acessos não autorizados,
garantindo que apenas os utilizadores autorizados acedem ao sistema,
de acordo com os seus privilégios – através de perfis ou contas.
Por definição, uma base de dados está num estado de
integridade se contém apenas dados válidos, isto é, que não
contradizem a realidade que estão a representar, antes a reflectem
correctamente.
150. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
150
Requisitos fundamentais de um SGBD
Controlo da concorrência:
Recuperação/tolerância a falhas:
Um dos pressupostos fundamentais dos
SGBDs é a partilha dos dados armazenados pelo nível aplicacional.
O controlo da concorrência relaciona-se com a coordenação dessa
partilha por várias aplicações e/ou utilizadores. A unidade base do
controlo da concorrência é a .
É a actividade que tem por objectivo o
restaurar da base de dados, após a ocorrência de uma qualquer falha,
para um estado de integridade garantido.
Mecanismos de recuperação: e .
transacção
backups transaction logs
151. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
151
BASES DE DADOS: Como chegar a um boa BD
Modelo Conceptual
de Dados
Modelo de
Base de Dados
Modelo Físico de
Base de Dados
Base de Dados
Problema
Real
EX: Oracle,
mySQL, MSSQL
EX: hierárquico
rede, relacional
EX: Diagrama E-R
152. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
152
BASES DE DADOS: Software muito útil
brModelo:
MySQL Workbench:
MySQL:
Pequeno executável de 500KB para desenhar Diagramas E-R
‘’A’’ ferramenta para Bases de Dados. Faz tudo!
Diagramas, Modelos Relacionais, gera códigos para criar a BD, etc...
O servidor de Base de Dados. Está incluído no vosso XAMPP
(localhost) e nas contas de alojamento caso tenham comprado domínios.
http://cesae.afonsogomes.com/brModelo.exe
http://cesae.afonsogomes.com/mysql-workbench.msi (WIN)
http://cesae.afonsogomes.com/mysql-workbench.dmg (MAC)
153. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
153
Modelo Conceptual de dados
Diagrama E-R (Entidade-Relacionamento)
- Proposto por Peter Chen em 1976
- Devido à sua notação simples e poderosa, depressa se tornou numa
abordagem quase universal para a modelação de dados. Curiosamente,
ainda hoje não existe uma notação E-R normalizada.
- Como proposto originalmente, os elementos básicos de um diagrama
E-R são as , os e os .entidades relacionamentos atributos
154. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
154
Diagrama E-R: Entidades
Uma representa um conjunto de objectos (concreto ou
abstrato) do mundo real que possuem características comuns.
As representam uma classe de objectos do mundo real
Os objectos em si são as instâncias (ocorrências)
entidade
entidades
.
Pessoa
Ana Luísa
Isabel
Cristiana
Cidade
Penafiel
Porto
Gaia
155. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
155
Diagrama E-R: Relacionamentos
Um relacionamento representa uma associação entre entidades.
Pessoa
Ana Luísa
Isabel
Cristiana
Cidade
Penafiel
Porto
Gaia
Residência
156. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
156
Diagrama E-R: Cardinalidade de um Relacionamento
Cardinalidade máxima (1 ou N) representa a quantidade máxima
de ocorrências de uma entidade que pode estar associada a uma
mesma ocorrência de outra entidade.
Equipa JogadorTem
1 equipa tem N jogadores
Cada jogador pode estar em apenas uma equipa
1 N
157. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
157
Diagrama E-R: Cardinalidade de um Relacionamento
Quanto à , os relacionamentos podem ser do tipo:
1:1 (Um para um) 1:N (Um para muitos) N:N (Muitos para Muitos)
Cardinalidade máxima
Equipa JogadorTem
1 equipa tem N jogadores
Cada jogador pode estar em apenas uma equipa
1 N
158. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
158
Diagrama E-R: Cardinalidade de um Relacionamento
Livro PessoaAutoria
1 livro obrigatoriamente tem pelo menos 1 autor
1 pessoa pode não ser autor de 1 livro
0 1
Cardinalidade Mínima (0 ou 1) indica se a participação de todas as
ocorrências de uma entidade num determinado relacionamento é
obrigatória ou opcional.
159. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
159
Diagrama E-R: Atributos
Piloto Corrida
A cada entidade (ou relacionamento) podem estar associados um
ou mais atributos que representam as suas propriedades elementares.
Nome Idade
Classificação
KmsNome
Circuito
Num
160. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
160
Diagrama E-R: Atributos identificadores
Corrida
Um identificador é um atributo que determina inequivocamente
uma entidade. Toda a entidade deve possuir um e apenas um
identificador.
Nome
Classificação
Cidadão
NumBI
Ano
161. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
161
Diagrama E-R: Tipos de Atributos
Atributo Identificador
Já vimos o que faz!
Num Idade
Atributo Derivado
Pode ser obtido de outro atributo
Atributo Composto Porta
Rua
Cidade
Cod Postal
Morada
162. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
162
Modelo Conceptual (Diagrama E-R): EXERCÍCIO
Considere que se pretende criar uma BD para gerir casos de investigação
policial. Numa investigação policial existe um crime, caracterizado por
um identificador único, a data e local da ocorrência e uma pequena
descrição do sucedido. Um crime é supostamente cometido por um ou
mais suspeitos, caracterizados por um identificador, um nome,
uma morada completa, um contacto e um número de um documento de
identificação. Um crime está também associado a um conjunto de provas,
que são recolhidas por um investigador criminal numa determinada data
e local. Cada prova é caracterizada por um identificador, um nome e uma
pequena descrição. Por seu lado, o investigador criminal é identificado
por um número de identificação, o seu nome e o respectivo contacto.
163. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
163
Modelo Conceptual (Diagrama E-R): EXERCÍCIO
Considere que se pretende criar uma BD para gerir casos de investigação
policial. Numa investigação policial existe um , caracterizado por
um , a e e uma
do sucedido. Um crime é supostamente um ou
mais s, caracterizados por um , um ,
uma , um e um
. Um crime está também um conjunto de s,
que são um investigador criminal numa determinada
e . Cada prova é caracterizada por um , um e uma
pequena . Por seu lado, o é identificado
por um , o seu e o .
crime
suspeito
prova
investigador criminal
identificador único data local da ocorrência pequena
descrição
identificador nome
morada completa contacto número de um documento de
identificação
data
local identificador nome
descrição
número de identificação nome respectivo contacto
cometido por
recolhidas por
associado a
165. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
165
Modelo Conceptual (Diagrama E-R): EXERCÍCIO 2
O exercício 2 tem muito texto e não cabe neste slide:
http://cesae.afonsogomes.com/bdconceptual-ex2.txt
Desenhe o diagrama conceptual para a base de dados do sistema
de gestão de reparações em estações de extracção de petróleo.
Abram este ficheiro:
A pergunta:
167. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
167
Modelo de Base de Dados: Modelo Relacional
O Modelo Relacional tem a sua base num ramo da matemática que é,
simultaneamente, simples e poderosa – a .
Artigo com os fundamentos teóricos do Modelo Relacional publicado
a 1970 por Edgar Cordd da IBM.
Alguns dos SGDB relacionais mais representativos são a ,
e (ambos da Microsoft), e (da IBM)
e o (código livre! Mas agora detida pela Oracle depois desta
ter comprado a SUN MicroSystems.
teoria dos conjuntos
Oracle
MSSQL DB2 InformixMS Access
mySQL
168. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
168
Modelo Relacional: Tabelas
A é a estrutura fundamental do modelo relacional.
Uma relação é uma estrutura com um determinado esquema e zero
ou mais instâncias.
O esquema de uma relação é constituído por um ou mais
(também designados por ). Cada atributo terá associado um
tipo de dados de acordo com a informação que irá armazenar.
A cada instância do esquema de uma relação designa-se por .
tabela
colunas
linha
atributos
169. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
169
Modelo Relacional: Tabelas
Atributos (ou Colunas)
Cod_formando Nome Sexo
1001 Francisco Telles M
1002 Felismino Felizardo M
1003 Ana Magalhães F
Linhas
TABELA FORMANDO
Formando(Cod_formando, Nome, Sexo)
170. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
170
Modelo Relacional: Tipos de Chaves
Superchave:
Chave Candidata:
Chave Primária:
Chave Estrangeira:
associação de um ou mais atributos que, em conjunto,
identificam univocamente cada uma das linhas. Nota: no limite, a
associação de todos os atributos de uma relação forma uma superchave.
subconjunto dos atributos de uma superchave que,
sendo ainda superchave, não pode ser reduzido sem perder esse estatuto
chave seleccionada entre as várias chaves candidatas
para, efectivamente, identificar cada linha.
atributo ou conjunto de atributos de uma relação,
que é chave primária noutra relação
171. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
171
Modelo Relacional: Tipos de Chaves
Cod_formando Nome Sexo Cod_curso
1001 Felizardo Felicidade M 15
1002 Felismino Felizardo M 16
1003 Felisberto Felismino F 15
Formando
A existência de uma chave estrangeira numa tabela prende-se com a
necessidade de manter a interligação entre essa tabela e a tabela onde
esse conjunto de atributos é chave primária.
Cod_curso Nome
15 Web Design
16 Multimedia
Curso
172. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
172
Modelo Relacional: Restrições de Integridade Implícitas
Integridade de Domínio:
Integridade da Entidade:
Integridade Referencial:
O valor de um atributo deve obedecer ao tipo
de dados e às restrições de valores que lhe estão admitidos.
Cada linha de uma tabela deve poder ser
identificada inequivocamente. Isto quer dizer que cada tabela deverá
possuir na sua definição uma chave primária. A existência de uma chave
primária garante que o atributo ou os atributos que a constituem não
podem ser nulos, nem podem ser repetidos.
O valor dos atributos que constituem a chave
estrangeira de uma tabela deve estar também presente na chave
primária da tabela referenciada.
173. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
173
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
1
N
Ensina
Nome
Ndoc
Tel
Docente
Disciplina
PreReq
Disc
174. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
174
Relacionamento 1:1
CASO 1: Participação obrigatória das duas entidades.
Todos os docentes têm de leccionar um só disciplina.
Cada disciplina tem de ser assegurada por um docente
Docente
1
Ndoc Nome Tel Disc Prereq
101 Afonso 12345 Amat2 Amat1
125 Felismino 54321 Inf1 Nenhum
É apenas necessária 1 entidade.
A chave primária pode ser a chave primária de qualquer entidade
Disciplina
1
Ensina
Docente (Ndoc, Nome, Tel, Disc, Prereq)
P1
P2
P3 D3
D1
D2
175. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
175
Relacionamento 1:1
CASO 2: Participação obrigatória de apenas uma entidade.
Todos os docentes têm de leccionar uma só disciplina.
Docente
1
Ndoc Nome Tel Disc Prereq
101 Afonso 12345 Amat2 Amat1
? ? ? Inf1 Nenhum
Necessária 2 tabelas. Cada com a sua chave primária.
Chave primária Disc é chave estrangeira na tabela Docente
Disciplina
1
Ensina
Docente (Ndoc, Nome, Tel, Disc)
Ndoc Nome Tel Disc
101 Afonso 12345 Amat2
Disc Prereq
Amat2 Amat1
Inf1 Nenhum
Disciplina (Disc, Prereq)
P1
P2
P3
D3
D1
D2
D4
176. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
176
Relacionamento 1:N
CASO 3
Necessária 2 tabelas.
Cada com a sua chave primária.
Chave primária do lado 1 (Ndoc) tem de ser usada como atributo
na entidade do lado N
Docente (Ndoc, Nome, Tel)
Ndoc Nome Tel
101 Afonso 12345
125 Felismino 54321
Disc Prereq Ndoc
Amat2 Amat1 101
PHP Av PHP 101
Disciplina (Disc, Prereq, Ndoc)
177. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
177
Relacionamento 1:N
CASO 3: Participação obrigatória do lado N
Os docentes podem leccionar várias disciplinas
Cada disciplina tem de ser assegurada por um só docente
Docente
1
Disciplina
N
Ensina
Ndoc Nome Tel Disc Prereq
101 Afonso 12345 Amat2 Amat1
101 Afonso 12345 PHP Av. PHP
125 Felismino 54321 ? ?
P1
P2
P3
D3
D1
D2
D4
178. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
178
Relacionamento 1:N
CASO 4: Participação não obrigatória nem do lado 1
nem do lado N. Um docente pode estar dispensado
do serviço. Uma disciplina pode não ter inscritos
suficientes para ser leccionada nesse ano.
Docente
1
Disciplina
N
Ensina
Ndoc Nome Tel Disc Prereq
101 Afonso 12345 Amat2 Amat1
101 Afonso 12345 PHP Av. PHP
125 Felismino 54321 ? ?
? ? ? CSS HTML
P1
P2
P3
D3
D1
D2
D4
179. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
179
Relacionamento 1:N
CASO 4
Necessárias 3 tabelas.
As tabelas principais, cada com a sua chave primária.
A tabela do relacionamento tem como atributos as chaves primárias
de cada uma das outras tabelas.
Docente (Ndoc, Nome, Tel)
Ndoc Nome Tel
101 Afonso 12345
125 Felismino 54321
Disc Prereq
Amat2 Amat1
PHP Av PHP
CSS HTML
Disciplina (Disc, Prereq)
Disc Ndoc
Amat2 101
PHP Av 101
Ensina (Disc, Ndoc)
180. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
180
Relacionamento N:N
CASO 5: Participação não obrigatória nem do lado 1
nem do lado N. Um docente pode ensinar várias
disciplinas. Uma disciplina pode ser ensinada por
vários docentes
Docente
1
Disciplina
N
Ensina
Ndoc Nome Tel Disc Prereq
101 Afonso 12345 Amat2 Amat1
101 Afonso 12345 PHP Av. PHP
125 Felismino 54321 ? ?
? ? ? CSS HTML
P1
P2
P3
D3
D1
D2
D4
D5
P4
A solução é igual ao CASO 4
181. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
181
Relacionamento TERNÁRIO N:N:N
CASO 6: Nem tudo são sempre relações binárias!
N
Aluno OrientadorInscrito
Seminário
N
N
Necessárias 4 tabelas.
As tabelas principais, cada com a sua chave primária.
A tabela do relacionamento tem como atributos as chaves primárias
de cada uma das outras tabelas.
O modelo final seria:
Aluno (Id_aluno, ...)
Orientador (Id_orient, ...)
Seminario (Id_sem, ...)
Inscrição (Id_aluno,Id_orient,Id_sem)
182. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
A normalização é o processo sistemático de remover dados redundantes
de tabelas, como vista a melhorar armazenamento, eficiência,
integridade de dados, e escalabilidade.
No modelo relacional, existem métodos para quantificar o quão
eficiente é uma BD. Estes estados são chamados Forma Normais (FN)
Este processo de normalização pelas várias fases FN normalmente
envolve dividir uma tabela em múltiplas tabelas
182
183. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
Edgar Codd, inicialmente definiu as 3 primeiras FNs
Agora há também a 4FN e a 5FN que são ainda mais trabalhadas mas
a 3FN é considerada suficiene para a maioria das aplicações.
Quando uma BD atinge a 3FN também estão na FN Boyce-Codd (BCFN)
183
mais Redundância
menos Relações
menos Redundância
mais Relações
Ponto
de
Equilibrio
1FN 2FN 3FN
BoyceCodd
FN 5FN 6FN
184. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
Uma relação diz-se na quando:
- Não contém atributos multivalor e não contém grupos repetitivos
Uma relação diz-se na quando:
- Está na Primeira Forma Normal (1FN);
- Todos os atributos não chave dependem funcionalmente da
totalidade da chave.
Uma relação diz-se na quando:
- Está na Segunda Forma Normal (2FN);
- Todos os atributos não chave não dependem funcionalmente
uns dos outros.
Primeira Forma Normal (1FN)
Segunda Forma Normal (2FN)
Terceira Forma Normal (3FN)
184
1FN 2FN 3FN BC-FN 5FN 6FN
185. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
O que são dependências funcionais?
Existe uma dependência funcional
X -> Y entre dois conjuntos de atributos X e Y, se uma
instância de valores de X determina ou identifica univocamente
uma instância de valores dos atributos de Y
Dependência Funcional:
185
1FN 2FN 3FN BC-FN 5FN 6FN
186. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
Consideremos esta tabela:
186
1FN 2FN 3FN BC-FN 5FN 6FN
Esta tabela não é muito eficiente com o armazenamento, o design dela
não protege a integridade de dados e não tem uma boa escalabilidade.
Temos dois campos de autor. E o campo de Assunto
contém mais de um dado. Com mais de um dado num campo seria
muito difícil pesquisar todos os livros de um determinado assunto.
2 violações da 1FN!!
Título Autor1 Autor2 ISBN Assunto Pgs Editor
DB System
Concepts
Abraham
Silberschatz
Henry F.
Korth
0072958863 MySQL, PCs 1168 McGraw-Hill
OS System
concepts
Abraham
Silberschatz
Henry F.
Korth
0471694665 Pcs 944 McGraw-Hill
187. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
A mesma tabela mas ... na !PRIMEIRA FORMA NORMAL
187
Temos agora 2 linhas para cada livro (para além de)
Uma solução para o 1º problema é separar as tabelas...
estarmos a
violar a 2FN.
Título Autor ISBN Assunto Pgs Editor
DB System
Concepts
Abraham
Silberschatz
0072958863 MySQL 1168 McGraw-Hill
DB System
Concepts
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
188. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO As nossas tabelas separadas...
188
Cada tabela tem uma Primary Key, usadas para juntar tabelas quando
pedirmos os dados. Uma Primary Key é também um index o que ajuda
a acelerar este processo. Agora temos de definir tabelas de relação!
Título ISBN Pgs Editor
DB System
Concepts
0072958863 1168 McGraw-Hill
OS System
concepts
0471694665 944 McGraw-Hill
ID_autor Pnome Unome
1 Abraham Silberschatz
2 Henry F. Korth
ID_assunto Assunto
1 MySQL
2 Pcs
189. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO Tabelas de relações... nada mais simples
189
Enquanto a 1FN lida com redundância de dados em filas a 2FN lida
com redundância de dados em colunas. Como vimos antes, as FN são
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
ISBN Id_assunto
0072958863 1
0072958863 2
0471694665 2
LivroAssunto
ISBN Id_autor
0072958863 1
0072958863 2
0471694665 1
0471694665 2
LivroAutor
190. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO Passagem para a 2FN
190
E pronto ... já está na 2FN
Aqui temos uma relação 1:N entre tabelas Livro e Editor. Quando temos
relação 1:N, pomos a chave estrangeira na tabela Livro a apontar para
a chave primária da tabela Editor.
E para a 3FN? Todos os atributos não chave dependem funcionalmente
ou não uns dos outros?
ID_editor Editor
1 McGraw-Hill
Editor
Título ISBN Pgs Editor
DB System
Concepts
0072958863 1168 1
OS System
concepts
0471694665 944 1
Livro
191. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
NORMALIZAÇÃO
191
E pronto ... já está na 3FN
Isto porque já estava na 2FN e todos os atributos não-chace da tabela
Livro não dependem funcionalmente uns dos outros.
(ISBN, Título, Pgs) (Id_editor, Editor)
(Id_autor, Pnome, Unome) (Id_assunto, Assunto)
(ISBN, Id_editor) (ISBN, Id_assunto)
(ISBN, Id_autor)
O modelo final:
Livro Editor
Autor Assunto
LivroEditor LivroAssunto
LivroAutor
Id_editor Editor
1 McGraw-Hill
Editor
Título ISBN Pgs
DB System
Concepts
0072958863 1168
OS System
concepts
0471694665 944
Livro
ISBN Id_editor
0072958863 1
0471694665 1
LivroEditor
Passagem para a 3FN
192. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
SQL: Como linguagem de definição de Dados
A SQL, enquanto Linguagem de Definição de Dados, disponibiliza
um conjunto de comandos para a criação (CREATE), alteração
(ALTER) e remoção (DROP) de tabelas e outras estruturas.
CREATE DATABASE nome_da_base_de_dados
Comando CREATE DATABASE permite criar uma BD.
Comando DROP DATABASE permite remover uma determinada BD,
apagando todas as tabelas e, consequentemente, todos os dados
aSQL
DROP DATABASE nome_da_base_de_dados
192
aSQL
193. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
SQL: Comando CREATE TABLE
O comando CREATE TABLE permite criar uma tabela.
aSQL
CREATE TABLE nome_tabela(
coluna1 tipo,
coluna2 tipo,
... ...,
colunan tipo,
Sintaxe Básica
193
aSQL
CREATE TABLE Professor(
id_prof INT
nome VARCHAR(50),
data_nasc DATETIME,
salario FLOAT)
,PRIMARY KEY
Exemplo
194. Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
SQL: Colunas - Valores por defeito
194
Na criação de uma tabela por defeito as colunas podem assumir valores
nulos. É possível especificar se admite ou não através da cláusula
NULL ou NOT NULL
É também possível associar um outro valor por defeito através da
cláusula DEFAULT
aSQL
CREATE TABLE Professor(
id_prof INT NOT NULL,
nome VARCHAR(50),
data_nasc DATETIME NULL,
salario FLOAT )DEFAULT 1000