SlideShare a Scribd company logo
1 of 238
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
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
2
0155 - Bases de dados para Internet
(server-side)
Que raio de nome!
?
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
3
0155 - PHP e mySQL
Assim está melhor!
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
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
5
QUE SITE USAR PARA INFORMAÇÃO
www.php.net
Unanimemente, a melhor fonte de informação.z
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
6
FAZER DO NOSSO PC UM SERVIDOR HTTP
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
7
FAZER DO NOSSO PC UM SERVIDOR HTTP
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
8
FAZER DO NOSSO PC UM SERVIDOR HTTP
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!
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
10
PHP: Fundamentais
Todos os nossos documentos terão de estar dentro da pasta:
O endereço no nosso browser:
C:xampphtdocs
Título da página
localhost/
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
11
Sem mais demoras... OLÁ MUNDO!
aPHP
index.php
<html>
<head>
<title>Olá Mundo</title>
</head>
<body>
‘’<p>Olá Mundo</p>‘’;
</body>
</html>
<?php ?>echo
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
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
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
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()
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
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...
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:
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
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!
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
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!
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...
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
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
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 =>
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
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;
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
// !
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];
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
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];
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
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!
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);
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);
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>’’;
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:
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
39
OBJECTOS
É outro tipo de dados em PHP
aPHP
<?php
?>
class teste{
function testar() {
echo "Em teste.";
}
}
$x = new teste;
$x->testar();
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);
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;
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
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
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
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!
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!
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;
?>
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...
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
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
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
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.
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
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
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
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!
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
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
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
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
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
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.
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
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 !
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
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);
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
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);
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!
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:
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’’;
}
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.
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
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
.
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();
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? &
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? &
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!
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!
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
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
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...
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;
}
[...]
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;
}
[...]
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...
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
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
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)
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
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.
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
.
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
.
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++;
}
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
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!
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
96
aPHP
$i = 1;
while($i <= 10){
if($i < 3 || $i > 7 && $i < 10) {
echo $i . ‘’<br>’’;
}elseif($i > 3 && $i < 7){
echo ‘’...<br>’’;
}else
echo ‘’Olá Mundo!’’;
}
}
CICLOS: Exercício 1 Resolução (Floreada!)
1
2
...
...
...
...
...
8
9
Olá Mundo!
} Podia ter
ficado melhor!
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
97
aPHP
$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;
}
}elseif($i == 10){
echo "Olá Mundo!";
}
$i++;
}
CICLOS: Exercício 1
Resolução (Floreada!)
1
2
...
8
9
Olá Mundo!
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á!
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
99
aPHP
$i = 20;
while($i >= 0){
if($i != 0){
echo "Falta $i ...";
}else{
echo "Já está!";
}
echo "<br>";
$i--;
}
CICLOS: Exercício 2 Resolução
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
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
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>’’;
}
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>’’;
}
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
?
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
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
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
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!)
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>";
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>’’;
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
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);
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);
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:
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!’’;
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
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
?>
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’’);
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
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
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.
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
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:
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);
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>’’;
}
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);
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
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
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
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);
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? :)
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);
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)
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!
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.
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
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.
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;
}
}
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
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
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
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:
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.
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
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
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)
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
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
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.
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
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
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)
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
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
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
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
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
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.
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
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
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
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.
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
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
164
Modelo Conceptual (Diagrama E-R): EXERCÍCIO
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:
Qualquer coisa:
eu@afonsogomes.com
Dúvidas?
Pergunte. Agora!
PROFISSIONAL EM WEBDESIGN
b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS
166
Modelo Conceptual (Diagrama E-R): EXERCÍCIO 2
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
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
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)
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
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
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.
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
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
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
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)
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
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
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)
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP
Webdesign e PHP

More Related Content

What's hot

Dicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPDicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPAlmir Neto
 
Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Rafael Dohms
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Rafael Dohms
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasCJR, UnB
 
Minicurso VII Secomp e 3º Seel - Jataí - GO
Minicurso VII Secomp e 3º Seel - Jataí - GOMinicurso VII Secomp e 3º Seel - Jataí - GO
Minicurso VII Secomp e 3º Seel - Jataí - GOFernando Soares
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanosCaike Souza
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPJonata Weber
 
Minicurso de PHP para iniciantes - Mario Araujo Xavier
Minicurso de PHP para iniciantes - Mario Araujo XavierMinicurso de PHP para iniciantes - Mario Araujo Xavier
Minicurso de PHP para iniciantes - Mario Araujo XavierPotiLivre Sobrenome
 
Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDDLeonn Leite
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Introdução ao Smarty
Introdução ao SmartyIntrodução ao Smarty
Introdução ao SmartyNelson Gomes
 

What's hot (14)

Ruby learning
Ruby learningRuby learning
Ruby learning
 
Dicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPDicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHP
 
Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
Minicurso VII Secomp e 3º Seel - Jataí - GO
Minicurso VII Secomp e 3º Seel - Jataí - GOMinicurso VII Secomp e 3º Seel - Jataí - GO
Minicurso VII Secomp e 3º Seel - Jataí - GO
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Minicurso de PHP para iniciantes - Mario Araujo Xavier
Minicurso de PHP para iniciantes - Mario Araujo XavierMinicurso de PHP para iniciantes - Mario Araujo Xavier
Minicurso de PHP para iniciantes - Mario Araujo Xavier
 
Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDD
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Introdução ao Smarty
Introdução ao SmartyIntrodução ao Smarty
Introdução ao Smarty
 

Viewers also liked

Processamento Assíncrono com PHP
Processamento Assíncrono com PHPProcessamento Assíncrono com PHP
Processamento Assíncrono com PHPFernando Fabricio
 
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser HackeadaHACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser HackeadaDouglas A. Gomes da Silva
 
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...FecomercioSP
 
HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)Gustavo Zimmermann
 
HTML5 Básico: Multimídia 1 (aula 3)
HTML5 Básico: Multimídia 1 (aula 3)HTML5 Básico: Multimídia 1 (aula 3)
HTML5 Básico: Multimídia 1 (aula 3)Gustavo Zimmermann
 
JavaScript: Estruturas (aula 2)
JavaScript: Estruturas (aula 2)JavaScript: Estruturas (aula 2)
JavaScript: Estruturas (aula 2)Gustavo Zimmermann
 
JavaScript: Introdução e Operadores (aula 1)
JavaScript: Introdução e Operadores (aula 1)JavaScript: Introdução e Operadores (aula 1)
JavaScript: Introdução e Operadores (aula 1)Gustavo Zimmermann
 
Web Development with HTML5, CSS3 & JavaScript
Web Development with HTML5, CSS3 & JavaScriptWeb Development with HTML5, CSS3 & JavaScript
Web Development with HTML5, CSS3 & JavaScriptEdureka!
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de SitesCaelum
 

Viewers also liked (20)

Unid i b-apostila
Unid i b-apostilaUnid i b-apostila
Unid i b-apostila
 
Php Para Iniciantes
Php Para IniciantesPhp Para Iniciantes
Php Para Iniciantes
 
Precisa testar? - Parte 1
Precisa testar? - Parte 1Precisa testar? - Parte 1
Precisa testar? - Parte 1
 
Processamento Assíncrono com PHP
Processamento Assíncrono com PHPProcessamento Assíncrono com PHP
Processamento Assíncrono com PHP
 
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser HackeadaHACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
 
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...
 
HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)HTML5 Básico: Formulários (aula 2)
HTML5 Básico: Formulários (aula 2)
 
HTML5 Básico: Multimídia 1 (aula 3)
HTML5 Básico: Multimídia 1 (aula 3)HTML5 Básico: Multimídia 1 (aula 3)
HTML5 Básico: Multimídia 1 (aula 3)
 
CSS3: CSS3 (aula 2)
CSS3: CSS3 (aula 2)CSS3: CSS3 (aula 2)
CSS3: CSS3 (aula 2)
 
JavaScript: Estruturas (aula 2)
JavaScript: Estruturas (aula 2)JavaScript: Estruturas (aula 2)
JavaScript: Estruturas (aula 2)
 
JavaScript: Introdução e Operadores (aula 1)
JavaScript: Introdução e Operadores (aula 1)JavaScript: Introdução e Operadores (aula 1)
JavaScript: Introdução e Operadores (aula 1)
 
Javascript, HTML5 e CSS3
Javascript, HTML5 e CSS3Javascript, HTML5 e CSS3
Javascript, HTML5 e CSS3
 
CSS3: Start (aula 1)
CSS3: Start (aula 1)CSS3: Start (aula 1)
CSS3: Start (aula 1)
 
Web Development with HTML5, CSS3 & JavaScript
Web Development with HTML5, CSS3 & JavaScriptWeb Development with HTML5, CSS3 & JavaScript
Web Development with HTML5, CSS3 & JavaScript
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
Curso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSSCurso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSS
 
Curso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTMLCurso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTML
 
Programação Web com HTML e CSS
Programação Web com HTML e CSSProgramação Web com HTML e CSS
Programação Web com HTML e CSS
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
 

Similar to Webdesign e PHP

M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7Silvano Oliveira
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaJonata Weber
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Er Galvão Abbott
 
Muito prazer, eu sou PHP
Muito prazer, eu sou PHPMuito prazer, eu sou PHP
Muito prazer, eu sou PHPLuís Cobucci
 
Apresentação formação web - up marketing digital - módulo ii
Apresentação   formação web - up marketing digital - módulo iiApresentação   formação web - up marketing digital - módulo ii
Apresentação formação web - up marketing digital - módulo iiRangel Javier
 
Introdução ao PHP - Workshop CinLug
Introdução ao PHP - Workshop CinLugIntrodução ao PHP - Workshop CinLug
Introdução ao PHP - Workshop CinLugLuciana Nunes
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
LabMM4 (T12 - 12/13) - Estruturas de controlo
LabMM4 (T12 - 12/13) - Estruturas de controloLabMM4 (T12 - 12/13) - Estruturas de controlo
LabMM4 (T12 - 12/13) - Estruturas de controloCarlos Santos
 
Vive la révolution PHP!
Vive la révolution PHP!Vive la révolution PHP!
Vive la révolution PHP!Luís Cobucci
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosLucas Vegi
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação WebDalton Martins
 

Similar to Webdesign e PHP (20)

M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7
 
Muito prazer, eu sou PHP
Muito prazer, eu sou PHPMuito prazer, eu sou PHP
Muito prazer, eu sou PHP
 
Muito prazer, eu sou PHP
Muito prazer, eu sou PHPMuito prazer, eu sou PHP
Muito prazer, eu sou PHP
 
Segurança PHP em 2016
Segurança PHP em 2016Segurança PHP em 2016
Segurança PHP em 2016
 
Apresentação formação web - up marketing digital - módulo ii
Apresentação   formação web - up marketing digital - módulo iiApresentação   formação web - up marketing digital - módulo ii
Apresentação formação web - up marketing digital - módulo ii
 
Php
PhpPhp
Php
 
Introdução ao PHP - Workshop CinLug
Introdução ao PHP - Workshop CinLugIntrodução ao PHP - Workshop CinLug
Introdução ao PHP - Workshop CinLug
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
LabMM4 (T12 - 12/13) - Estruturas de controlo
LabMM4 (T12 - 12/13) - Estruturas de controloLabMM4 (T12 - 12/13) - Estruturas de controlo
LabMM4 (T12 - 12/13) - Estruturas de controlo
 
Vive la révolution PHP!
Vive la révolution PHP!Vive la révolution PHP!
Vive la révolution PHP!
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetos
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
 
Php m18
Php m18Php m18
Php m18
 

Webdesign e PHP

  • 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
  • 2. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 2 0155 - Bases de dados para Internet (server-side) Que raio de nome! ?
  • 3. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 3 0155 - PHP e mySQL Assim está melhor!
  • 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
  • 5. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 5 QUE SITE USAR PARA INFORMAÇÃO www.php.net Unanimemente, a melhor fonte de informação.z
  • 6. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 6 FAZER DO NOSSO PC UM SERVIDOR HTTP
  • 7. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 7 FAZER DO NOSSO PC UM SERVIDOR HTTP
  • 8. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 8 FAZER DO NOSSO PC UM SERVIDOR HTTP
  • 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!
  • 10. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 10 PHP: Fundamentais Todos os nossos documentos terão de estar dentro da pasta: O endereço no nosso browser: C:xampphtdocs Título da página localhost/
  • 11. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 11 Sem mais demoras... OLÁ MUNDO! aPHP index.php <html> <head> <title>Olá Mundo</title> </head> <body> ‘’<p>Olá Mundo</p>‘’; </body> </html> <?php ?>echo
  • 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:
  • 39. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 39 OBJECTOS É outro tipo de dados em PHP aPHP <?php ?> class teste{ function testar() { echo "Em teste."; } } $x = new teste; $x->testar();
  • 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!
  • 96. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 96 aPHP $i = 1; while($i <= 10){ if($i < 3 || $i > 7 && $i < 10) { echo $i . ‘’<br>’’; }elseif($i > 3 && $i < 7){ echo ‘’...<br>’’; }else echo ‘’Olá Mundo!’’; } } CICLOS: Exercício 1 Resolução (Floreada!) 1 2 ... ... ... ... ... 8 9 Olá Mundo! } Podia ter ficado melhor!
  • 97. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 97 aPHP $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; } }elseif($i == 10){ echo "Olá Mundo!"; } $i++; } CICLOS: Exercício 1 Resolução (Floreada!) 1 2 ... 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á!
  • 99. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 99 aPHP $i = 20; while($i >= 0){ if($i != 0){ echo "Falta $i ..."; }else{ echo "Já está!"; } echo "<br>"; $i--; } CICLOS: Exercício 2 Resolução
  • 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
  • 164. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 164 Modelo Conceptual (Diagrama E-R): EXERCÍCIO
  • 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:
  • 166. Qualquer coisa: eu@afonsogomes.com Dúvidas? Pergunte. Agora! PROFISSIONAL EM WEBDESIGN b PHP e mySQLCENTRO DE SERVIÇOS EAPOIO ÀS EMPRESAS 166 Modelo Conceptual (Diagrama E-R): EXERCÍCIO 2
  • 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