2018/10/29 (v595)
Bases de Dados - Te´
orico/Pr´
aticas
(2018/10/29 (v595))
Pedro Quaresma Departamento de Matem´atica
Universidade de Coimbra 2017/2018 1 / 55 2017/12/17 (v397)
MySQL — Instala¸c˜
ao
I Linux — LAMP I mysql-server — serverI mysql-client — command-line client
I mysql-workbench — GUI client
I php-mysql — MySQL module for PHP (≥ 7.0)
I + dependˆencias (Apache2, PHP, . . . )
I MS-Windows — WAMP
I http://www.easyphp.org/ — EasyPHP
OU (exclusivo)
I http://www.wampserver.com/en/ — WampServer
I Para as todas as plataformas — MySQL
I http://dev.mysql.com/downloads/
I MySQL Community Server
I MySQL Workbench I MySQL Utilities https: //en.wikipedia.org/wiki/List_of_Apache-MySQL-PHP_packages 2 / 55 2017/12/17 (v397)
MySQL — Servidor/Grupos de Trabalho
Cada grupo tem uma conta emrena4.mat.uc.pt, bdN, e tem
permiss˜oes para criar bases de dados cujos nomes tˆem de (obrigatoriamente) ter como prefixo o nome do grupo bdN....
/home/users% mysql -u bd01 -p -h rena4.mat.uc.pt Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5337
Server version: 5.0.45 SUSE MySQL RPM
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer. mysql> show databases; +---+ | Database | +---+ | bd01Proj1 | +---+
1 row in set (0.00 sec) mysql>
3 / 55
2017/12/17 (v397)
MySQL — Meta-comandos
mysql — interpretador de linha de comando ($ man mysql)
$ mysql -p -u <nome utilizador> -h <nome de servidor>
a op¸c˜ao -p ´e depassword.
I use/connect <nome bd> — estabelece a liga¸c˜ao a uma base de dados.
I show databases/tables — mostra as bases de dados/tabelas dispon´ıveis.
I describe <nome tabela> — mostra a estrutura interna de uma tabela.
I source <nome de ficheiro> — carrega um ficheiro e (tenta) executa os comandos SQL nele contidos.
I quit — sai do interpretador.
Um comando ´util ´e o comando mysqldump o qual permite fazer c´opias de seguran¸ca das bases de dados, por exemplo:
$ mysqldump -p --databases bd01projecto1 > bd01Projecto1.sql
cria o ficheirobd01Projecto1.sqlno qual est˜ao todos os comandos SQL necess´arios para (re)criar a base de dadosbd01Projecto1.
2017/12/17 (v397)
Linguagem de Defini¸c˜
ao de Dados (DDL)
Linguagem de Defini¸c˜ao de Dados (DDL) — Linguagem para especificar a informa¸c˜ao acerca de cada rela¸c˜ao, incluindo:
I O esquema de cada rela¸c˜ao.
I O dom´ınio de valores associados com cada atributo. I Restri¸c˜oes de integridade
I O conjunto de ´ındices a manter para cada rela¸c˜ao. I Informa¸c˜ao de seguran¸ca e autoriza¸c˜ao para cada rela¸c˜ao. I As estruturas de armazenamento f´ısico em disco de cada
rela¸c˜ao.
5 / 55
2017/12/17 (v397)
Cria¸c˜
ao de Bases Dados/Tabelas (Rela¸c˜
oes)
I Instru¸c˜ao CREATE DATABASE <nome da bd>, cria uma base de dados com o nome escolhido.
I Instru¸c˜ao:
CREATE TABLE <nome da tabela> ( <campo 1 tipo 1>,
...,
<campo n tipo n>) cria a tabela (rela¸c˜ao). Exemplo:
CREATE TABLE B r a n c h
( branchName c h a r ( 1 5 ) NOT NULL, b r a n c h C i t y c h a r ( 3 0 ) ,
a s s e t s i n t e g e r )
6 / 55
2017/12/17 (v397)
Tipos em SQL
I char(n). Cadeia de caracteres de comprimento fixo n. I varchar(n). Cadeia de caracteres de comprimento vari´avel,
com o m´aximo n especificado pelo utilizador.
I int. inteiro (um subconjunto finito dos inteiros, dependente da m´aquina).
I smallint. Inteiro pequeno (um subconjunto do tipo int). I numeric(p,d). N´umero de v´ırgula fixa, com precis˜ao de p
d´ıgitos e com n casas decimais.
I real, double precision. N´umeros de v´ırgula flutuante, com precis˜ao dependente da m´aquina.
I float(n). N´umero de v´ırgula flutuante, com um m´ınimo de precis˜ao de n d´ıgitos.
I Os valores nulos s˜ao permitidos em todos os tipos de dados. A declara¸c˜ao de um atributo como not null pro´ıbe os valores nulos para esse atributo.
2017/12/17 (v397)
Tipos em SQL
I date. datas, contendo um ano com (4 d´ıgitos), mˆes e dia
I E.g. date 2001-7-27
I time. Tempo (di´ario), em horas, minutos e segundos.
I E.g. time 09:00:30 time 09:00:30.75 I timestamp: data mais hora
I E.g. timestamp 2001-7-27 09:00:30.75 I Interval: per´ıodo de tempo
I E.g. Interval 1 day
I A subtrac¸c˜ao de dois valores de date/time/timestamp devolve um intervalo
I Os valores de intervalos podem ser adicionados a valores de
date/time/timestamp
I Pode-se extrair campos do valor date/time/timestamp
2017/12/17 (v397)
Altera¸c˜
ao de Tabelas (Rela¸c˜
oes)
Instru¸c˜ao ALTER TABLE — a instru¸c˜ao alter table ´e utilizada para modificar o esquema, ou as restri¸c˜oes sobre rela¸c˜oes j´a existente.
I Para adicionar novos atributos:
ALTER TABLE r ADD A D
Todos os tuplos existentes ficam com null no novo atributo. I Para eliminar um atributo:
ALTER TABLE r DROP A em que A ´e o nome de um atributo na rela¸c˜ao r. I Para modificar um atributo:
ALTER TABLE r MODIFY A D
em que A ´e o nome do atributo a adicionar `a rela¸c˜ao r e D o dom´ınio de A.
9 / 55
2017/12/17 (v397)
Destrui¸c˜
ao de Bases Dados/Tabelas (Rela¸c˜
oes)
I Instru¸c˜ao DROP DATABASE <nome da bd>, apaga a base de dados com o nome escolhido.
I Instru¸c˜ao DROP TABLE <nome da tabela>, apaga a tabela com o nome escolhido (da base de dados corrente).
A especifica¸c˜ao completa destes comandos em MySQL pode ser obtida no manual de referˆencia on-line
(http://dev.mysql.com/doc/).
10 / 55
2018/10/29 (v595)
Bases de Dados e P´
aginas da Rede — Porquˆ
e?
Bases de Dados Informa¸c˜ao:
I Banca: todas as transac¸c˜oes e movimentos; I Companhias a´ereas: reservas, hor´arios; I Universidades: inscri¸c˜oes, notas; I Vendas: clientes, produtos, compras; I Sistema de gest˜ao de artigos numa
conferˆencia/revista; I lojas on-line;
I ...
P´aginas da Rede Dissemina¸c˜ao de Informa¸c˜ao: I Acesso Global (geogr´afico); I Acesso Generalizado:
I rede — larga cobertura a n´ıvel mundial;
I navegadores — total.
I Interface uniforme e f´acil de usar/programar.
2018/10/29 (v595)
Bases de Dados e P´
aginas da Rede — Como?
Linguagem de Programa¸c˜ao
I Liga¸c˜ao `a base de dados:
I −→ SQL;
I ←− estruturas de dados de transferˆencia.
I Liga¸c˜ao `a P´agina de Rede:
I −→ escrita de ficheiros HTML;
I ←− formul´arios HTML + estruturas de dados de transferˆencia.
2018/10/29 (v595)
Bases de Dados e P´
aginas da Rede — Como?
Apache servidor de p´aginas capaz de processar o HTML e o PHP (entre outras).
HTML (Hypertext Meta-Language) linguagem para a constru¸c˜ao de p´aginas da rede.
PHP linguagem de programa¸c˜ao gen´erica embutida em ficheiros HTML e capaz de comunicar com SGBDs. MySQL um SGBD capaz de comunicar com v´arias linguagens
de programa¸c˜ao (PHP, . . . ).
I Solu¸c˜ao poss´ıvel em: Linux; MacOS; MS-Windows; . . . I Solu¸c˜ao servidor, isto ´e, n˜ao necessita de nenhuma
funcionalidade especial nos navegadores dosclientes.
13 / 55
2018/10/29 (v595)
Apache
O programa Apache ´e o servidor de p´aginas Web.
I Responde aos pedidos dos clientes.
I Trata das quest˜oes de seguran¸ca inerentes a um servi¸co
p´ublico.
I Tem como clientes os Navegadores com os quais comunica.
I Interpreta (se configurado para tal) a linguagem PHP, assim como outras linguagens externas.
14 / 55
2018/10/29 (v595)
Apache — Conven¸c˜
oes
I Num sistema Linux/Unix cada utilizador pode criar uma p´agina. Por omiss˜ao o direct´orio a usar deve-se designar por
public html:
I ~nomeUtilizador/public html/index.html ← Sistema de ficheiros Unix.
I http://nomeDoDominio/~nomeUtilizador/index.html ←
URL
I Por omiss˜ao o ficheiro inicial designa-se porindex.html
I ~nomeUtilizador/public html/index.html← Sistema de ficheiros Unix.
I http://nomeDoDominio/~nomeUtilizador/ ← URL
I Para que num ficheiro contendo c´odigo PHP este seja interpretado de forma correcta, a extens˜ao do ficheiro tem de serphp.
2018/10/29 (v595)
HTML — HyperText Markup Language
Uma colec¸c˜ao demeta-marcas(markup tags) usadas para
definir as v´arias componentes de um texto da rede.
I HTML5 Tutorial— http://www.w3schools.com/html/
I Getting started with HTML Dave Raggett (2005) —
https://www.w3.org/MarkUp/Guide/ I Formul´arios I —
https://www.w3.org/TR/html401/interact/forms.html I Formul´arios II —
2018/10/29 (v595)
HTML, (muito) Breve Introdu¸c˜
ao
O HTML (HyperText Markup Language) ´e uma meta-linguagem com capacidade de referencia¸c˜ao. Isto ´e, ´e uma linguagem que descreve uma outra linguagem (a linguagem dos textos da rede) e que ´e capaz de incluir, num dado texto, referˆencias a outros textos.
I Cabe¸calho (head) - cont´em dados gerais sobre o texto que
se segue.
I Corpo (body) - cont´em a descri¸c˜ao do texto atrav´es de
uma s´erie de comandos que lidam com as v´arias estruturas de um texto.
I O espa¸camento entre palavras ´e definido de forma dinˆamica. Um espa¸co no texto fonte, vale tanto como vinte espa¸cos, o resultado final ´e o mesmo.
I N˜ao tem a no¸c˜ao de linha, ou melhor de quebra de linha. As linhas podem ter uma largura vari´avel.
I N˜ao tem a no¸c˜ao de p´agina de texto. O comprimento dos textos ´e, em teoria, infinito.
17 / 55 2018/10/29 (v595)
HTML — Um exemplo
<h t m l> <head> <TITLE>Um e x e m p l o s i m p l e s de um t e x t o em HTML</TITLE> </ head> <body> <H1>HTML &e a c u t e ; s i m p l e s de A p r e n d e r</H1> <P> Exemplo de um p a r&a a c u t e ; g r a f o em HTML. Como podem v e r tem a marca ” t a g ” , ”P” ! </P><P>
Todos ( q u a s e t o d o s ) o s comandos HTML tem uma marca i n i c i a l e uma marca f i n a l , s e n d o que e s s a s&o a c u t e ; d i f e r e da i n i c i a l
p e l o p r e f i x o ” / ” . </P> </ body> </ h t m l> 18 / 55 2018/10/29 (v595)
HTML, (muito) Breve Introdu¸c˜
ao
I Como numa linguagem de programa¸c˜aonormal o uso da
indenta¸c˜ao ´e opcional.
I A utiliza¸c˜ao de editores especializados permiteesqueceros
pormenores da linguagem (n˜ao podem ser usados processadores de texto).
Geany, Emacs, ....
I O HTML ´e uma linguagem sem a no¸c˜ao de estado (stateless), isto ´e n˜ao permite, entre outras, a
comunica¸c˜ao entre textos atrav´es de parˆametros.
I A comunica¸c˜ao entre texto ´e feita atrav´es do mecanismos de formul´arios
2018/10/29 (v595)
HTML, Marcas
HTML Marca o in´ıcio (e o fim) do texto HTML. Informa o navegador que o texto cont´em c´odigo HTML (a extens˜ao .html tem o mesmo efeito).
HEAD Define o cabe¸calho - informa¸c˜ao gen´erica sobre o documento.
TITLE Cont´em o t´ıtuloexteriordo documento, isto ´e
identifica o texto no contexto global (´e uma das informa¸c˜oes que o googleprocura).
BODY Define o corpo do documento, isto ´e, o documento que vai ser vis´ıvel atrav´es do navegador. ´E aqui que se pode definir o texto atrav´es de um conjunto de marcas para as v´arias estruturas em que um texto ´e constitu´ıdo.
2018/10/29 (v595)
HTML, Marcas (continua¸c˜
ao)
Headings Cabe¸calhos, o HTML tem seis n´ıveis de cabe¸calhos: <Hx>, com x = 1, 2, . . . , 6.
Par´agrafos Dado que o HTML n˜ao tem a no¸c˜ao de linha (nem de espa¸camento fixo), sempre que se quer come¸car um novo par´agrafo ´e necess´ario usar a marca <P>. Listas O HTML suporta: listas n˜ao ordenadas (numeradas);
listas ordenadas; e listas de defini¸c˜oes.
I Listas N˜ao Ordenadas: Marca de in´ıcio/fim de lista n˜ao ordenada <UL>; marca de in´ıcio/fim de um elemento (item) da lista <LI>.
I Listas Ordenadas: Marca de in´ıcio/fim de lista ordenada <OL>; marca de in´ıcio/fim de um elemento (item) da lista
<LI>.
I Listas de Defini¸c˜oes: Marca de in´ıcio/fim de lista de
defini¸c˜oes <DL>; marca de in´ıcio/fim do t´ıtulo para o elemento a definir <DT>; marca de in´ıcio/fim da defini¸c˜ao <DD>;
21 / 55
2018/10/29 (v595)
HTML, Marcas: Tabelas
A marca <TABLE> delimita o espa¸co de constru¸c˜ao de uma tabela, isto ´e, um texto formatado em linhas, em que cada linha est´a dividida em colunas. Dentro desse espa¸co temos acesso `as seguintes marcas:
Linhas cada linha da tabela ´e definida atrav´es da marca <TR>.
Cabe¸calhos (das colunas) podemos definir uma linha de cabe¸calhos (em geral a linha de topo) usando a marca <TH>, uma por coluna.
Colunas dentro de cada linha podemos definir as colunas atrav´es da marca <TD>.
22 / 55
2018/10/29 (v595)
HTML, Marcas (continua¸c˜
ao)
Texto pre-formatado <PRE> sec¸c˜ao de texto em que os espa¸cos e as mudan¸cas de linha s˜ao significativas e em que o tipo de letra usado ´e de largura fixa. ´Optimo para incorporar descri¸c˜oes de programas escritos numa dada linguagem de programa¸c˜ao.
Mudan¸cas de linha pode-se for¸car a mudan¸ca de linha utilizando a marca <BR/>. Note-se que neste caso n˜ao se est´a perante um par de marcas, s´o existe a marca descrita. Linhas Horizontais pode-se introduzir uma linha horizontal (a
separar duas sec¸c˜oes de texto), atrav´es da marca <HR/>. Esta ´e tamb´em uma marca isolada.
2018/10/29 (v595)
HTML, Atributos
(± desactualizado, ver estilos em HTML5)
Muitas das marcas no HTML podem ter a sua ac¸c˜ao modificada atrav´es da utiliza¸c˜ao de atributos.
Por exemplo:
I <P ALIGN="center"> permite definir um par´agrafo centrado.
I <TABLE border="1">, define uma tabela com uma bordadura de tipo 1 (espessura m´ınima).
2018/10/29 (v595)
HTML, Formul´
arios
Sendo que o HTML ´e uma linguagem sem a no¸c˜ao de
estado. . . como ´e que ´e poss´ıvel comunicar entre p´aginas, e entre uma p´agina e um programa?
A resposta ´e dada pelasForms.
<FORM ACTION="url" METHOD="POST"> ... </FORM>
Os formul´arios em HTML podem ser de dois tipos (Method=...): GET os dados s˜ao passados atrav´es do URL.
POST os dados s˜ao passados atrav´es da constru¸c˜ao de uma p´agina pr´opria para o efeito.
Temos ent˜ao a marca <Form> a marcar o in´ıcio/fim de um formul´ario. Neste caso a especifica¸c˜ao dos atributos ´e essencial.
25 / 55
2018/10/29 (v595)
HTML, Formul´
arios
Atributos da marcaForm
ACTION define o URLdo programa que ´e suposto
processar a informa¸c˜ao recolhida pelo formul´ario. METHOD GET, ou POST, define a forma como os
valores s˜ao passados.
Qual dos m´etodos a utilizar vai depender da
aplica¸c˜ao pretendida, em geral o primeiro reserva-se para quando a quantidade de informa¸c˜ao a passar ´e pequena e/ou p´ublica, ficando o outro m´etodo reservado para os outros casos.
No ˆambito dos formul´arios temos acesso `as seguintes marcas: INPUT um elemento simples (uma s´o linha de texto). SELECT a escolha de um elemento entre v´arias op¸c˜oes. TEXTAREA um elemento multi-linhas.
26 / 55
2018/10/29 (v595)
HTML, Formul´
arios, INPUT
<i n p u t t y p e =’ t e x t ’ name=’ nomeVar ’ s i z e = ’ 80 ’ m a x l e n g t h = ’ 80 ’> Os atributos desta marca s˜ao:
TYPE text; password; checkbox; radio; submit; reset. NAME define (a exemplo de uma vari´avel) um identificador
para o elemento que se est´a a especificar.
VALUE pode ser usado para se definir o valor do elemento. CHECKED especifica se um elemento do tipo checkbox ou
radio est´a activado, por omiss˜ao.
SIZE tamanho f´ısico (em caracteres) do campo de entrada tal como ele vai ser formatado.
MAXLENGTH tamanho m´aximo (em caracteres) do elemento de entrada.
2018/10/29 (v595)
HTML, Formul´
arios, SELECT
<SELECT NAME="lista-de-op¸c~oes"> <OPTION> Primeira op¸c~ao</OPTION> ...
<OPTION> op¸c~ao N</OPTION> </SELECT>
Os atributos desta marca s˜ao:
NAME define (a exemplo de uma vari´avel) um identificador para o elemento que se est´a a especificar.
SIZE n´umero de elementos vis´ıveis da lista de op¸c˜oes, para uma dada posi¸c˜ao da barra de corrimento.
MULTIPLE se presente pode-se escolher v´arios elementos Os atributos da marcaOPTION s˜ao:
SELECTED especifica que a op¸c˜ao em causa ´e seleccionada por omiss˜ao.
2018/10/29 (v595)
HTML, Formul´
arios, TEXTAREA
<TEXTAREA NAME = ” nomeVar ” ROWS=4 COLS=40>
E s t e &e a c u t e ; o c o n t e&u a c u t e ; do p o r o m i s s& a t i l d e ; o </TEXTAREA>
Os atributos desta marca s˜ao:
NAME define (a exemplo de uma vari´avel) um identificador para o elemento que se est´a a especificar.
ROWS o n´umero de linhas da janela de entrada. COLS o n´umero de colunas (caracteres) da janela de
entrada. 29 / 55 2018/10/29 (v595)
PHP — Bibliografia
I Manual do PHP (on-line) http://php.net/manual/pt_BR/index.phpI Luke Welling & Laura Thomson, PHP and MySQL Web Development (Developer’s Library), 5th Edition,
Addison-Wesley Professional, 2016. ISBN-13: 978-0321833891 (new PHP 7 coverage)
. . . PHP(≥ 7.0)
30 / 55
2018/10/29 (v595)
PHP
Linguagem de programa¸c˜ao gen´erica embutida em ficheiros HTML. I Um ficheiro de extens˜ao php pode conter: HTML; marcas
PHP; c´odigo PHP (entre um par de marcas PHP);
I O Apache (ou outro programa que fa¸ca a gest˜ao do servi¸co) tem de estar configurado para interpretar o c´odigo PHP. I Os ficheiros que contˆem c´odigo PHP tˆem de ter a extens˜ao
php
Um exemplo de programa (exemplo.php). <?php
echo ”<p>Ol&a a c u t e ; mundo</p>” ; ?>
O PHP ´e uma das mais populares linguagens para constru¸c˜ao de p´aginas dinˆamicas numa perspectiva de uma solu¸c˜ao servidor (todo o processamento ´e feito no servidor).
O PHP providˆencia uma muito f´acil liga¸c˜ao a bases de dados.
2018/10/29 (v595)
PHP — Introdu¸c˜
ao
A sintaxe, do PHP ´e semelhante `a linguagem C (assim como as potencialidades).
I Vari´aveis
I sem declara¸c˜ao expl´ıcita, uma dada instru¸c˜ao de atribui¸c˜ao cria a vari´avel, de um dado tipo, com um dado valor;
I o valor, assim como o tipo de uma vari´avel pode ser mudado por uma outra atribui¸c˜ao posterior.
I identificam-se pelo car´acter $ inicial, por exemplo: $nome
I Tipos
I Inteiros;
I Reais;
I Sequˆencias de caracteres;
I Booleanas;
I Tabelas;
A linguagem ´e case sensitive, ou seja mai´usculas e min´usculas
2018/10/29 (v595)
PHP — ˆ
Ambito das Vari´
aveis
O PHP n˜ao tem mecanismos (expl´ıcitos) de comunica¸c˜ao entre ficheiros, como tal o ˆambito de uma vari´avel est´a sempre ligado ao ficheiro aonde foi definida.
Entre ficheiros (sess˜oes Apache):
I Vari´aveis Super Globais – sempre vis´ıveis.
Num dado ficheiro:
I Constantes – sempre vis´ıveis.
I Vari´aveis Globais – em todo o ficheiro excepto dentro das fun¸c˜oes.
I Vari´aveis declaradas dentro de uma fun¸c˜ao como est´aticas, referem-se `as vari´aveis com o mesmo nome, mas mantˆem o valor entre chamadas sucessivas.
I Vari´aveis declaradas dentro de uma fun¸c˜ao s˜ao locais a essa fun¸c˜ao.
33 / 55
2018/10/29 (v595)
PHP
Algumas vari´aveis Super Globais
I $ SERVER - tabela contendo as vari´aveis de ambiente do servidor;
I $ SESSION - tabela contendo as vari´aveis de sess˜ao;
I $ GET - tabela contendo as vari´aveis de um formul´ario HTML em modo get;
I $ POST - tabela contendo as vari´aveis de um formul´ario HTML em modo post;
I Os operadores s˜ao os usuais da linguagem C
I As precedˆencia dos operadores s˜ao tamb´em as usuais; I Os coment´arios s˜ao tamb´em os usuais.
34 / 55 2018/10/29 (v595)
PHP — Estruturas de Controlo
Estruturas de Controlo I composi¸c˜ao sequencial; I atribui¸c˜ao. I condicionais: I if I if else I elseif I switch I Ciclos: I while I for I for each I do ...while I Fun¸c˜oes. 2018/10/29 (v595)PHP — Programa¸c˜
ao Modular
Programa¸c˜ao modular - O PHP tem uma dupla personalidade: programa¸c˜ao imperativa cl´assica; programa¸c˜ao orientada aos objectos.
Nestas breves notas vou tratar s´o da primeira aproxima¸c˜ao. Fun¸c˜oes a sintaxe e semˆantica da declara¸c˜ao de fun¸c˜oes ´e
similar `a da linguagem C; function
nome da funcao($arg1,$arg2,...,$argN); Comunica¸c˜ao entre fun¸c˜oes a chamada de uma fun¸c˜ao ´e tamb´em
idˆentica `a da linguagem C;
nome da funcao(val1,val2,...,valN); Al´em dos argumentos a comunica¸c˜ao pode tamb´em ser feita atrav´es da utiliza¸c˜ao de vari´aveis globais. Comunica¸c˜ao entre m´odulos por m´odulos entenda-se ficheiros.
Esta ´e f´acil de responder: n˜ao ´e poss´ıvel (a menos das vari´aveis super-globais).
2018/10/29 (v595)
PHP — Comunica¸c˜
ao Entre Ficheiros
Comunica¸c˜ao entre ficheiros: como foi dito anteriormente n˜ao h´a mecanismos de comunica¸c˜ao entre ficheiros, isto dado que o protocolo HTML n˜ao tem a no¸c˜ao de estado.
Solu¸c˜oes?
I Formul´arios (POST ou GET).
I Sess˜oes (com as respectivas vari´aveis de sess˜ao).
I Ficheiros auxiliares: ´e poss´ıvel ler e escrever ficheiros
37 / 55
2018/10/29 (v595)
PHP & HTML
A entradas e sa´ıdas na linguagem PHP s˜ao sempre feitas atrav´es da linguagem HTML:
Sa´ıdas Os comandos usuais de visualiza¸c˜ao de uma linguagem de programa¸c˜ao est˜ao presentes no PHP (sintaxe similar ao C), no entanto elas tˆem de ser pensadas como tendo um passo interm´edio que ´e o HTML PHP HTML <p>Olá Mundo</p> Olá Mundo ecrã (Navegador) C ecrã Olá Mundo
printf(’Olá Mundo’); printf(’<p>Olá Mundo</p>’);
38 / 55
2018/10/29 (v595)
PHP & HTML
Entradas a leitura de valores ´e feita somente atrav´es dos formul´arios HTML
I especifica¸c˜ao do ficheiro PHP que vai processar os dados do formul´ario (no formul´ario HTML): <form action=’processa.php’ method=’post’> I Especifica¸c˜ao dos nomes dos campos que v˜ao
receber os valores do formul´ario (no formul´ario HTML):
<input type=’text’ name=’nomedocampo’> I aleiturados valores no PHP ´e feita atrav´es
da matriz associativa $ POST (ou $ GET) (no ficheiro PHP):
$nomeVariavel = $ POST[’nomedocampo’];
2018/10/29 (v595)
MySQL
Referˆencias — MySQL, p´aginas oficiais.
I http://www.mysql.com/ — P´agina geral
I http://dev.mysql.com/doc/ — MySQL Documentation
I http://dev.mysql.com/doc/refman/5.7/en/ — Manual
de Referˆencia.
MySQL Workbench — ferramenta gr´aficas de
administra¸c˜ao/utiliza¸c˜ao.
I http://dev.mysql.com/downloads/tools/workbench/
Alguns dos comandos mais ´uteis na linha de comando: I use — seleccionar uma base de dados;
I show databases/tables — mostrar as bases de dados/tabelas acess´ıveis;
I describe <nome da tabela> — mostra a informa¸c˜ao respeitante aos campos de uma dada tabela.
2018/10/29 (v595)
MySQL
Uma base de dados de exemplo:
Avioes matricula nome modelo Marcas modelo lugares autonomia Pilotos licencaPilotagem nome Voos nVoo partida destino data hora matricula licencaPilotagem 41 / 55 2018/10/29 (v595)
PHP & MySQL
A liga¸c˜ao entre o PHP e o MySQL ´e feita atrav´es de um conjunto de fun¸c˜oes pr´opria do PHP.
I Liga¸c˜ao ao Servidor MySQL fun¸c˜ao mysqli connect, argumentos: nomes do servidor, utilizador e senha de acesso.
@ $ligacao = mysqli connect($servidor,$utilizador,$senha,$basedados);
if (mysqli errno()) { // verifica a liga¸c~ao ao servidor
echo "<p>Erro: liga¸c~ao aos servidor n~ao poss´ıvel</p>"; exit;
}
42 / 55
2018/10/29 (v595)
PHP & MySQL
I Comandos SQL: coloca-se a pesquisa que se quer efectuar numa vari´avel do tipostring, e ap´os isso usa-se a fun¸c˜ao
mysqli query, tendo como argumentos os comandos SQL e a liga¸c˜ao.
I Obter elementos
$sql = "SELECT correio electronico,utilizador,senha FROM pessoa"; $resultado = mysqli query($ligacao,$sql);
I Inserir elementos
$sql = "INSERT INTO pessoa (correio electronico,utilizador,senha) VALUES (’[email protected]’,’Ana’,’xpto’)";
$resultado = mysqli query($ligacao,$sql);
I Obten¸c˜ao dos Resultados: os resultados s˜ao obtidos atrav´es de v´arias fun¸c˜oes, entre elas temos mysqli fetch assoc que permite recolher os resultados obtidos numa tabela
associativa;
$linha = mysqli fetch assoc($resultado); $utilizador = $linha[’utilizador’]; $senha = $linha[’senha’];
2017/09/11 (v345)
Exemplo Pr´
atico 1
Dada a base de dados bdXProj2 (com x = 01, 02, . . .) construa:
I formul´arios de entrada de valores para as v´arias tabelas.
2017/09/11 (v345)
Exemplo Pr´
atico — resolu¸c˜
ao
1. Apache — conven¸c˜oes — cria¸c˜ao da p´agina pessoal (Linux): 1.1 criar o direct´orio public html
1.2 colocar as permiss˜oes correctamente nesse direct´orio:
I o direct´orio deve estar acess´ıvel para leitura para todos;
I o caminho at´e ao direct´orio tamb´em deve estar acess´ıvel (para leitura) para todos.
I todos os ficheiros no direct´orio public html devem ser acess´ıveis para leitura para todos.
1.3 criar o ficheiro index.html, aporta de entradapara a p´agina. Por
exemplo:
<HTML> <HEAD>
<TITLE>P r o j e c t o 2 − Grupo N</TITLE> </HEAD> <BODY> <H2>P r o j e c t o 2 − Grupo N</H2> <UL> <L I> <A HREF=” t r a b a l h o 2 . h t m l ”> T r a b a l h o 2 de B a s e s de Dados </A> </ L I> </UL> </BODY> </HTML> 45 / 55 2017/09/11 (v345)
HTML & PHP
No ˆambito deste exemplo (de Base de Dados) os ficheiros HTML ser˜ao o mais simples poss´ıvel.
Ficheiro de entrada do Exeplo, exemplo.html contendo uma lista n˜ao numerada referenciando os dois pedidos:
I um formul´ario de entrada de valores para a tabela pessoa. I uma p´agina aonde se visualize o conte´udo da tabela pessoa. Por exemplo:
<BODY>
<H2>Exemplo de B a s e s de Dados</H2> <UL>
<L I>
<A HREF=” v i s u a l i z a r . php ”>V i s u a l i z e o c o n t e&u a c u t e ; do da t a b e l a </A>
</ L I> <L I>
<A HREF=” i n s e r i r . h t m l ”>I n t r o d u z i r n o v o s v a l o r e s na t a b e l a </A> </ L I> </UL> </BODY> 46 / 55 2017/09/11 (v345)
HTML & PHP & MySQL
A liga¸c˜ao com a Base de Dados (MySQL) ´e feita atrav´es do PHP. 1. Fazer a liga¸c˜ao `a Bases de Dados. Como este ´e uma tarefa
que ter´a de ser repetida de todas as vezes que se queira obter/colocar informa¸c˜ao na base de dados, o melhor ser´a criar um ficheiro PHP separado, s´o para essa tarefa, ligacao.php.
<?php
$ u t i l i z a d o r B D = $ SESSION [ ’ u t i l i z a d o r B D ’ ] ; $senhaBD = $ SESSION [ ’ senhaBD ’ ] ;
$ s e r v i d o r = $ SESSION [ ’ s e r v i d o r ’ ] ; $nomeBD = ” b d 0 1 e x e m p l o ” ;
@ $ l i g a c a o = m y s q l i c o n n e c t ( $ s e r v i d o r , $ u t i l i z a d o r , $ s e n h a , $ b a s e d a d o s ) ; i f ( m y s q l i e r r n o ( ) ) { // v e r i f i c a a l i g a c a o ao s e r v i d o r
echo ”<p>E r r o : l i g a & c c e d i l ;& a t i l d e ; o ao SGBD</p>” ; e x i t ; // t e r m i n a de i m e d i a t o
} ?>
Notar a utiliza¸c˜ao das vari´aveis de sess˜ao.
2017/09/11 (v345)
Liga¸c˜
ao com a Base de Dados
Por quest˜oes de seguran¸ca a senha de liga¸c˜ao `a base de dados (entre outros) n˜ao deve ficar exposta num ficheiro com acesso p´ublico.
Solu¸c˜ao:
1. Colocar a informa¸c˜ao sens´ıvel num ficheiro `a parte (.dados.php); 2. colocar esse ficheiro numa zona exterior ao direct´orio (p´ublico)
public html, e protegˆe-lo (˜/DadosBD);
3. Ir buscar esses valores atrav´es de vari´aveis de sess˜ao. <?php
$ SESSION [ ’ u t i l i z a d o r B D ’ ]= ”bdXX” ; $ SESSION [ ’ senhaBD ’ ]= ” senhaBDXX ” ; $ SESSION [ ’ s e r v i d o r ’ ]= ” r e n a 4 . mat . uc . p t ” ; ?>
Depois ´e s´o uma quest˜ao de utilizar sess˜oes e, sempre que se queira efectuar a liga¸c˜ao `a base de dados, carregar (require) os ficheiros apropriados:
<?php s e s s i o n \ s t a r t ( ) ; . . . // Faz a l i g a c a o a b a s e de d a d o s r e q u i r e o n c e ( ’ . . / . . / DadosBD / . d a d o s . php ’ ) ; r e q u i r e ( ’ l i g a . php ’ ) ; . . .
2017/09/11 (v345)
HTML & PHP & MySQL
Para o caso da visualiza¸c˜ao dos conte´udos da base de dados. 2. Enviar as pesquisas e receber os resultados (visualizar.php):
2.1 fazer a liga¸c˜ao;
2.2 construir o comando (query) SQL; 2.3 enviar o comando ao SGBD;
2.4 receber os resultados;
2.5 processar/vizualizar os resultados.
Para o caso da introdu¸c˜ao de novos dados na base de dados.
2. Construir um Formul´ario HTML (inserir.html):
2.1 especificar qual ´e o ficheiro PHP que vai processar os dados; 2.2 especificar os campos que v˜ao receber os dados.
3. Enviar as pesquisas e receber os resultados (processaInserir.php):
3.1 fazer a liga¸c˜ao;
3.2 receber os dados do formul´ario; 3.3 construir o comando (query) SQL; 3.4 enviar o comando ao SGBD;
3.5 mostrar os resultados da consulta.
49 / 55
2017/09/11 (v345)
HTML & PHP & MySQL — visualizar.php
<?phps e s s i o n s t a r t ( ) ;
echo ”<body><H2>Exemplo de B a s e s de Dados − V i s u a l i z a r Dados</H2>” ; // Faz a l i g a c a o a B a s e s de Dados r e q u i r e ( ” . . / . . / DadosBD / . d a d o s . php ” ) ; r e q u i r e ( ” l i g a c a o . php ” ) ; // C o n s t r o i o comando SQL $ s q l = ”SELECT c o r r e i o e l e c t r o n i c o , u t i l i z a d o r , s e n h a FROM p e s s o a ” ; // E n v i a o comando ao SGBD $ r e s u l t a d o = m y s q l i q u e r y ( $ l i g a c a o , $ s q l ) ; // r e s u l t a d o num v e c t o r a s s o c i a t i v o echo ”<CENTER>\n ” ;
echo ”<TABLE BORDER=’2’>\n ” ;
echo ”<TR><TH>U t i l i z a d o r </TH><TH>Senha</TH></TR>\n ” ;
// Os i d e n t i f i c a d o r e s d o s campos da m a t r i z s a o o s nomes d o s campos da t a b e l a da bd w h i l e ( $ l i n h a = m y s q l i f e t c h a s s o c ( $ r e s u l t a d o ) ) { $ u t i l i z a d o r = $ l i n h a [ ’ u t i l i z a d o r ’ ] ; $ s e n h a = $ l i n h a [ ’ s e n h a ’ ] ; $ c o r r e i o E = $ l i n h a [ ’ c o r r e i o e l e c t r o n i c o ’ ] ; echo ”<TR>\n ” ; echo ”<TD>$ u t i l i z a d o r </TD><TD>$ s e n h a </TD><TD>$ c o r r e i o E </TD>\n ” ; echo ”</TR>\n ” ; } echo ”</TABLE>\n ” ; echo ”</CENTER>\n ” ; ?> 50 / 55 2017/09/11 (v345)
HTML & PHP & MySQL — inserir.html
<h2>Exemplo de B a s e s de Dados − I n t r o d u z i r Dados</ h2> <form a c t i o n =’ p r o c e s s a I n s e r i r . php ’ method =’ p o s t ’> <c e n t e r> <t a b l e w i d t h = ’90\% ’ b g c o l o r =’ s k y b l u e ’ b o r d e r = ’2 ’> <t r> <t h w i d t h = ’100\% ’ c o l s p a n = ’4 ’ a l i g n =’ c e n t e r ’> <b>I n t r o d u z i r Dados na T a b e l a ” p e s s o a ”{}</ b> </ t h> </ t r> <t r> <t d a l i g n =’ c e n t e r ’><b>U t i l i z a d o r</ b></ t d> <t d a l i g n =’ c e n t e r ’><i n p u t t y p e =’ t e x t ’ name=’ U t i l i z a d o r ’ s i z e = ’ 15 ’ m a x l e n g t h = ’ 15 ’> </ t d> <t d a l i g n =’ c e n t e r ’><b>Senha</ b></ t d><t d a l i g n =’ l e f t ’><i n p u t t y p e =’ t e x t ’ name=’ Senha ’ s i z e = ’ 40 ’ m a x l e n g t h = ’ 40 ’></ t d> </ t r> <t r> <t d a l i g n =’ c e n t e r ’><b>C o r r e i o E l e c t r o n i c o</ b></ t d> <t d a l i g n =’ c e n t e r ’ c o l s p a n = ’3 ’> <i n p u t t y p e =’ t e x t ’ name=’ C o r r e i o E ’ s i z e = ’ 1 0 0 ’ m a x l e n g t h = ’ 1 0 0 ’> </ t d> </ t r> <t r> <t d w i d t h =100\% c o l s p a n = ’4 ’ a l i g n =’ c e n t e r ’> <i n p u t t y p e =’ s u b m i t ’ v a l u e =’ I n s e r e a Nova I n f o r m a c a o ’> </ t d> </ t r> </ t a b l e> </ c e n t e r> </ form> 2017/09/11 (v345)
HTML & PHP & MySQL — processaInserir.php
<?php s e s s i o n \ s t a r t ( ) ; // Faz a l i g a c a o a B a s e s de Dados r e q u i r e ( ” . . / . . / DadosBD / . d a d o s . php ” ) ; r e q u i r e ( ” l i g a c a o . php ” ) ; // Obtem o s v a l o r e s do f o r m u l a r i o ( v a r i a v e l POST) $ c o r r e i o E = $ POST [ ’ C o r r e i o E ’ ] ; $ u t i l i z a d o r = $ POST [ ’ U t i l i z a d o r ’ ] ; $ s e n h a = $ POST [ ’ Senha ’ ] ; // C o n s t r o i o comando SQL $ s q l = ”INSERT INTO p e s s o a ( c o r r e i o E l e c t r o n i c o , u t i l i z a d o r , s e n h a ) VALUES ( ’ $ c o r r e i o E ’ , ’ $ u t i l i z a d o r ’ , ’ $ s e n h a ’ ) ” ; // E n v i a o comando ao SGBD $ r e s u l t a d o = m y s q l i q u e r y ( $ l i g a c a o , $ s q l ) ; i f ( $ r e s u l t a d o ) { echo ” I n t r o d u c a o de n o v o s d a d o s f e i t a com s u c e s s o . \ n ” ;echo ”<meta h t t p−e q u i v =’ r e f r e s h ’ c o n t e n t = ’ 2 ; u r l =e x e m p l o . h t m l ’ />” ; }
e l s e {
echo ” E r r o − a i n t r o d u c a o de n o v o s d a d o s f a l h o u \n ” ;
echo ”{}<meta h t t p−e q u i v =’ r e f r e s h ’ c o n t e n t = ’ 2 ; u r l =e x e m p l o . h t m l ’ />” ; }
2016/12/05 (v236)
Opera¸c˜
ao de Divis˜
ao
I Propriedade
I Seja q = r ÷ s
I Ent˜ao q ´e a maior rela¸c˜ao satisfazendo q × s ⊆ r . I Defini¸c˜ao em termos de opera¸c˜oes b´asicas da ´algebra rel.
Sejam r (R) e s(S ) rela¸c˜oes, com S ⊂ R
r ÷ s = ΠR−S(r ) − ΠR−S((ΠR−S(r ) × s) − ΠR−S,S(r )) Porquˆe?
I ΠR−S(r ) × s d´a os elementos de r com todos os valores de S .
I ΠR−S,S(r ) construi uma vers˜ao de r com os atributos da
express˜ao anterior.
I ΠR−S(ΠR−S(r ) × s) − ΠR−S,S(r )) d´a os tuplos t em ΠR−S(r )
tal que para algum tuplo u ∈ s, tu 6∈ r .
53 / 55
2016/12/05 (v236)
MySQL — Exemplos de Consultas
Uma aproxima¸c˜ao `as consultas do tipo ÷ (do manual do MySQL, 13.2.8.6)
I Que tipos de lojas est˜ao presentes em uma, ou mais, cidades? SELECT DISTINCT t i p o s L o j a s
FROM L o j a s
WHERE EXISTS ( SELECT ∗
FROM C i d a d e s L o j a s
WHERE C i d a d e s L o j a s . t i p o L o j a = L o j a s . t i p o s L o j a s ) ; I Que tipos de lojas est˜ao presentes em nenhuma cidade?
SELECT DISTINCT t i p o L o j a FROM L o j a s
WHERE NOT EXISTS ( SELECT ∗
FROM C i d a d e s L o j a s
WHERE C i d a d e s L o j a s . t i p o L o j a s = L o j a s . t i p o L o j a s ) ;
54 / 55
2016/12/05 (v236)
MySQL — Exemplos de Consultas
I Que tipos de lojas est˜ao presentes em todas as cidades? SELECT DISTINCT s t o r e T y p e
FROM S t o r e s WHERE NOT EXISTS
( SELECT ∗ FROM C i t i e s WHERE NOT EXISTS
( SELECT ∗ FROM C i t i e s S t o r e s
WHERE C i t i e s S t o r e s . c i t y = C i t i e s . c i t y
AND C i t i e s S t o r e s . s t o r e T y p e = S t o r e s . s t o r e T y p e ) ) ;
Este ´ultimo exame ´e uma consultaNOT EXISTSduplamente embutida. Isto ´e, cont´em uma cl´ausulaNOT EXISTSdentro de uma outra cl´ausula do mesmo tipo.
Formalmente, responde `a quest˜aoexiste uma cidade com uma loja que n˜ao est´a em Lojas?. ´E mais f´acil de ver que uma consultaNOT EXISTSduplamente embutida responde `a quest˜ao´e x verdade para todo o y ?