PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PROFISSIONAL EM WEBDESIGN
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
?
0155 - Bases de dados para Internet
(server-side)
Que raio de nome!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
0155 - PHP e mySQL
Assim est melhor!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
O QUE O PHP
- uma linguagem de programao comummente usada em servidores web
- Quer dizer PHP: HyperText PreProcessor
- Cdigo Aberto
- Cdigo embebido em pginas web
EMAIL
HTML
&
JS
Dvidas?
Pergunte. Agora!
PHP
Qualquer coisa:
[email protected]
SQL
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
QUE SITE USAR PARA INFORMAO
www.php.net
Unanimemente, a melhor fonte de informao.z
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FAZER DO NOSSO PC UM SERVIDOR HTTP
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FAZER DO NOSSO PC UM SERVIDOR HTTP
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FAZER DO NOSSO PC UM SERVIDOR HTTP
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP: Fundamentais
PHP embebido dentro de pginas HTML com as tags:
<?php ... ?>
Ficheiros HTML com cdigo PHP dentro de si, tm de ter a
extenso .php (e no .html). Isto obrigatrio!
As linhas de cdigo em PHP so fechadas com ponto e virgula
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP: Fundamentais
Todos os nossos documentos tero de estar dentro da pasta:
C:\xampp\htdocs
O endereo no nosso browser:
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
Ttulo da pgina
localhost/
10
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
<html>
PHP
Sem mais demoras... OL MUNDO!
index.php
<head>
<title>Ol Mundo</title>
</head>
<body>
<?php echo <p>Ol Mundo</p>; ?>
</body>
</html>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
11
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Informaes do nosso servidor
Podemos tambm ver quais so as definies do servidor
<?php
phpinfo.php
PHP
que estamos a usar, recorrendo funo phpinfo();
phpinfo();
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
12
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Consideraes sobre Literals (os valores de variveis)
- Todas as strings devem ser fechadas dentro de aspas
ou aspas duplas: Ol Mundo ou Ol Mundo
- Nmeros no so fechados dentro de aspas: 1 ou 45 ou 3 4.15
- Booleanos (true/false) podem ser directamente escritos
como true ou false
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
13
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Comentrios em PHP
// Isto um comentrio
# Isto outro comentrio
/* Isto tambm
um comentrio*/
- No usem comentrios dentro de comentrios
- Recomenda-se o uso do // e no o #
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
14
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Mostrar dados
- Existem duas funes disponveis para mostrar dados:
print() e o echo()
- Podem ser usadas com ou sem os parntesis ()
- Os dados gerados pelo PHP passam para o browser como
HTML. Ao fazer Ver fonte s vemos o resultado e no o
cdigo PHP que o gerou.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
15
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
<?php
echoprint.php
PHP
Mostrar dados
echo (Ol Mundo);
echo Ol Mundo;
print (Ol Mundo);
print Ol Mundo;
?>
O resultado sempre o mesmo no ?
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
16
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Escapando Caracteres
- Alguns caracteres so considerados especiais
- Temos de escapar estes caracteres com o smbolo \
(a barra para trs ou backslash)
- Caracteres especiais sero flagueados quando aparecerem,
por exemplo uma aspa simples ou aspas duplas, e se estiver
escapado o PHP processa-os, seno interpreta-os como sendo
parte do cdigo e vai gerar erros...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
17
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Escapando Caracteres
PHP
Um exemplo:
escaping.php
<?php
echo A minha amiga irlandesa;
echo Mary O\Bradley ;
echo disse \Ol Mundo\.;
// A minha amiga irlandesa Mary OBradley disse
Ol Mundo
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
18
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: O que so
Quando trabalhamos com PHP, quase sempre precisamos de
um stio onde guardar um valor (string, numero, booleano, etc)
para que mais tarde possamos usar este valor noutros stios
do nosso programa.
A estes stios onde guardamos valores chamamos VARIVEIS
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
19
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: Vamos chamar-lhes nomes!
- Uma varivel comea sempre com $ e depois o seu nome
- So sensveis a maisculas/minsculas
- $variavel diferente de $Variavel diferente de $VARIAVEL
- Escrever sempre em minsculas para jogar pelo seguro!
- O nome de uma varivel deve comear sempre com uma letra
ou um undescore ( _ ). NUNCA por um nmero.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
20
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
VARIVEIS: Um exemplo
variaveis.php
<?php
$nome = Afonso;
$idade = 31;
echo O . $nome;
echo tem ;
echo $idade;
// Resultado: O Afonso tem 31
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
21
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: Outro exemplo
PHP
preciso um certo cuidado com o que fazemos ...
variaveis.php
<?php
$nome = Afonso;
$idade = 31;
$idade = 22;
echo O . $nome . tem . $idade . anos;
// Resultado: O Afonso tem 22 anos
?>
Neste exemplo vemos tambm concatenao!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
22
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
USO DE OU DE
Uma dvida recorrente o uso de aspa dupla ou aspa simples
- H uma diferena entre strings escritas com ou com
- Numa string com aspas duplas, qualquer varivel
expandida para o seus valor.
- Numa string com aspa simples, no h expanso da
varivel para o seu valor.
Vamos ver um exemplo...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
23
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
USO DE OU DE
aspasteste.php
<?php
$nome = Afonso;
$idade = 31;
echo O $nome tem $idade anos;
// Resultado: O Afonso tem 31 anos
echo O $nome tem $idade anos;
// Resultado: O $nome tem $idade anos
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
24
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: Em profundidade!
Agora que j vimos os conceitos globais de variveis e constantes,
vamos aprofundar um bocadinho mais nos diferentes tipos de
variveis:
O PHP suporta 8 tipo de variveis primitivas
- 4 escalares: boolean , integer, float e string
- 2 compostos: array e object
- 2 especiais: resource e NULL
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
25
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: BOOLEANOS
Exprimem valores lgicos. TRUE (verdadeiro) ou FALSE (falso)
Podem ser escritos em minsculas ou maisculas
PHP
$b1 = true;
$b2 = false;
$b1 = TRUE;
$b2 = FALSE;
PHP
Passar uma varivel a booleano:
$b3 = 5;
$b4 = (bool) $b3;
ORIGINA =>
$b3 = 5;
$b4 = TRUE;
D FALSE quando: - O booleano falso; O inteiro 0 (Zero); O real
0.0 (zero); - Array vazio; o tipo especial NULL; String vazio
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
26
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: INTEIROS
PHP
Um nmero inteiro - integer - um nmero do conjunto de Z
$a = 1234;
// Decimal
$b = -1234;
Negativo
$c = 0x1A;
Hexadecimal
VARIVEIS: REAIS
PHP
Um nmero real - float - um nmero do conjunto de R
$a = 1.234;
// 1,234
Dvidas?
Pergunte. Agora!
$b = 1.2E3;
1200
Qualquer coisa:
[email protected]
$c = 7E-5;
0.000005
27
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: STRINGS
PHP
J vimos anteriormente estas:
$a = Afonso;
// Afonso
$b = Afonso Gomes;
Afonso Gomes
PHP
Assim tambm funciona:
$c = <<<FIM
Exemplo de um texto que se estende por algumas
linhas usando uma sintaxe entre marca.
<div class="umaclasse">Afonso</div>
FIM;
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
28
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS: STRINGS, Acesso a caracteres
PHP
Tambm podemos aceder a caracteres de uma string...
<?php
$d = Afonso!;
echo String Original: . $d;
echo Primeiro Caracter: . $d[0];
// A
echo Ultimo Caracter: . $d[strlen($d)-1]; // !
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
29
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES
Outra maneira de armazenar dados em vectores (Arrays)
Um vector pode ser criado utilizando a funo array() que usa,
como parmetro uma sequncia de pares chave => valor
separados por vrgula.
<?php
PHP
Chave: inteiro/string. Valor: qualquer coisa
$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);
print_r( $e);
echo $e[2];
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
30
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES
No gostou como apareceram as coisas no browser quando
PHP
testou? Experimente mudar para isto:
<?php
$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);
echo <pre>;
print_r( $e);
echo </pre>;
echo O segundo valor do vector : . $e[2];
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
d
31
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES
Reparamos que podemos ver o valor de uma chave do vector...
Mas tambm podemos apagar, acrescentar e at editar chaves .
<?php
PHP
Continuando o nosso cdigo:
$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);
print_r $e;
echo $e[2];
unset( $e[2] ) ;
echo $e[2];
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
32
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
VECTORES
<?php
$e = array(1 => Valor1, 2 => Valor2, 3 => Valor3);
print_r ( $e);
echo $e[2];
unset( $e[2] ) ; // Funo que apaga elemento de um vector
echo $e[3];
$e[4] = Que seca de sesso!;
$e[4] = Est a ser porreiro!;
print_r ( $e);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
33
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES
Tambm podemos criar vectores vazios e depois introduzir-lhe
<?php
PHP
elemento a elemento!
$a = 10;
$b = Afonso;
$e = array();
$e[1] = $a;
$e[2] = $b;
$e[3] = Um teste;
print_r($e) ;
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
34
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES ASSOCIATIVOS
Neste tipo de vectores associamos um valor a uma chave qual
damos um nome. Nos vectores anteriores no davamos nomes
<?php
PHP
s nossas chaves!
$f[clube] = FC Porto;
$f[cidade] = Porto;
$f[pas] = Portugal;
$f[umasocor ] = Azul e Branco;
print_r ( $f);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
35
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES MULTIDIMENSIONAIS
PHP
Nome bonito para ... vectores dentro de vectores
$g = array( 1 => array( clube => FC Porto,
cidade => Porto,
cor => Azul
),
2 => array( clube => Sporting CP,
cidade => Lisboa,
cor => Verde
)
);
print_r ($g);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
36
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES MULTIDIMENSIONAIS
PHP
Como procurar elementos nestes vectores?
<?php
echo <pre>;
print_r( $g ) ;
echo </pre>;
echo $g[1][clube] . <br>;
echo $g[2][cidade] . <br>;
echo $g[1][cor ] . <br>;
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
37
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VECTORES MULTIDIMENSIONAIS (EXERCICIO)
Prepare um vector multidimensional (com um mnimo de 4
elementos no primeiro nvel). Chame-lhe $turma
Em cada elemento vamos guardar, tambm em vector, informaes
sobre pessoas da turma. Nome, Sobrenome, Idade, Funo, etc...
Exemplo:
nome = Afonso
sobrenome = Gomes
idade = 31
funcao = formador
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
38
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OBJECTOS
PHP
outro tipo de dados em PHP
<?php
class teste{
function testar() {
echo "Em teste.";
}
}
$x = new teste;
$x->testar();
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
39
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Recursos
Um recurso uma varivel especial que contem uma referncia
PHP
para um recurso externo. A vai um exemplo:
<?php
$servidor = localhost;
$user = admin;
$password = 12345;
$ligao = mysqli_connect($servidor, $user, $password);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
40
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NULL
O tipo especial NULL representa uma varivel que no tem
valor definido. O termo NULL pode ser escrito em maisculas
PHP
ou minsculas.
<?php
$variavelvazia = NULL;
echo $variavelvazia;
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
41
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS PREDEFINIDAS EM PHP
O PHP tem um conjunto de variveis j definidas que contm
informaes relevantes sobre o ambiente que o rodeia e o
programa em curso. So chamadas as SUPERGLOBAIS
.
$_SERVER - Variveis da responsabilidade do servidor web
$_GET - Variveis obtidas por meio do HTTP GET
$_POST - Variveis obtidas por meio do HTTP POST
$_COOKIE - Variveis obtidas a partir dos cookies
$_SESSION - Variveis associadas sesso do utilizador actual
$_FILES - Variveis respeitantes ao upload de ficheiros.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
42
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS SUPERGLOBAIS: $_SERVER
Quero explorar todas estas com vocs aqui! Mas, para j e para
PHP
vermos qualquer coisa a funcionar vamos ver a $_SERVER
<?php
echo $_SERVER[SERVER_ADDR] . <br> ;
echo $_SERVER[SERVER_NAME] . <br> ;
echo $_SERVER[REMOTE_ADDR] . <br> ;
//REMOTE_HOST no funciona Localhost
echo $_SERVER[DOCUMENT_ROOT] . <br> ;
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
43
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS REVISO
PHP
Pequeno exemplo de variveis...
<?php
$nome = Felismino ;
$Nome = Felisberto ;
echo $nome, $Nome<br>; // Funciona!
$1teste = Teste; // D ERRO!
$_1teste = Teste; // Funciona!
echo $_SERVER[DOCUMENT_ROOT]; // V. Superglobal
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
44
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
MBITO DAS VARIVEIS
As variveis tm um mbito de aplicao. Podem ser SuperGlobais
Globais ou Estticas
VARIVEIS GLOBAIS
PHP
A varivel $i global e pode ser utilizada pelo cdigo que est
presente no ficheiro que foi
<?php
includo!
$i = 5 ;
include ( ficheiro.php) ;
?>
Este exemplo usa incluso de ficheiros... no se preocupem com
isso para j!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
45
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS GLOBAIS
Ao contrrio dos ficheiros, as variveis no se estendem para
funes. No exemplo seguinte, nada imprimido porque a
<?php
PHP
varivel $b no est definida dentro da funo
$b = 5;
function teste(){
echo $b;
}
teste();
?>
Este exemplo usa funes de PHP... no se preocupem com isto!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
46
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
VARIVEIS ESTTICAS (LOCAIS)
Uma varivel esttica uma varivel que mantm o seu valor
mesmo aps o programa ter abandonado o mbito onde ela foi
PHP
definida
<?php
$a = 5;
echo "Antes: " . $a . "<br>";
function teste2() {
static $a;
teste2();
$a = 10;
echo <br>Depois: " . $a;
echo Durante: . $a;
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
47
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CONSTANTES
Enquanto uma varivel pode, l est, variar ao longo do cdigo,
uma constante mantem-se inaltervel de inicio ao fim.
- Os nomes no comeam com o $ (cifro)
- As constantes so definidas com a funo define();
- As constantes so GLOBAIS. Podem ser acedidas dentro de
outras funes.
- As constantes no podem ser redefinidas nem eliminadas.
Vamos ver um exemplo...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
48
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CONSTANTES
contantes.php
<?php
define (_NOME_,Afonso);
define (_IDADE_, 31);
echo O . _NOME_ . tem . _IDADE_ . anos;
// Resultado: O Afonso tem 31 anos
?>
Possvel aplicao? Ficheiros de lnguas de um site multi-lngua
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
49
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
EXPRESSES
Agora que sabemos tudo sobre variveis... o que podemos fazer
com elas? E como o podemos fazer? Usamos expresses.
.
J vimos algumas ... vamos dar-lhes um olhar mais atento para
<?php
PHP
perceber como funcionam!
$nome = Afonso;
EXPRESSO
echo $nome;
?>
Dvidas?
Pergunte. Agora!
OPERADOR
Qualquer coisa:
[email protected]
50
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
EXPRESSES
PHP
Alguns exemplos! (Ter em mente... OPERADORES mais frente!)
<?php
$a = 10;
$b = $c = 2; // $b = 2 E $c = 2
$d = $c + $b;
$e = 10 + $d + ($c * $b);
$e++; // Incrementa um valor!
// igual a $e = $e + 1;
$f = $e;
echo $f;
44
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
51
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES
Uma funo tambm uma expresso. As funes so usadas
<?php
A funo do exemplo no possui
PHP
para fazer re-aproveitamento de cdigo.
qualquer parmetro de entrada.
function dizOla(){
echo Ol Mundo;
}
Quando chamada apenas
imprime Ol Mundo.
dizOla();
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
52
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES
Parmetros de entrada? Que isso??
<?php
PHP
So valores que queremos dar de entrada funo!
function dizOla2($nome){
echo Ol . $nome;
}
Experimentem esta!
$nome = Afonso;
dizOla2($nome);
?>
Dvidas?
Pergunte. Agora!
Invocao (Chamada) com passagem de
parmetros
Qualquer coisa:
[email protected]53
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES
Vamos ver mais exemplos com parmetros de entrada...
PHP
<?php
PHP
Funces podem executar uma aco ou retornar um valor
function soma($a, $b){
<?php
function soma($a, $b){
echo $a + $b;
}
soma(4154,10124);
return $a + $b;
}
$c = soma(457,215);
echo $c;
?>
?>
A execuo de uma funo pra assim que um valor for retornado
44
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
54
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES
Em funes podemos permitir que no seja necessrio introduzir
PHP
certos parmetros. Usamos parmetros predefinidos...
<?php
function multiplica($a, $b = 10){
return $a * $b;
}
echo multiplica(5); // Resultado: 50
echo multiplica(3,5); // Resultado: 15
?>
Dvidas?
Pergunte. Agora!
44
Qualquer coisa:
[email protected]
55
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ... mais um exemplo!
PHP
Agora que somos experts em funes, voltemos ao ex de vectores!
$e = array(1 => 'Valor1', 2 => 'Valor2', 3 => 'Valor3');
array_pop($e);
echo "<b>Depois do ARRAY_POP</b>";
print_r($e);
array_push($e,"Um Valor qualquer");
echo "<b>Vector depois do ARRAY_PUSH</b>";
print_r($e);
O PHP j vem cheio de funes para tarefas corriqueiras...
44
Lista de funes p/ vectores: php.net/manual/en/ref.array.php
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
56
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ... dentro de Funes
function soma2nums($a,$b){
PHP
Muitas vezes essencial ... e no nada de difcil...
return $a + $b;
}
echo soma2nums(15,soma2nums(3,6));
Simples
no ?
44
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
57
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES
Em PHP h imensos operadores para muitas operaes diferentes
Vamos ver os mais usuais! (Alguns j foram vistos antes!)
Um operador indica uma aco a ser executada entre membros
<?php
PHP
de uma expresso
$nome = Afonso;
EXPRESSO
echo $nome;
?>
Dvidas?
Pergunte. Agora!
OPERADOR
Qualquer coisa:
[email protected]
58
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: Aritmticos
EXEMPLO
NOME
RESULTADO
$a + $b
Adio
Soma de $a com $b
$a - $b
Subtraco
Diferena entre $a e $b
$a * $b
Multiplicao
Produto de $a por $b
$a / $b
Diviso
Quociente entre $a por $b
$a % $b
Mdulo
Resto da diviso de $a por $b
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
59
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: Relacionais
EXEMPLO
NOME
RESULTADO
$a == $b
Igual
Verdade se $a igual a $b
$a === $b
Idntico
Verdade se $a igual a $b (e mesmo tipo)
$a != $b
Diferente
Verdade se $a diferente de $b
$a !== $b
No Idntico
Verdade se $a diferente de $b
(ou de tipos diferentes)
$a < $b
Menor
Verdade se $a menor que $b
$a > $b
Maior
Verdade se $a mairo que $b
$a <= $b
Menor/Igual
Verdade se $a menor ou igual a $b
$a >= $b
Maior/Igual
Verdade se $a maior ou igual a $b
55
51
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
60
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: Lgicos
EXEMPLO
NOME
RESULTADO
$a AND $b
Conjuno
TRUE se $a E $b forem TRUE
$a && $b
Conjuno
TRUE se $a E $b forem TRUE
$a OR $b
Disjuno
Inclusiva
TRUE se $a OU $b forem TRUE
$a || $b
Disjuno
Inclusiva
TRUE se $a OU $b forem TRUE
$a XOR $b
Disjuno
Inclusiva
TRUE se $a OU $b forem TRUE
(mas no ambos simultneamente)
!$a
Negao
Lgica
TRUE se $a for FALSE
55
51
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
61
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: Incremento/Decremento
EXEMPLO
NOME
RESULTADO
$a++
Ps-Incremento
Incrementa $a e depois devolve $a
++$a
Pr-Incremento
Devolve $a e depois incrementa $a
$a--
Ps-Decremento
Decrementa $a e depois devolve $a
--$a
Pre-Decremento
Devolve $a e depois decrementa $a
Sem medo... vamos ver mais disto nos CICLOS.
55
51
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
62
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: Condicional
Representa-se por ? e tem uma estrutura muito semelhante
a uma estrutura de controlo SE. Sintaxe: expr1 ? expr2 : expr3
.
A expr1 avaliada. Se TRUE devolvido o valor da expr2
PHP
Se FALSE devolvido o valor da expr3
$a = 9;
$b = 10;
print ($a > $b ? $a maior : $a menor );
.
$d = 5; $e = $d * $d; // $e o quadrado de $d
55
51
print ($e >= 100 ? maior : menor );
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
63
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: De Strings
PHP
Operador de concatenao
$k = Ol;
$k = $k . Mundo !; // Ol Mundo !
55
51
PHP
Operador de concatenao e atribuio
$m = Ol;
$m .= mundo !; // Ol mundo !
55
51
55
51
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
64
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
OPERADORES: Lista completa
Referncia completa de todos os operadores, aqui:
http://php.net/manual/en/language.operators.php
(basta ir a php.net e pesquisar Operators)
55
51
55
51
55
51
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
65
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
EXERCICIOS
1) Escreva uma funo que faa a soma de dois nmeros
PHP
Teste 2 vezes com valores a serem imprimidos no browser
<?php
function soma2nums($num1,$num2) {
return $num1 + $num2;
}
55
51
$a = 10;
$b = 15;
echo soma2nums($a, $b);
echo soma2nums(27,$b);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
55
51
55
51
66
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
EXERCICIOS
2) Escreva uma funo que calcule o cubo de um nmero
Teste 2 vezes com valores a serem imprimidos no browser
3) Escreva uma funo que diga se um nmero par ou impar
Teste 2 vezes com valores a serem imprimidos no browser
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
67
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
EXERCICIOS
<?php
function cubomaiorquemil($a){
$b = $a * $a * $a;
55
51
echo ($b >= 1000 ? "SIM ($b >= 1000)<br>" : "NO ($b)<br>");
}
function parouimpar($a){
echo ($a % 2 == 0 ? "($a) PAR<br>" : "($a) IMPAR<br>");
}
55
51
55
51
parouimpar(10);
parouimpar(7);
cubomaiorquemil(9);
cubomaiorquemil(15);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
68
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS NO PHP (1)
O PHP possui uma extensa biblioteca de funes definidas para
facilitar a vida malta. Ao longo do curso, de vez em quando,
vamos ver as mais importantes. Hoje ... vamos ver algumas
PHP
funes para texto. Vejam a sintaxe de cada em php.net ...
$string1 = ol mundo!;
$string2 = OL MUNDO!;
echo ucfirst ($string1); // Ol mundo!
echo ucwords ($string1); // Ol Mundo!
echo strtolower ($string2); // ol mundo!
echo strtoupper ($string1); // OL MUNDO!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
55
51
55
51
69
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
Esta estrutura a famosa SE ENTO SENO da programao.
a estrutura mais usada em qualquer linguagem de programao
Tambm conhecida como sendo uma Estrutura de controlo
SINTAXE: Pode assumir 3 formas.
if (expresso) Instruo
if (expresso) Instruo else Instruo
if (expresso) Instruo elseif Instruo else Instruo ....
55
51
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
70
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
INSTRUES CONDICIONAIS: If
Um exemplo:
$a = 10;
$b = 15;
55
51
if($a > $b) {
echo $a maior que $b;
}
elseif($a == $b) {
echo $a igual a $b;
}
else {
echo $a menor que $b;
55
51
55
51
55
51
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
71
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
INSTRUES CONDICIONAIS: If
$a = 10;
$b = 15;
if($a > $b) {
$msg = $a maior que $b;
Um exemplo:
Preparamos uma
mensagem e s
a imprimimos no51
55
fim.
}
elseif($a == $b) {
$msg = $a igual a $b;
}
else {
$msg = $a menor que $b;
}
55
51
55
51
55
51
echo $msg;
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
72
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
Um uso tpico de um IF simples quando recebemos variveis
PHP
numa pgina atravs do HTTP GET
$nome = $_GET[nome];
echo $nome;
Notice: Undefined index: nome in
C:\xampp\htdocs\cesae\exemplos.php on line 282
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
73
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
PHP
Mudem o endereo para: localhost/index.php?nome=Felismino
$nome = $_GET[nome];
echo $nome;
Acontece que o nosso .php no estava preparado para o caso
da varivel $_GET[nome] poder no estr definida !
.
Resolve-se isso de uma forma muito simples!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
74
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
Usa-se um IF para verificar se a varivel est ou no definida
PHP
O PHP tem uma funo que faz essa verificao: isset();
if( isset($_GET[nome]) ) {
$nome = $_GET[nome];
} else {
$nome = desconhecido;
}
echo Ol . $nome;
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
75
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
PHP
Vrias variveis de entrada? Sem problema!
if( isset($_GET[nome]) && isset($_GET[email]) ) {
$nome = $_GET[nome];
$email = $_GET[email];
$msg = $nome . ( . $email . );
} else {
$msg = Erro na introduo de parmetros;
}
echo $msg;
No endereo: index.php ? nome=Felisberto & [email protected]
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
76
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
PHP
Se soubessemos o funcionamento da isset() melhor...
if( isset($_GET[nome], $_GET[email]) ) {
$nome = $_GET[nome];
$email = $_GET[email];
$msg = $nome . ( . $email . );
} else {
$msg = Erro na introduo de parmetros;
}
echo $msg;
No endereo: index.php ? nome=Felisberto & [email protected]
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
77
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
Outro bom uso recorrente do IF quando definimos as nossas
funes. J tinhamos visto que ocorre um erro se tivermos 2
if(!function_exists(encurtaTexto)){
PHP
funes com o mesmo nome ...
function encurtaTexto($text,$chars='25'){
.
...
.
}
}
Ou seja, definimos a funo s se j no estiver definida!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
78
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
PHP
if ($a == 5):
PHP
Tambm temos o IF com uma sintaxe alternativa
echo "a igual a 5";
<?php if ($a == 5): ?>
<p> A igual a 5!</p>
<?php endif; ?>
echo "...";
elseif ($a == 6):
Tambm podemos ter uma
coisa deste gnero!
echo "a igual a 6";
echo "!!!";
else:
echo "a nem 5 nem 6";
endif;
Simplifica a leitura mas pode ser confuso...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
79
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If
if(1){
PHP
E para acabar os IFs ... um que sempre verdade !
echo Sou sempre verdade;
} else {
echo Esta mensagem nunca ser exibido!;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
80
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
INSTRUES CONDICIONAIS: If (Exerccio)
Faa um ficheiro PHP que receba por HTTP GET 2 variveis
numricas. E nesse ficheiro deve existir:
>> Uma funo para calcular a multiplicao dessas variveis
>> Uma estrutura IF que verifique se a multiplicao desses dois
nmeros d menor que 100, igual a 100 ou maior que 100.
>> Em cada caso deve imprimir uma mensagem para o ecr, do
gnero: A multiplicao entre X e Y d Z que menor que 100
em W unidades.
DICA: Defina as variveis auxiliares que achar convenientes!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
81
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
O funcionamento de um SWITCH
PHP
INSTRUES CONDICIONAIS: Switch
igual ao de um IF.
$i = 2;
switch($i){
case 0:
echo $i igual a 0;
Pode e deve ser usado quando
break;
case 1:
queremos comparar muitos
echo $i igual a 1;
valores...
break;
case 2:
echo $i igual a 2;
break;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
82
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
INSTRUES CONDICIONAIS: Switch
$i = Ana;
switch($formando){
case Glria:
echo Sentada direita;
break;
case Ana:
echo Sentada em frente;
break;
case Marlia:
echo Sentada esquerda;
break;
[...]
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
83
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
INSTRUES CONDICIONAIS: Switch - Caso prtico
function StringFloracao($mes){
switch($mes){
case 1: $stringmes = Janeiro; break;
case 2: $stringmes = Fevereiro; break;
case 3: $stringmes = Maro; break;
case 4: $stringmes = Abril; break;
case 5: $stringmes = Maio; break;
case 6: $stringmes = Junho; break;
[...]
}
return $stringmes;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
84
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
INSTRUES ITERATIVAS (CICLOS): WHILE
$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador;
$contador++;
}
Num ciclo, uma qualquer aco processada enquanto uma
condio for verdadeira.
Antes de se fechar o ciclo devemos ter o cuidado de incrementar
o contador...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
85
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS PHP (2): EXPLODE e LIST e IMPLODE
So das mais usadas funes de PHP. O IMPLODE condensa vrias
variveis numa s, o EXPLODE explode uma string para vrios
pedaos e a LIST facilita a definio de muitas variveis ao mesmo
tempo.
PHP
EXPLODE
$pizza = fatia1|fatia2|fatia3|fatia4|fatia5|fatia6;
$fatias = explode(|, $pizza);
echo $fatias[0] . <br>; // fatia1
echo $fatias[1]; // fatia2
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
86
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS PHP (2): EXPLODE e LIST e IMPLODE
PHP
EXPLODE
$carro = rodas, motor, volante, pedais;
$pecas = explode(, , $carro, 2);
echo $pecas[0] . <br>; // rodas
echo $pecas[1]; // motor, volante, pedais
PHP
EXPLODE com o LIST
$clubes = FC Porto:SL Benfica:Sporting CP;
list($grande, $medio, $assimassim) = explode(:,$clubes);
echo $grande . <br>; // FC Porto
echo $assimassim; // Sporting CP
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
87
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS PHP (2): EXPLODE e LIST e IMPLODE
PHP
IMPLODE
$dados = array(pnome,unome,email,telemovel);
echo $dados[1]; // unome
$todosjuntos = implode( | , $dados);
echo $todosjuntos; // pnome | unome | email | telemovel
PHP
IMPLODE (Exemplo prtico)
$elems = array(Elemento 1, Elemento 2, Elemento 3);
echo <ul><li> . implode(</li><li>", $elems) . </li></ul>;
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
88
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: WHILE ... CICLOS INFINITOS
$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador;
$contador++;
}
So dos erros mais comuns em programas...
Entra-se em ciclos infinitos quando a condio que estamos
a verificar sempre verdadeira .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
89
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: WHILE
$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador++;
}
Neste exemplos usamos o operador de ps-incremento dentro
do prprio echo...
impresso o seu valor e logo a seguir incrementado.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
90
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: WHILE
$contador = 1;
while($contador <= 10){
echo $contador igual a . ++$contador;
}
J neste exemplo, usado o operador de pr-incremento,
a varivel $contador incrementada e s depois disso
que impressa no ecr.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
91
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: DO ... WHILE
Temos tambm a variante DO .... WHILE (fazer enquanto)
O cdigo pouco altera.
Nesta verso, a condio apenas verificada depois do ciclo
PHP
ser processado pelo PHP.
$contador = 1;
do {
echo $contador igual a . $contador;
$contador++;
} while ($contador <= 10);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
92
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
INSTRUES ITERATIVAS (CICLOS): WHILE
$contador = 1;
while($contador <= 10){
echo $contador igual a . $contador++;
PHP
$contador = 1;
do {
echo $contador igual a . $contador++;
} while ($contador <= 10);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
93
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: Exerccio 1
Faa um contador que comece no 1 e quando chegar a 10
imprima a linha Ol Mundo!.
Dever aparecer no ecr algo do gnero:
1
2
...
8
9
Ol Mundo
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
94
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: Exerccio 1 Resoluo
$i = 1;
while($i <= 10){
if($i < 10) {
echo $i . <br>;
}else
echo Ol Mundo!;
7
8
Dvidas?
Pergunte. Agora!
Ol Mundo!
Qualquer coisa:
[email protected]
95
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: Exerccio 1 Resoluo (Floreada!)
$i = 1;
while($i <= 10){
if($i < 3 || $i > 7 && $i < 10) {
echo $i . <br>;
...
}elseif($i > 3 && $i < 7){
...
...
echo ...<br>;
Podia ter
ficado melhor!
...
}else
echo Ol Mundo!;
8
9
Ol Mundo!
Dvidas?
Pergunte. Agora!
...
Qualquer coisa:
[email protected]
96
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CICLOS: Exerccio 1
Resoluo (Floreada!)
PHP
CENTRO DE SERVIOS E APOIO S EMPRESAS
$i = 1;
$flag = false;
while($i <= 10){
if($i < 3 || $i > 7 && $i < 10 ){
echo $i . "<br>";
}elseif($i >= 3 && $i <= 7){
...
if($flag == false) {
echo "...<br>";
$flag = true;
Ol Mundo!
}
}elseif($i == 10){
echo "Ol Mundo!";
}
$i++;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
97
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: Exerccio 2
Faa um contador decrescente que comece no 20 e mostre
linha a linha a contagem at 0.
Dever aparecer no ecr algo tipo:
Falta 20...
Falta 19...
Falta 18...
Mas quando chegar ao zero. Em vez de dizer Falta 0...
deve dizer J est!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
98
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: Exerccio 2 Resoluo
$i = 20;
while($i >= 0){
if($i != 0){
echo "Falta $i ...";
}else{
echo "J est!";
}
echo "<br>";
$i--;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
99
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: FOR
Tipo um While... com os comandos definidos no nicio do bloco.
.
SINTAXE: for(expr1; expr2; expr3) { ... }
expr1: Avaliada apenas uma vez na primeira iterao
expr2: Avaliada a cara iterao. O ciclo pra se der False .
expr3: Avaliada no final de cada iterao. Contm a varivel
PHP
de controlo.
for($conta = 1; $conta < 10; $conta++){
echo Nmero: <b> . $i . </b><br>;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
100
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: FOREACH
A instruo FOREACH, funciona exclusivamente com vectores.
Podemos utiliza-la para chegar ao valor do vector ou ao
valor e chave do vector
.
SINTAXE: foreach($vector AS $valor) { Instrues }
foreach($vector AS $chave => $valor) { Instrues }
Vamos ver exemplos
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
101
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: FOREACH
A instruo FOREACH, funciona exclusivamente com vectores.
Podemos utiliza-la para chegar ao valor do vector ou ao
PHP
valor e chave do vector
.
$vector = array(um => 1,
dois => Nmero dois,
SINTAXE: foreach($vector
AS $valor)
tres
=> 3, { Instrues }
quatro
=> 4);
foreach($vector
AS $chave
=> $valor) { Instrues }
foreach($vector AS $valor){
Vamos ver exemplos
echo $valor<br>;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
102
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: FOREACH
A instruo FOREACH, funciona exclusivamente com vectores.
Podemos utiliza-la para chegar ao valor do vector ou ao
PHP
valor e chave do vector
.
$vector = array(um => 1,
dois => Nmero dois,
SINTAXE: foreach($vector
AS $valor)
tres
=> 3, { Instrues }
quatro
=> 4);
foreach($vector
AS $chave
=> $valor) { Instrues }
foreach($vector AS $chave => $valor){
Vamos ver exemplos
echo A chave $chave tem o valor $valor<br>;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
103
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: FOREACH (Como faramos se... ?)
Quisssemos que, se o valor da chave dois for igual a
PHP
Nmero dois muda-la para 2 ?
$vector = array(um => 1,
dois => Nmero dois, // Novo Valor: 2
tres => 3,
quatro => 4);
foreach($vector AS $chave => $valor){
?
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
104
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: FOREACH
$vector = array(um => 1,
dois => Nmero dois, // Novo Valor: 2
tres => 3,
quatro => 4);
foreach($vector AS $chave => $valor){
if ($valor == "Nmero dois"){
$vector[$chave] = 2;
}
}
print_r($vector);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
105
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
CICLOS: FOREACH (Como faramos se... ?)
Quisssemos que as os valores para cada chave, fossem,
PHP
respectivamente: 5 .... 6 ... 7 ... 8 ?
$vector = array(um => 1,
// Novo Valor: 5
dois => Nmero dois,
// Novo Valor: 6
tres => 3,
// Novo Valor: 7
quatro => 4);
// Novo Valor: 8
foreach($vector AS $chave => $valor){
?
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
106
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
CICLOS: FOREACH (Como faramos se... ?)
$vector = array(um => 1,
// Novo Valor: 5
dois => Nmero dois,
// Novo Valor: 6
tres => 3,
// Novo Valor: 7
quatro => 4);
// Novo Valor: 8
$contador = 5;
foreach($vector AS $chave => $valor){
$vector[$chave] = $contador;
$contador++;
}
print_r($vector);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
107
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
RESUMO INSTRUES
Instrues Condicionais:
- IF
- Switch (Uma espcie de IF para quando h mtas instrues)
Instrues Iteractivas (ou Ciclos)
- While
- Do ... While
- For
- Foreach (S para vectores!)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
108
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
Uma funo extremamente usada em PHP a DATE
frequentemente usada com a TIME e a MKTIME que ajudam a
fazer clculos...
PHP
Vamos ver uns exemplos:
Dvidas?
Pergunte. Agora!
$hoje = date("Y-m-d H:i:s");
echo $hoje . "<br>";
Qualquer coisa:
[email protected]
109
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
O timezone por defeito o UTC.
Precisamos de definir o que queremos...
PHP
Assim j deve funcionar melhor:
date_default_timezone_set(Europe/Lisbon);
$hoje = date(Y-m-d H:i:s);
echo $hoje . <br>;
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
110
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
PHP
Temos muitas maneiras de definir o formato da data desejada,
dependendo das necessidades
$hoje = date("d/m/y"); // 21/10/13
$hoje = date("d-m-Y"); // 21-10-2013
$hoje = date("g:i:s A"); // 2:04:50 AM
$hoje = date("H:i:s");
// 02:04:50
$hoje = date("l");
// Monday
$hoje = date(Y-m-d H:i:s); // 2013-10-21 02:04:50
// Esta ltima maneira sempre a melhor para
interaes com uma Base de Dados
Todas as maneiras possveis em php.net
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
111
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
Usando o time para definir o momento ... O time() calcula um
valor baseado no incio da Era UNIX ! Retorna o valor em
PHP
segundos desde 1 de Janeiro de 1970 s 00:00:00 GMT
$proxSem = time() + (7 * 24 * 60 * 60);
echo <b>Agora</b>: . date(Y-m-d H:i:s) . <br>;
echo <b>Prxima Sem.</b>: . date(Y-m-d H:i:s, $proxSem);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
112
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
Usando o time para definir o momento ... O time() calcula um
valor baseado no incio da Era UNIX ! Retorna o valor em
PHP
segundos desde 1 de Janeiro de 1970 s 00:00:00 GMT
$proxSem = time() + (7 * 24 * 60 * 60);
echo <b>Agora</b>: . date(Y-m-d H:i:s) . <br>;
echo <b>Prxima Sem.</b>: . date(Y-m-d H:i:s, $proxSem);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
113
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
A funo MKTIME usada em conjunto com o DATE bastante
PHP
til para calcular datas seja no passado ou no futuro. Assim:
echo 12/05/1982 foi um . date(l, mktime(0, 0, 0, 5, 12, 1982));
PHP
Ou assim:
$hoje = mktime(0, 0, 0, date(m), date(d)+1, date(Y));
$mespassado = mktime(0, 0, 0, date(m)-1, date(d), date(Y));
$proxano = mktime(0, 0, 0, date(m), date(d), date(Y)+1);
echo Mes Passado: . date(d-m-Y,$mespassado) . "<br>";
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
114
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FUNES ESSENCIAIS DO PHP (3): TIME e DATE e MKTIME
PHP
Algumas utilidades... ou no:
$datadif1 = time() - strtotime(1982-05-12);
$dias1 = floor($datadif1/(60*60*24));
echo O Afonso j viveu . $dias1 . dias!;
$datadif2 = time() + strtotime(2014-02-28);
$dias2 = floor($datadif2/(60*60*24));
echo <br>Faltam . $dias2 . dias para a Ana nascer!;
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
115
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
include() , include_once() , require() e require_once()
Funes que se usam sempre em PHP!
Servem para incluir dentro de um ficheiro .PHP ficheiros externos
<?php
PHP
com cdigo PHP ou no! Podemos incluir ficheiros .txt, .html, etc.
require ("php/connection.php");
require ("php/functions.php");
?>
Diferentes na reaco a erros. Se ficheiro no encontrado:
REQUIRE - produz erro fatal. Pra toda a execuo da pgina.
INCLUDE - produz aviso. Continua toda a execuo da pgina.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
116
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
include() , include_once() , require() e require_once()
O require_once() e include_once() diferem das anteriores, apenas
por no incluir o ficheiro caso este j tenha sido incluido antes.
<?php
PHP
Evita problemas como redefinio de variveis...
require_once ("php/connection.php");
include_once ("php/functions.php");
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
117
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
include() , include_once() , require() e require_once()
Exemplos prticos... os que vimos anteriormente de chamada
a ficheiros com a nossa ligao Base de Dados, ou ficheiros
PHP
com as nossas funes... e nestes casos:
<div id=header >
<?php include(inc/header.php"); ?>
</div>
<div id=sh>
<div id=shesq>Voc est aqui: [...]</div>
<?php include(inc/headersub.php); ?>
</div>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
118
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP SESSIONS
As SESSES so uma forma de guardar info sobre um visitante.
O servidor atribui um id nico ao cliente, que mantido
enquanto a sesso estiver activa.
Variveis de sesso criada, podem ser consultadas pelas pginas
seguintes (do mesmo site) que o cliente visitar.
A sesso apagada no fim da visita.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
119
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP SESSIONS
Vamos fazer um pequeno site para ver um exemplo de SESSES.
Salvem estes cdigo fontes no vosso localhost
Mudando a extenso do ficheiro para .php
http://cesae.afonsogomes.com/exemplo-sessoes.txt
http://cesae.afonsogomes.com/exemplo-sessoes2.txt
http://cesae.afonsogomes.com/exemplo-sessoes-unset.txt
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
120
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP SESSIONS
Verificar se a Sesso j est definida.
PHP
Seno ... criar a varivel de sesso que desejamos...
session_start();
if(!isset($_SESSION['contador'])){
// Sesso ainda no definida. Iniciar varivel
$_SESSION['contador'] = 1;
} else {
// Sesso J definida. Incrementar contador.
$_SESSION['contador']++;
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
121
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP SESSIONS
O cdigo anterior cria um simples contador de pginas vistas.
Este contador ser apagado quando o utilizador sair do site
Por alguma razo podemos querer apaga-lo antes dele sair e
isso to simples como, apagarmos as variveis que crimos
PHP
para essa sesso...
Dvidas?
Pergunte. Agora!
session_start();
unset($_SESSION['contador']);
Qualquer coisa:
[email protected]
122
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP COOKIES
Os Cookies funcionam de maneira idntica s
Sesses.
A grande diferena que as informaes das
variveis que definirmos ficam armazenadas num pequeno
ficheiro txt no computador do visitante do site.
Duas notas importantes:
- H pessoas que tm os cookies desligados nos seus browsers.
- A info fica disponvel para acesso numa prxima visita.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
123
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP COOKIES
Para definirmos um cookie temos de dar um nome e um valor
varivel e definirmos uma durao (validade).
<?php
PHP
Sintaxe: setcookie(name, value, expire, path, domain);
setcookie(utilizador , Afonso, time()+60*60*24*30);
setcookie(contadorvisitas, 1, time()+60*60*24*30);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
124
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP COOKIES
Para usarmos informaes guardadas numa cookie...
PHP
Verificamos se elas esto definidas e apanhamo-las:
<?php
if (isset($_COOKIE[utilizador ])) {
echo Bem Vindo . $_COOKIE[utilizador ] . !<br>;
} else {
echo Bem vindo visitante!<br>;
}
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
125
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP COOKIES
Para apagarmos uma cookie, definimos uma validade j
<?php
PHP
expirada (no passado!) bem como os valores do cookie vazio!
setcookie(utilizador , , time()-60*60*24*30);
setcookie(contadorvisitas, , time()-60*60*24*30);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
126
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP COOKIES
Vamos ver um pequeno exemplo
Salvem estes cdigo fontes no vosso localhost
Mudando a extenso do ficheiro para .php
http://cesae.afonsogomes.com/exemplo-cookies.txt
http://cesae.afonsogomes.com/exemplo-cookies-apaga.txt
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
127
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
TRABALHAR COM FICHEIROS EM PHP
Uma das funcionalidades do PHP poder manipular ficheiros.
Como se fossemos ns a mexer nos nossos ficheiros...
E o que podemos fazer?
No ficheiro: Criar novo , Abrir, Fechar, Apagar
Nos contedos do ficheiro: Escrever, Ler, Adicionar coisas , Apagar
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
128
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: FOPEN e FCLOSE
PHP
Ento ... vamos l comear a perceber como a coisa funciona:
<?php
$filename = onossoficheiro.txt;
Pode ser:
W, R ou A
$filehandle = fopen($filename, w )
or die(Erro: Impossvel abrir!);
fclose($filehandle);
?>
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
129
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: FWRITE
PHP
No adianta abrir e fechar se no for para fazer alguma coisa!
// Acrescentem isto depois do fopen e antes do fclose
// Salvar... executar no browser... ver como ficou no ficheiro
$escreveisto = Funciona! Impacbel! . PHP_EOL;
fwrite($filehandle, $escreveisto);
$eisto = Altamente!;
fwrite($filehandle, $eisto);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
130
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: FWRITE
PHP
E mais um pouco do FWRITE!
// Agora troquem as linhas do slide anterior por estas!
// Salvar... executar no browser... ver como ficou no ficheiro
$istotambem = Isto afinal fcil! . PHP_EOL;
fwrite($filehandle, $istotambem);
Problemas? :)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
131
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: FWRITE
PHP
E mais um pouco do FWRITE... com o APPEND
$filename = onossoficheiro.txt;
$filehandle = fopen($filename, A)
or die(Erro: Impossvel abrir!);
$escreveisto = Funciona! Impacbel! . PHP_EOL;
fwrite($filehandle, $escreveisto);
$istotambem = Isto afinal fcil! . PHP_EOL;
fwrite($filehandle, $istotambem);
fclose($filehandle);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
132
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: FREAD
PHP
Para fazer leitura de contedos de um ficheiro...
$filename = onossoficheiro.txt;
$filehandle = fopen($filename, r )
or die(Erro: Impossvel abrir!);
$dados = fread($filehandle, 5);
echo <b>Os dados do ficheiro: </b> . $dados;
fclose($filehandle);
Os primeiros 5 bytes (1 byte = 1 caracter)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
133
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: FREAD
PHP
Para fazer leitura de contedos de um ficheiro...
$filename = onossoficheiro.txt;
$filehandle = fopen($filename, r )
or die(Erro: Impossvel abrir!);
$dados = fread($filehandle, filesize($filename));
echo <b>Os dados do ficheiro: </b> . $dados;
fclose($filehandle);
Assim j l todo o ficheiro!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
134
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
FICHEIROS EM PHP: UNLINK (Apagar)
PHP
A funo unlink apaga completamente o ficheiro
$filename = onossoficheiro.txt;
unlink($filename);
CUIDADO! Quanto mais poderosa uma funo, maior a
probabilidade de fazer borrada... A funo unlink propcia
a causar acessos de raiva 1 minuto depois de a termos usado!
Testem e depois deixem esta linha comentada nos exemplos.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
135
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PROCESSAR FORMULRIOS EM PHP
Processar formulrios talvez a funo mais importante do PHP
- Gere toda a interactividade entre o utilizador e a
infra-estrutura do nosso site.
- Permite que o utilizador afecte de forma efectiva os recursos
do nosso servidor (inseres na BD, envio de emails, etc).
- Todo o cuidado pouco ao nvel da segurana quando
lidamos com inputs submetidos pelos utilizadores
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
136
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PROCESSAR FORMULRIOS EM PHP
Vamos estudar o caso de um formulrio submetido no nosso site
que far com que seja enviado um email para a nossa conta de
email de uso dirio.
A funo que trata disto em PHP a mail()
.
Mas antes de deixarmos os dados entrar nessa funo, temos de
fazer algumas verificaes e introduzir algumas seguranas.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
137
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PROCESSAR FORMULRIOS EM PHP
Um dos lemas essenciais na segurana de um site :
if(!function_exists("seguranca_dados")){
PHP
Nunca confiar em nada que um utilizador submete.
function seguranca_dados($dados){
$dados = trim($dados);
$dados = stripslashes($dados);
$dados = htmlspecialchars($dados);
return $dados;
}
}
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
138
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PROCESSAR FORMULRIOS EM PHP
Vamos analisar um exemplo prtico e til...
Salvem estes cdigos mudando a extenso do ficheiro para .php
(O envio de email s funciona no servidor e no no localhost)
http://cesae.afonsogomes.com/form.txt
http://cesae.afonsogomes.com/functions.txt
http://cesae.afonsogomes.com/processa-form.txt
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
139
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
BASES DE DADOS: O que so
Uma vez que o constituinte central de qualquer sistema de informao
a sua memria (conjunto armazenado de dados), a soluo
informtica, para qualquer organizao, deve assentar num
depsito integrado de dados a base de dados.
Uma base de dados , por definio, um conjunto organizado de dados,
disponvel a todos os utilizadores ou processamentos da organizao
que deles tenham necessidade
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
140
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
BASES DE DADOS: Informao poder!
Dados so apenas elementos ou valores discretos que, isoladamente,
no tm qualquer valor, s se transformam em informao quando
relacionados ou interpretados de alguma forma.
Para que possa ser utilizada como apoio eficaz tomada de deciso
nas organizaes, a informao s tem valor se se verificarem,
simultaneamente, algumas condies: actualidade, correco,
relevncia, disponibilidade e legibilidade .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
142
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Antes: Sistemas de Gesto de Ficheiros
Os antecessores, em termos de evoluo tecnolgica, dos modernos
sistemas de BDs foram os sistemas de gesto de ficheiros. Utilizando
sistemas de gesto de ficheiros, as organizaes comearam por
automatizar algumas das tarefas at a realizadas manualmente.
PROBLEMA1: Basta que ocorra uma alterao na estrutura dum ficheiro
para que essa alterao se propague, necessariamente, para todas as
aplicaes que o utilizam a partilha de dados apresenta problemas
ao nvel da manuteno dos prprios sistemas.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
143
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Antes: Sistemas de Gesto de Ficheiros
PROBLEMA2: O acesso concorrente aos dados partilhados tem de ser
feito ao nvel das prprias aplicaes, utilizando funes de baixo-nvel.
Isto gera uma imensa confuso quando vrias pessoas, ou processos,
tentam aceder aos ficheiros simultaneamente.
Os sistemas de BDs surgem como tentativa de resolver estes problemas.
A abordagem pelos sistemas de Bds tem uma caracterstica fundamental:
os dados so organizados num nico conjunto.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
143
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
AGORA: Sistemas de Gesto de Ficheiros
Todos os acessos aos dados passam sempre por uma entidade
designada Sistema de Gesto de Bases de Dados (SGBD), que centraliza
Aplicao
1
Aplicao
2
SGBD
em si o acesso fsico Base de Dados.
BD
Aplicao
3
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
144
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Sistemas de Gesto de Ficheiros
Por definio, o Sistema de Gesto de Bases de Dados (SGBD) um
conjunto de software, destinado a gerir todo o armazenamento e
manipulao dos dados do sistema, fazendo a interface entre o
nvel aplicacional e a base de dados propriamente dita.
.
O SGBD esconde os detalhes de armazenamento fsico dos dados e
Aplicao
1
um grau de abstraco elevado.
Aplicao
2
SGBD
proporciona, ao nvel aplicacional,
BD
Aplicao
3
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
145
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Conceito de transao
um dos conceitos mais importantes num sistema BDs. Praticamente
todas as tarefas de gesto de base de dados vivem custa deste conceito.
.
Exemplo tpico: transferncia de valores entre duas contas bancrias.
Debitar de A e creditar em B S a sua execuo conjunta produz
um resultado vlido.
.
Por definio, uma transaco um conjunto de operaes sobre
a base de dados, perfeitamente delimitado, que exibe algumas
caractersticas importantes, conhecidas por ACID (Atomicity, Consistency,
Isolation and Durability) .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
146
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Conceito de transao
Atomicidade: o conjunto de operaes que constituem uma transaco
formam um grupo indivisvel (atmico), no sentido em que ou todas elas
so executadas com sucesso ou nenhuma executada.
Consistncia: uma transaco, se envolver actualizao de dados, deve
transportar a base de dados de um estado de integridade para outro
estado tambm de integridade.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
147
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Conceito de transao
Isolamento: apesar de as transaces executarem concorrentemente,
o sistema deve dar a cada transaco a iluso de que a nica a
executar no sistema executa isoladamente das outras
Durabilidade: o sistema deve assegurar que todos os efeitos provocados
por uma transaco bem sucedida se tornam persistentes na base de
dados e visveis para as outras transaces
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
148
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Requisitos fundamentais de um SGBD
Segurana: O objectivo das medidas de segurana dos SGBDs
proteger os dados armazenados de acessos no autorizados,
garantindo que apenas os utilizadores autorizados acedem ao sistema,
de acordo com os seus privilgios atravs de perfis ou contas.
Integridade: Por definio, uma base de dados est num estado de
integridade se contm apenas dados vlidos, isto , que no
contradizem a realidade que esto a representar, antes a reflectem
correctamente.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
149
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Requisitos fundamentais de um SGBD
Controlo da concorrncia: Um dos pressupostos fundamentais dos
SGBDs a partilha dos dados armazenados pelo nvel aplicacional.
O controlo da concorrncia relaciona-se com a coordenao dessa
partilha por vrias aplicaes e/ou utilizadores. A unidade base do
controlo da concorrncia a transaco .
Recuperao/tolerncia a falhas: a actividade que tem por objectivo o
restaurar da base de dados, aps a ocorrncia de uma qualquer falha,
para um estado de integridade garantido.
Mecanismos de recuperao: backups e transaction logs .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
150
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
BASES DE DADOS: Como chegar a um boa BD
Modelo Conceptual
Problema
Real
de Dados
EX: Diagrama E-R
Modelo Fsico de
Modelo de
Base de Dados
Base de Dados
EX: Oracle,
mySQL, MSSQL
EX: hierrquico
rede, relacional
Base de Dados
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
151
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
BASES DE DADOS: Software muito til
brModelo: Pequeno executvel de 500KB para desenhar Diagramas E-R
http://cesae.afonsogomes.com/brModelo.exe
MySQL Workbench: A ferramenta para Bases de Dados. Faz tudo!
Diagramas, Modelos Relacionais, gera cdigos para criar a BD, etc...
http://cesae.afonsogomes.com/mysql-workbench.msi (WIN)
http://cesae.afonsogomes.com/mysql-workbench.dmg (MAC)
MySQL: O servidor de Base de Dados. Est includo no vosso XAMPP
(localhost) e nas contas de alojamento caso tenham comprado domnios.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
152
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Conceptual de dados
Diagrama E-R (Entidade-Relacionamento)
- Proposto por Peter Chen em 1976
- Devido sua notao simples e poderosa, depressa se tornou numa
abordagem quase universal para a modelao de dados. Curiosamente,
ainda hoje no existe uma notao E-R normalizada.
- Como proposto originalmente, os elementos bsicos de um diagrama
E-R so as entidades , os relacionamentos e os atributos .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
153
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Entidades
Uma entidade representa um conjunto de objectos (concreto ou
abstrato) do mundo real que possuem caractersticas comuns.
.
As entidades representam uma classe de objectos do mundo real
Os objectos em si so as instncias (ocorrncias)
Dvidas?
Pergunte. Agora!
Pessoa
Cidade
Ana Lusa
Penafiel
Isabel
Porto
Cristiana
Gaia
Qualquer coisa:
[email protected]
154
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Relacionamentos
Um relacionamento representa uma associao entre entidades.
Pessoa
Residncia
Cidade
Ana Lusa
Penafiel
Isabel
Porto
Cristiana
Gaia
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
155
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Cardinalidade de um Relacionamento
Cardinalidade mxima (1 ou N) representa a quantidade mxima
de ocorrncias de uma entidade que pode estar associada a uma
mesma ocorrncia de outra entidade.
Equipa
Tem
Jogador
1 equipa tem N jogadores
Cada jogador pode estar em apenas uma equipa
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
156
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Cardinalidade de um Relacionamento
Quanto Cardinalidade mxima , os relacionamentos podem ser do tipo:
1:1 (Um para um)
Equipa
1:N (Um para muitos)
Tem
N:N (Muitos para Muitos)
Jogador
1 equipa tem N jogadores
Cada jogador pode estar em apenas uma equipa
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
157
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Cardinalidade de um Relacionamento
Cardinalidade Mnima (0 ou 1) indica se a participao de todas as
ocorrncias de uma entidade num determinado relacionamento
obrigatria ou opcional.
Livro
Autoria
Pessoa
1 livro obrigatoriamente tem pelo menos 1 autor
1 pessoa pode no ser autor de 1 livro
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
158
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Atributos
A cada entidade (ou relacionamento) podem estar associados um
ou mais atributos que representam as suas propriedades elementares.
Num
Nome
Piloto
Idade
Corrida
Circuito
Nome
Kms
Classificao
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
159
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Atributos identificadores
Um identificador um atributo que determina inequivocamente
uma entidade. Toda a entidade deve possuir um e apenas um
identificador.
NumBI
Corrida
Nome
Ano
Cidado
Dvidas?
Pergunte. Agora!
Classificao
Qualquer coisa:
[email protected]
160
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Diagrama E-R: Tipos de Atributos
Atributo Identificador
Atributo Derivado
J vimos o que faz!
Pode ser obtido de outro atributo
Num
Idade
Rua
Atributo Composto
Morada
Porta
Cidade
Cod Postal
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
161
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Conceptual (Diagrama E-R): EXERCCIO
Considere que se pretende criar uma BD para gerir casos de investigao
policial. Numa investigao policial existe um crime, caracterizado por
um identificador nico, a data e local da ocorrncia e uma pequena
descrio do sucedido. Um crime supostamente cometido por um ou
mais suspeitos, caracterizados por um identificador, um nome,
uma morada completa, um contacto e um nmero de um documento de
identificao. Um crime est tambm associado a um conjunto de provas,
que so recolhidas por um investigador criminal numa determinada data
e local. Cada prova caracterizada por um identificador, um nome e uma
pequena descrio. Por seu lado, o investigador criminal identificado
por um nmero de identificao, o seu nome e o respectivo contacto.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
162
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Conceptual (Diagrama E-R): EXERCCIO
Considere que se pretende criar uma BD para gerir casos de investigao
policial. Numa investigao policial existe um crime , caracterizado por
um identificador nico , a data e local da ocorrncia e uma pequena
descrio do sucedido. Um crime supostamente cometido por um ou
mais suspeito s, caracterizados por um identificador, um nome ,
uma morada completa , um contacto e um nmero de um documento de
identificao . Um crime est tambm associado a um conjunto de prova s,
que so recolhidas por um investigador criminal numa determinada data
e local . Cada prova caracterizada por um identificador, um nome e uma
pequena descrio . Por seu lado, o investigador criminal identificado
por um nmero de identificao , o seu nome e o respectivo contacto .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
163
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Conceptual (Diagrama E-R): EXERCCIO
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
164
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Conceptual (Diagrama E-R): EXERCCIO 2
O exerccio 2 tem muito texto e no cabe neste slide:
Abram este ficheiro:
http://cesae.afonsogomes.com/bdconceptual-ex2.txt
A pergunta:
Desenhe o diagrama conceptual para a base de dados do sistema
de gesto de reparaes em estaes de extraco de petrleo.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
165
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Conceptual (Diagrama E-R): EXERCCIO 2
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
166
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo de Base de Dados: Modelo Relacional
O Modelo Relacional tem a sua base num ramo da matemtica que ,
simultaneamente, simples e poderosa a teoria dos conjuntos .
Artigo com os fundamentos tericos do Modelo Relacional publicado
a 1970 por Edgar Cordd da IBM.
Alguns dos SGDB relacionais mais representativos so a Oracle ,
MSSQL e MS Access (ambos da Microsoft), DB2 e Informix (da IBM)
e o mySQL (cdigo livre! Mas agora detida pela Oracle depois desta
ter comprado a SUN MicroSystems.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
167
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Relacional: Tabelas
A tabela a estrutura fundamental do modelo relacional.
Uma relao uma estrutura com um determinado esquema e zero
ou mais instncias.
O esquema de uma relao constitudo por um ou mais atributos
(tambm designados por colunas ). Cada atributo ter associado um
tipo de dados de acordo com a informao que ir armazenar.
A cada instncia do esquema de uma relao designa-se por linha .
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
168
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Relacional: Tabelas
TABELA FORMANDO
Linhas
Atributos (ou Colunas)
Cod_formando
Nome
Sexo
1001
Francisco Telles
1002
Felismino Felizardo
1003
Ana Magalhes
Formando(Cod_formando, Nome, Sexo)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
169
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Relacional: Tipos de Chaves
Superchave: associao de um ou mais atributos que, em conjunto,
identificam univocamente cada uma das linhas. Nota: no limite, a
associao de todos os atributos de uma relao forma uma superchave.
Chave Candidata: subconjunto dos atributos de uma superchave que,
sendo ainda superchave, no pode ser reduzido sem perder esse estatuto
Chave Primria: chave seleccionada entre as vrias chaves candidatas
para, efectivamente, identificar cada linha.
Chave Estrangeira: atributo ou conjunto de atributos de uma relao,
que chave primria noutra relao
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
170
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Relacional: Tipos de Chaves
A existncia de uma chave estrangeira numa tabela prende-se com a
necessidade de manter a interligao entre essa tabela e a tabela onde
esse conjunto de atributos chave primria.
Curso
Formando
Dvidas?
Pergunte. Agora!
Cod_curso
Nome
15
Web Design
16
Multimedia
Cod_formando
Nome
1001
Felizardo Felicidade M
15
1002
Felismino Felizardo M
16
1003
Felisberto Felismino F
15
Qualquer coisa:
[email protected]
Sexo
Cod_curso
171
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Modelo Relacional: Restries de Integridade Implcitas
Integridade de Domnio: O valor de um atributo deve obedecer ao tipo
de dados e s restries de valores que lhe esto admitidos.
Integridade da Entidade: Cada linha de uma tabela deve poder ser
identificada inequivocamente. Isto quer dizer que cada tabela dever
possuir na sua definio uma chave primria. A existncia de uma chave
primria garante que o atributo ou os atributos que a constituem no
podem ser nulos, nem podem ser repetidos.
Integridade Referencial: O valor dos atributos que constituem a chave
estrangeira de uma tabela deve estar tambm presente na chave
primria da tabela referenciada.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
172
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Mapeamento Diagrama E-R para o Modelo Relacional
Chega a uma altura do desenvolvimento de Base de Dados em que
temos os nossos diagramas E-R feitos e precisamos de converte-los
para o Modelo Relacional.
Vamos ver alguns casos de como fazer isso
Ndoc
Docente
Nome
1
Ensina
Disc
Tel
N
Disciplina
PreReq
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
173
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento 1:1
Docente
CASO 1: Participao obrigatria das duas entidades.
Ensina
Todos os docentes tm de leccionar um s disciplina.
Cada disciplina tem de ser assegurada por um docente
Disciplina
Ndoc
Nome
Tel
Disc
Prereq
101
Afonso
12345
Amat2
Amat1
P1
D1
125
Felismino 54321
Inf1
Nenhum
P2
D2
P3
D3
Docente (Ndoc, Nome, Tel, Disc, Prereq)
apenas necessria 1 entidade.
A chave primria pode ser a chave primria de qualquer entidade
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
174
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento 1:1
Docente
CASO 2: Participao obrigatria de apenas uma entidade.
Todos os docentes tm de leccionar uma s disciplina.
Ndoc
Nome
Tel
Disc
Prereq
101
Afonso
12345
Amat2
Amat1
Inf1
Nenhum
1
Disciplina
Ndoc
Nome
Tel
Disc
Disc
Prereq
101
Afonso
12345
Amat2
Amat2
Amat1
Inf1
Nenhum
Docente (Ndoc, Nome, Tel, Disc)
Ensina
P1
P2
P3
D1
D2
D3
D4
Disciplina (Disc, Prereq)
Necessria 2 tabelas. Cada com a sua chave primria.
Chave primria Disc chave estrangeira na tabela Docente
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
175
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento 1:N
CASO 3
Ndoc
Nome
Tel
Disc
Prereq
Ndoc
101
Afonso
12345
Amat2
Amat1
101
125
Felismino 54321
PHP Av
PHP
101
Docente (Ndoc, Nome, Tel)
Disciplina (Disc, Prereq, Ndoc)
Necessria 2 tabelas.
Cada com a sua chave primria.
Chave primria do lado 1 (Ndoc) tem de ser usada como atributo
na entidade do lado N
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
176
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento 1:N
Docente
CASO 3: Participao obrigatria do lado N
Ensina
Os docentes podem leccionar vrias disciplinas
Cada disciplina tem de ser assegurada por um s docente
Disciplina
Ndoc
Nome
Tel
Disc
Prereq
101
Afonso
12345
Amat2
Amat1
101
Afonso
12345
PHP Av.
PHP
P1
125
Felismino 54321
P2
P3
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
D1
D2
D3
D4
177
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento 1:N
Docente
CASO 4: Participao no obrigatria nem do lado 1
Ensina
nem do lado N. Um docente pode estar dispensado
do servio. Uma disciplina pode no ter inscritos
suficientes para ser leccionada nesse ano.
Disciplina
Ndoc
Nome
Tel
Disc
Prereq
101
Afonso
12345
Amat2
Amat1
101
Afonso
12345
PHP Av.
PHP
P1
125
Felismino 54321
P2
CSS
HTML
P3
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
D1
D2
D3
D4
178
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento 1:N
CASO 4
Ndoc
Nome
Tel
101
Afonso
12345
125
Felismino 54321
Docente (Ndoc, Nome, Tel)
Disc
Prereq
Amat2
Amat1
PHP Av
PHP
CSS
HTML
Disciplina (Disc, Prereq)
Disc
Ndoc
Amat2
101
PHP Av
101
Ensina (Disc, Ndoc)
Necessrias 3 tabelas.
As tabelas principais, cada com a sua chave primria.
A tabela do relacionamento tem como atributos as chaves primrias
de cada uma das outras tabelas.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
179
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento N:N
Docente
CASO 5: Participao no obrigatria nem do lado 1
nem do lado N. Um docente pode ensinar vrias
Ensina
disciplinas. Uma disciplina pode ser ensinada por
vrios docentes
Disciplina
Ndoc
Nome
Tel
Disc
Prereq
101
Afonso
12345
Amat2
Amat1
101
Afonso
12345
PHP Av.
PHP
125
Felismino 54321
CSS
HTML
P2
P3
P4
A soluo igual ao CASO 4
Dvidas?
Pergunte. Agora!
P1
Qualquer coisa:
[email protected]
D1
D2
D3
D4
D5
180
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Relacionamento TERNRIO N:N:N
CASO 6: Nem tudo so sempre relaes binrias!
Seminrio
O modelo final seria:
Aluno (Id_aluno, ...)
Aluno
Inscrito
Orientador
Orientador (Id_orient, ...)
Seminario (Id_sem, ...)
Inscrio (Id_aluno,Id_orient,Id_sem)
Necessrias 4 tabelas.
As tabelas principais, cada com a sua chave primria.
A tabela do relacionamento tem como atributos as chaves primrias
de cada uma das outras tabelas.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
181
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
A normalizao o processo sistemtico de remover dados redundantes
de tabelas, como vista a melhorar armazenamento, eficincia,
integridade de dados, e escalabilidade.
No modelo relacional, existem mtodos para quantificar o quo
eficiente uma BD. Estes estados so chamados Forma Normais (FN)
Este processo de normalizao pelas vrias fases FN normalmente
envolve dividir uma tabela em mltiplas tabelas
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
182
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
BoyceCodd
1FN
2FN
mais Redundncia
menos Relaes
3FN
5FN
FN
Ponto
6FN
menos Redundncia
de
mais Relaes
Equilibrio
Edgar Codd, inicialmente definiu as 3 primeiras FNs
Agora h tambm a 4FN e a 5FN que so ainda mais trabalhadas mas
a 3FN considerada suficiene para a maioria das aplicaes.
Quando uma BD atinge a 3FN tambm esto na FN Boyce-Codd (BCFN)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
183
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
1FN
2FN
3FN
BC-FN
5FN
6FN
Uma relao diz-se na Primeira Forma Normal (1FN) quando:
- No contm atributos multivalor e no contm grupos repetitivos
Uma relao diz-se na Segunda Forma Normal (2FN) quando:
- Est na Primeira Forma Normal (1FN);
- Todos os atributos no chave dependem funcionalmente da
totalidade da chave.
Uma relao diz-se na Terceira Forma Normal (3FN) quando:
- Est na Segunda Forma Normal (2FN);
- Todos os atributos no chave no dependem funcionalmente
uns dos outros.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
184
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
1FN
2FN
3FN
BC-FN
5FN
6FN
O que so dependncias funcionais?
Dependncia Funcional: Existe uma dependncia funcional
X -> Y entre dois conjuntos de atributos X e Y, se uma
instncia de valores de X determina ou identifica univocamente
uma instncia de valores dos atributos de Y
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
185
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
1FN
NORMALIZAO
2FN
3FN
BC-FN
5FN
6FN
Consideremos esta tabela:
Ttulo
Autor1
Autor2
ISBN
Assunto
Pgs
DB System
Concepts
Abraham
Silberschatz
Henry F.
Korth
0072958863 MySQL, PCs 1168
McGraw-Hill
OS System
concepts
Abraham
Silberschatz
Henry F.
Korth
0471694665 Pcs
McGraw-Hill
944
Editor
Esta tabela no muito eficiente com o armazenamento, o design dela
no protege a integridade de dados e no tem uma boa escalabilidade.
2 violaes da 1FN!! Temos dois campos de autor. E o campo de Assunto
contm mais de um dado. Com mais de um dado num campo seria
muito difcil pesquisar todos os livros de um determinado assunto.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
186
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
A mesma tabela mas ... na PRIMEIRA FORMA NORMAL !
Ttulo
Autor
ISBN
DB System
Concepts
Abraham
Silberschatz
DB System
Concepts
Assunto
Pgs
Editor
0072958863 MySQL
1168
McGraw-Hill
Henry F.
Korth
0072958863 PCs
1168
McGraw-Hill
OS System
concepts
Abraham
Silberschatz
0471694665 Pcs
944
McGraw-Hill
OS System
concepts
Henry F.
Korth
0471694665 Pcs
944
McGraw-Hill
Temos agora 2 linhas para cada livro (para alm de) estarmos a
violar a 2FN. Uma soluo para o 1 problema separar as tabelas...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
187
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
As nossas tabelas separadas...
Ttulo
ISBN
Pgs
DB System
Concepts
0072958863 1168
OS System
concepts
0471694665 944
ID_autor
Pnome
Unome
Abraham
Silberschatz
Henry
F. Korth
Editor
ID_assunto Assunto
McGraw-Hill
MySQL
Pcs
McGraw-Hill
Cada tabela tem uma Primary Key, usadas para juntar tabelas quando
pedirmos os dados. Uma Primary Key tambm um index o que ajuda
a acelerar este processo. Agora temos de definir tabelas de relao!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
188
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
LivroAutor
ISBN
Tabelas de relaes... nada mais simples
LivroAssunto
Id_autor
ISBN
Id_assunto
0072958863 1
0072958863 1
0072958863 2
0072958863 2
0471694665 1
0471694665 2
0471694665 2
Enquanto a 1FN lida com redundncia de dados em filas a 2FN lida
com redundncia de dados em colunas. Como vimos antes, as FN so
progressivas. para atingir a 2FN precisamos de ter atingido a 1FN
o que j fizemos. Vamos ver a Tabela Livro para o exemplo da 2FN
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
189
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
Passagem para a 2FN
Livro
Editor
Editor
ID_editor
Editor
0072958863 1168
McGraw-Hill
0471694665 944
Ttulo
ISBN
DB System
Concepts
OS System
concepts
Pgs
E pronto ... j est na 2FN
Aqui temos uma relao 1:N entre tabelas Livro e Editor. Quando temos
relao 1:N, pomos a chave estrangeira na tabela Livro a apontar para
a chave primria da tabela Editor.
E para a 3FN? Todos os atributos no chave dependem funcionalmente
ou no uns dos outros?
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
190
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
NORMALIZAO
Passagem para a 3FN
Livro
Ttulo
ISBN
DB System
Concepts
0072958863 1168
OS System
concepts
0471694665 944
Editor
LivroEditor
Id_editor Editor
ISBN
0072958863 1
Pgs
McGraw-Hill
Id_editor
0471694665 1
E pronto ... j est na 3FN
Isto porque j estava na 2FN e todos os atributos no-chace da tabela
Livro no dependem funcionalmente uns dos outros. O modelo final:
Livro (ISBN, Ttulo, Pgs)
Editor (Id_editor, Editor)
Autor (Id_autor, Pnome, Unome)
Assunto (Id_assunto, Assunto)
LivroEditor (ISBN, Id_editor)
LivroAssunto (ISBN, Id_assunto)
LivroAutor (ISBN, Id_autor)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
191
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Como linguagem de definio de Dados
A SQL, enquanto Linguagem de Definio de Dados, disponibiliza
um conjunto de comandos para a criao (CREATE), alterao
(ALTER) e remoo (DROP) de tabelas e outras estruturas.
SQL
Comando CREATE DATABASE permite criar uma BD.
CREATE DATABASE nome_da_base_de_dados
Comando DROP DATABASE permite remover uma determinada BD,
SQL
apagando todas as tabelas e, consequentemente, todos os dados
Dvidas?
Pergunte. Agora!
DROP DATABASE nome_da_base_de_dados
Qualquer coisa:
[email protected]192
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Comando CREATE TABLE
O comando CREATE TABLE permite criar uma tabela.
CREATE TABLE nome_tabela(
Dvidas?
Pergunte. Agora!
SQL
Exemplo
a
SQL
Sintaxe Bsica
CREATE TABLE Professor(
id_prof
INT PRIMARY KEY,
tipo,
nome
VARCHAR(50),
...
...,
data_nasc
DATETIME,
colunan
tipo,
salario
FLOAT)
coluna1
tipo,
coluna2
Qualquer coisa:
[email protected]
193
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Colunas - Valores por defeito
Na criao de uma tabela por defeito as colunas podem assumir valores
nulos. possvel especificar se admite ou no atravs da clusula
NULL ou NOT NULL
tambm possvel associar um outro valor por defeito atravs da
SQL
clusula DEFAULT
Dvidas?
Pergunte. Agora!
CREATE TABLE Professor(
id_prof
INT NOT NULL,
nome
VARCHAR(50),
data_nasc
DATETIME NULL,
salario
FLOAT DEFAULT 1000 )
Qualquer coisa:
[email protected]
194
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Tipos de Dados Bsicos
XXX Os mais comuns
Tipos de Dados
Descrio
CHAR
Um nico caracter
CHAR(N)
String comprimento fixo (n>0)
VARCHAR(N)
String comprimento varivei (n>0)
INTEGER ou INT
Inteiro (com sinal)
SMALINT
Pequeno Inteiro
FLOAT
Nmero Real (virgula flutuante)
BOOL ou BOOLEAN
Booleano: True ou false
DATE
Data (DD-MM-AAAA)
TIME
Tempo (HH:MM:SS)
DATETIME ou TIMESTAMP
Tipo Datetime (os anteriores juntos)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
195
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Restries
So regras a que os valores de uma ou mais colunas devem obedecer.
A utilizao de restries a nica garantia que temos de que os dados
existentes nas colunas esto de acordo com as regras especificadas
no desenho da base de dados ( esta verificao feita no servidor SQL,
a aplicao que programarmos, deve fazer verificaes antes d
submeter dados a uma BD! ). Restries mais frequentes:
- NOT NULL : a restrio de uso mais generalizado, pois impede
a introduo de valores nulos na coluna.
- CHECK() - permite realizar a validao os dados introduzidos numa
coluna atravs da especificao de condies. So admitidos apenas
dados cujo resultado da avaliao da condio resulte em Verdadeiro.
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
196
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Restries (e vemos j tambm os operadores.)
Operadores a usar na restrio CHECK(). LGICOS: AND, OR, NOT
CREATE TABLE Professor(
Id_prof INT NOT NULL ,
SQL
RELACIONAIS: =, <, >, >=, <= ou != OUTROS: BETWEEN, IN, IS, LIKE
Nome VARCHAR(50) NOT NULL CHECK(Nome NOT LIKE %Feli%) ,
Idade INT NOT NULL CHECK(Idade BETWEEN 0 AND 150) ,
Sexo CHAR NOT NULL CHECK(Sexo IN (M, F)) ,
Salario FLOAT NOT NULL CHECK(Salario >= 0) ,
Data_Nasc DATE NOT NULL ,
Data_Admi DATE NOT NULL ,
CHECK(Data_Admi > Data_Nasc)
)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
197
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Restrio UNIQUE
CREATE TABLE Professor(
SQL
Permite indicar que os valores dessa coluna no se podem repetir.
Id_prof INT,
Nome VARCHAR(50) UNIQUE ,
Telefone VARCHAR(9),
BI INT UNIQUE
)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
198
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Restrio PRIMARY KEY
CREATE TABLE Professor(
SQL
utilizada para indicar qual a chave primria (se houver) da tabela
Id_prof INT PRIMARY KEY,
Nome VARCHAR(50) UNIQUE ,
Telefone VARCHAR(9),
BI INT UNIQUE
)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
199
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Restrio FOREIGN KEY
CREATE TABLE Professor(
SQL
utilizada para indicar qual as chaves estrangeiras da tabela
Id_prof INT,
Nome VARCHAR(50) NOT NULL ,
Telefone VARCHAR(9),
BI NUMERIC NOT NULL UNIQUE ,
Cod_Postal NUMERIC(4) REFERENCES Postal(Codigo) ,
Salario FLOAT(10,2) NOT NULL CHECK(Salario >= 0) ,
PRIMARY KEY(Id_prof) ,
FOREIGN KEY(BI) REFERENCES Seg_Social(BId)
)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
200
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: ALTER TABLE e DROP TABLE
ALTER TABLE nome_tabela ADD nome_coluna tipo_coluna
SQL
ALTER TABLE permite alterar a estrutura de uma tabela
ALTER TABLE nome_tabela MODIFY nome_coluna tipo_coluna
ALTER TABLE nome_tabela DROP nome_coluna
DROP TABLE permite remover uma tabela (toda a estrutura e valores
SQL
so apagados)
DROP TABLE nome_tabela
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
201
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: INSERT
A SQL enquanto Linguagem de Manipulao de Dados, disponibiliza
um conjunto de comandos que podem ser classificados em 2 grupos:
- Actualizao da BD (comandos INSERT, UPDATE e DELETE )
- Interrogao BD (comando SELECT )
SQL
O comando INSERT permite inserir novos registos numa tabela da BD.
INSERT INTO nome tabela VALUES(valor1, ...., valorn)
.
OU
.
INSERT INTO nometabela(coluna1, ..., colunan)
VALUES (valor1, ..., valorn)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
202
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: INSERT
SQL
INSERT INTO Professor(Nome, Telefone)
VALUES (Felismino Felisberto, 961122334)
Se queremos inserir valores em todas as colunas poderemos utilizar o
SQL
formato abreviado. A ordem das colunas deve ser a da tabela!
INSERT INTO Professor(nome) VALUES (Felismino Felisberto)
SQL
E um exemplo com datas...
INSERT INTO Professor(Nome, Telefone, Data_Nasc)
VALUES (Felismino Felisberto, 961122334, 1970-02-13)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
203
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: UPDATE
SQL
Permite alterar valores j existentes no campo de uma tabela
UPDATE nome_tabela
SET coluna1 = {expressao ou valor},
coluna2 = {expressao ou valor},
....,
colunan = {expressao ou valor}
[WHERE condio]
A clusula WHERE permite restringir o conjunto de registos que iro
ser afectados pelo comando. Se no for colocada as alteraes sero
realizadas em todos os registos da tabela
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
204
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: UPDATE
SQL
EXEMPLO:
UPDATE Professor
SET Salario = Salario * 100
SQL
OUTRO EXEMPLO:
UPDATE Professor
SET Salario = Salario * 100
WHERE Categoria = Professor Catedrtico
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
205
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT
SQL
Permite consultar uma base de dados relacional
SELECT coluna1, coluna2, ..., colunan, *
FROM tabela1, ...., tabelak
[WHERE condio]
[GROUP BY ...]
[ORDER BY ...]
Todos os exemplos seguintes sero baseados nas seguintes tabelas:
Aluno (Numero, Nome, Idade, Propina, Telefone, Cod_curso)
Curso (Cdigo, Designao)
Disciplina (Cod_disciplina, Nome_Disciplina)
Avaliao (Id_aval, Cod_disciplina, Nota)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
206
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: DELETE
SQL
Permite apagar conjuntos de linhas existentes numa nica tabela
DELETE FROM nome_tabela
[WHERE condio]
SQL
EXEMPLO:
DELETE FROM Professor
SQL
OUTRO EXEMPLO:
Dvidas?
Pergunte. Agora!
DELETE FROM Professor
WHERE Id_prof = 125
Qualquer coisa:
[email protected]
207
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT
SQL
Exemplo bsico de um SELECT
SELECT Designacao FROM Curso
SQL
Aqui podemos usar o asterisco (selecionar todas as colunas da tabela)
SELECT * FROM Curso
SQL
Podemos tambm, s querer selecionar algumas colunas da tabela
Dvidas?
Pergunte. Agora!
SELECT Numero, Nome, Cod_Curso FROM Aluno
Qualquer coisa:
[email protected]
208
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT com restries
J vimos operadores l atrs.. vamos ver alguns exemplos...
SQL
Operadores Relacionais:
SELECT *
FROM Aluno
SQL
WHERE Idade = 21
SELECT Numero, Nome, Propina
FROM Aluno
WHERE Idade >= 23
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
209
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT com restries
SQL
Operadores Lgicos: AND, OR, NOT
SELECT Numero, Nome, Idade
FROM Aluno
SQL
WHERE Idade >= 20 AND Idade <= 30
SELECT Numero, Nome, Idade
FROM Aluno
WHERE NOT (Idade < 20 OR Idade > 30)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
210
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT com restries
Operador LIKE
A comparao de strings com operadores relacionais (=, !=, etc) utiliza
sempre a totalidade da string. Para partes de strings utiliza-se o LIKE
Caracteres especiais de comparao:
% (percentagem) - Conjunto de zero ou mais caracteres
SQL
_ (underscore) - Um caractere qualquer
SELECT Numero, Nome, Idade
FROM Aluno
WHERE Nome LIKE P%
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
211
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT com restries
SQL
Operador LIKE... Outos exemplos:
SELECT Numero, Nome, Idade
FROM Aluno
SQL
WHERE Nome LIKE %ui%
SELECT Numero, Nome, Idade
FROM Aluno
WHERE Nome LIKE _ui%
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
212
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECT com restries
Operador COUNT e Operador AS
O COUNT efectua uma contagem de todos os elementos que se
enquadram na restrio. O AS faz com que a base de dados
SQL
devolva o valor da contagem num campo com o nome que quisermos.
SELECT COUNT(*) AS contagem
FROM Aluno
WHERE Idade = 23
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
213
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Ordenando os SELECTS
A ordenao realizada com a clusula ORDER BY. Esta clusula a
SQL
existir aparece sempre posicionada no final do comando SELECT:
SELECT coluna1, coluna2, ..., colunan, *
FROM tabela1, ...., tabelak
[WHERE condio]
[GROUP BY ...]
[ORDER BY coluna [ASC|DESC]]
ASC indica ordenao ascendente. DESC indica ordenao descendente
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
214
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Ordenando os SELECTS
SQL
Por defeito, a ordenao ascendente
SELECT *
SELECT *
FROM Aluno
FROM Aluno
ORDER BY Idade
ORDER BY Idade ASC
SQL
E outro exemplo:
SELECT Nome, Propina
FROM Aluno
WHERE Telefone IS NOT NULL
ORDER BY Propina DESC
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
215
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: Ordenando os SELECTS (mltiplas colunas)
Caso se indique que se pretende ordenar o resultado de um SELECT
por mais do que uma coluna, a ordenao feita pela primeira coluna,
SQL
SELECT *
SQL
e entre os valores iguais ordenada pela segunda coluna, etc etc etc...
FROM Aluno
ORDER BY Idade, Propina
Dvidas?
Pergunte. Agora!
SELECT *
FROM Aluno
ORDER BY Idade DESC , Propina
Qualquer coisa:
[email protected]
216
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECTS de dados em mltiplas tabelas
J vimos ao estudar a Normalizao em Modelo de Bases de Dados
que vamos ter informaes divididas por vrias tabelas.
SQL
Para seleccionar este tipo de dados poderiamos fazer, por ex, assim:
SELECT *
FROM Livro, Autor, LivroAutor
WHERE Livro.ISBN = LivroAutor.ISBN
AND Autor.ISBN = LivroAutor.ISBN
ORDER BY Livro.ISBN
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
217
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: SELECTS de dados em mltiplas tabelas
Tambm podemos atribuir nomes abreviados e escolhidos por ns
SQL
s tabelas para facilitar e escrevermos menos coisas!
SELECT titulo
FROM filmes F, actores A, filmesactores FA
WHERE F.id_filme = FA.id_filme
AND A.id_actor = FA.id_actor
AND A.nome = 'Clint Eastwood'
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
218
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
Considerando a seguinte BD:
1) Quais os docentes registados no
sistema? [informao completa]
2) Quantos equipamentos esto
registados no sistema?
3) Qual a distribuio de
equipamentos por docente? (Quantos)
4) Quantos equipamentos existem no edifcio com nome Engenharias I?
5) Quais os equipamentos possui o docente com o nome
Joo Antnio no edifcio Geocincias?
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
219
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
1) Quais os docentes registados no
sistema? [informao completa]
SELECT * FROM Docente
2) Quantos equipamentos esto
registados no sistema?
SELECT COUNT(*) FROM Equipamento AS contagem_equipamentos
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
220
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
3) Qual a distribuio de equips
por docente? (Quantos)
SELECT idDocente,
COUNT(*) FROM Equipamento E
AS numero_equips1,
Docente D
WHERE E.idDocente = D.idDocente
GROUP BY idDocente
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
221
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
4) Quantos equipamentos existem no edifcio com nome Engenharias I?
SELECT COUNT(*) AS num_equips2
FROM E, Docente D, Departamento X, EdificioDepartamento Y, Edificio Z
WHERE Z.nome = Engenharias I
AND Z.idEdificio = Y.idEdificio
AND Y.idDepartamento = X.idDepartamento
AND X.idDepartamento = D.idDepartamento
AND D.idDocente = E.idDocente
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
222
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
4) Quais os equipamentos possui o docente com o nome
Joo Antnio no edifcio Geocincias?
SELECT * FROM Equipamentos E, Docente D, Departamento X,
EdificioDepartamento Y, Edificio Z
WHERE D.nome = Joo Antnio
AND Z.nome = Geocincias
AND E.idDocente = D.idDocente
AND D.idDepartamento = X.idDepartamento
AND X.idDepartamento = Y.idDepartamento
AND Y.idEdificio = Z.idEdificio
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
223
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
Considerando a seguinte BD:
1) Quais os filmes registados no sistema? [informao completa]
2) Quais os filmes nomeados para scares em 2007?
3) Quantas categorias existem registadas no sistema?
4) Quantos filmes distintos ganharam
scares em 2007?
5) Qual o filme tipo Drama
que venceu na categoria de
Melhor Filme no ano
de 2003?
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
224
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
1) Quais os filmes registados no sistema? [informao completa]
SELECT * FROM Filme
2) Quais os filmes nomeados para scares em 2007?
SELECT * FROM Filme F, Nomeacao N
WHERE F.idFilme = N.idFilme
AND N.ano = 2007
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
225
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
3) Quantas categorias existem registadas no sistema?
SELECT COUNT(*) AS contador_categorias FROM Categoria
4) Quantos filmes distintos ganharam scares em 2007?
SELECT COUNT(DISTINCT titulo)
FROM Filme F, Nomeacao N
WHERE N.ano = 2007
AND N.idFilme = F.idFilme
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
226
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
SQL: EXERCCIOS
5) Qual o filme tipo Drama que venceu na categoria de Melhor
Filme no ano de 2003?
SELECT titulo FROM Filme F, Nomeacao N, Categoria C,
Tipo T, TipoFilme X
WHERE N.ano = 2003
AND T.tipo = Drama
AND C.nome = Melhor Filme
AND C.idCategoria = N.idCategoria
AND N.idFilme = F.idFilme
AND F.idFilme = X.idFilme AND X.idTipo = T.idTipo
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
227
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
O PHP COM MYSQL
Agora que j sabemos tudo sobre Modelos Conceptuais,
Modelos de Bases de Dados e sabemos como fazer queries
em SQL... Vamos ver como interligar o mySQL e o PHP
EMAIL
HTML
&
JS
Dvidas?
Pergunte. Agora!
PHP
Qualquer coisa:
[email protected]
SQL
228
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
O PHP e MYSQL
Dvidas?
Pergunte. Agora!
Vamos ligar o nosso servidor de mySQL
Qualquer coisa:
[email protected]
229
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
O PHP e MYSQL
Agora vamos ao browser ao endereo localhost/phpmyadmin
O phpmyadmin uma GUI (ferramenta visual) para auxiliar
em interaes com bases de dados em mySQL.
No PHPMYADMIN precisamos de criar um utilizador para uso
posterior. Este utilizador ter privilgios totais (s) BD(s) que
utilizarmos no nosso site.
Vejam como fao e faam nos vossos computadores...
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
230
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP e MYSQL: mysqli_connect e mysql_set_charset
Agora que criamos a nossa Base de Dados e o Utilizador ...
PHP
Vamos ter um ficheiro que estabelece a ligao entre PHP e mySQL
$dbhost = localhost;
liga.php
$dbuser = XXXXXXXX;
$dbpass = YYYYYYYYY;
$db = filmescesae;
$liga = mysqli_connect($dbhost,$dbuser,$dbpass,$db)
or die("Erro: " . mysqli_error($liga));
mysql_set_charset($liga,utf8);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
231
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP e MYSQL: mysqli_query e mysqli_close()
APENAS EXEMPLO
include(liga.php);
PHP
Agora o comando essencial de interao entre PHP e mySQL.
$query = CREATE TABLE pessoas(
id_pessoa INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(30),
idade INT,
PRIMARY KEY(id_pessoa));
$resultado = mysqli_query($liga, $query);
mysqli_close($link);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
232
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP e MYSQL: Ler dados de uma Base de Dados
APENAS EXEMPLO
include(liga.php);
PHP
Uma outra operao corriqueira em BDs ler os dados
$query = SELECT * FROM pessoas;
$resultado = mysqli_query($liga, $query) or
die(mysqli_error($liga));
while($linha = mysql_fetch_array( $resultado)){
echo $linha[nome] . tem $linha[idade]
}
mysqli_close($link);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
233
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP e MYSQL: Inserir dados
APENAS EXEMPLO
include(liga.php);
PHP
Usamos o mysqli_query para criar tabelas. Vamos inserir dados
$query = INSERT INTO pessoas(nome,idade)
VALUES(Afonso Gomes,31);
$resultado = mysqli_query($liga, $query) or
die(mysqli_error($liga));
if($resultado){ echo Dados inseridos com sucesso; }
mysqli_close($link);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
234
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP e MYSQL: EXERCICIO
Crie um ficheiro PHP que receba via $_GET as variveis nome e
PHP
idade e que as insira na nossa Base de Dados:
ex-inserts.php
include(liga.php);
[...?]
$query = INSERT INTO pessoas(nome,idade)
VALUES( [...?] , [...?] );
$resultado = mysqli_query($liga, $query);
if($resultado){ echo Dados inseridos com sucesso; }
mysqli_close($link);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
235
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP
PHP e MYSQL: EXERCICIO
ex-inserts.php
include(liga.php);
$nome = $_GET[nome];
$idade = $_GET[idade];
$query = INSERT INTO pessoas(nome,idade)
VALUES( $nome , $idade );
$executa = mysqli_query($liga, $query);
if($executa){ echo Dados inseridos com sucesso; }
mysqli_close($link);
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
236
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
PHP/MYSQL
Como puderam constatar, PHP e SQL um mundo grande, cheio
de coisas para explorar.
Aqui, como em outras reas, tem de reinar o sentimento de
nunca se sabe tudo e estarmos continuamente a aprender.
Comecem um projecto vosso, para gerir filmes, msicas, ficheiros,
etc. e ponham em prtica tcnicas que aprenderam e pratiquem
para no esquecer. Isto no como andar de bicicleta !! :-)
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
237
PROFISSIONAL EM WEBDESIGN
b PHP e mySQL
CENTRO DE SERVIOS E APOIO S EMPRESAS
Acabou!
Dvidas?
Pergunte. Agora!
Qualquer coisa:
[email protected]
238