• Nenhum resultado encontrado

Bases de Dados - Teórico/Práticas

N/A
N/A
Protected

Academic year: 2021

Share "Bases de Dados - Teórico/Práticas"

Copied!
14
0
0

Texto

(1)

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 — server

I 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.

(2)

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

(3)

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.

(4)

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 —

(5)

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.

(6)

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).

(7)

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.

(8)

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.php

I 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

(9)

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).

(10)

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.

(11)

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.

(12)

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 ’ ) ; . . .

(13)

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

<?php

s 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 ’ />” ; }

(14)

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−SR−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 ?

Referências

Documentos relacionados

The lagrangian particle tracking model was used to stu- dy the dispersion of particles released in different lagoon channels, the advection of particles released

ensino superior como um todo e para o curso específico; desenho do projeto: a identidade da educação a distância; equipe profissional multidisciplinar;comunicação/interatividade

Como a tendência, pela primazia das eleições majoritárias, seria de concentração de força em dois ou três partidos, e esse espaço já está ocupado por PT, PMDB e PSDB,

O CES é constituído por 54 itens, destinados a avaliar: (a) cinco tipos de crenças, a saber: (a1) Estatuto de Emprego - avalia até que ponto são favoráveis, as

A Tabela 6 identifica as categorias de CI mais empregadas nos estudos investigados. Percebe-se que as categorias empregadas referem-se a categorias que mesclam a

autoincriminação”, designadamente através da indicação de exemplos paradigmáticos. Sem prejuízo da relevância da matéria – traduzida, desde logo, no número e

Examinamos as demonstrações financeiras individuais da Klabin S/A (“Companhia”), que compreendem o balanço patrimonial em 31 de dezembro de 2016 e as respectivas demonstrações

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre