apresentação este módulo permitirá aos alunos desenvolveram aplicações web com acesso a bases...

Post on 16-Apr-2015

107 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Apresentação

Este módulo permitirá aos alunos

desenvolveram aplicações web com

acesso a bases de dados,

disponibilizando a informação de uma

forma dinâmica e versátil.

1

Objectivos

Com este módulo pretende-se que o aluno seja capaz de:

compreender e enumerar as necessidades de se desenvolverem aplicações com recurso a bases de dados remotas

utilizar a linguagem de script na ligação remota a bases de dados

criar sites dinâmicos e versáteis recorrendo a uma linguagem de script e a bases de dados

2

Conteúdos

Estrutura da linguagem de script Manipulação de dados com a linguagem de

script Ligação a bases de dados Expressões SQL; Interacção dos resultados das consultas com o

código da linguagem de script Fases de desenvolvimento de uma aplicação

com recurso a bases de dados

3

CONDIÇÕES NECESSÁRIAS PARA ACESSO A UMA BASE DE DADOS REMOTA (VIA WEB)

4

Pedido2

Lado do cliente

Páginas Web interactivas

Páginas Web interactivas

Resposta

Cliente WWWCliente WWW

Web ServerWeb Server

(Apache; IIS; etc.)

(Apache; IIS; etc.)

Interpretador de PHP Sistema de Gestão

de Bases de Dados: MySQL;

Oracle; etc.

1

Lado do Servidor

3

456

Acesso a uma Base de Dados

Resposta ao pedido

Bases de Dados

Fases do processo de consulta a uma base de dados via web

5

A figura anterior mostra-nos uma representação

esquemática do funcionamento de uma

consulta a uma base de dados via web com

scripts PHP. Esse processo passa pelas

seguintes fases:

Fases do processo de consulta a uma base de dados via web

6

1. O web browser ou cliente web (por exemplo, o lnternet Explorer) envia um pedido, através de um formulário, para acesso a uma base de dados ligada a um servidor web.

2. O servidor web recebe a comunicação dos dados do formulário (pelo método Post ou Get), deteta a indicação de um script PHP (no atributo action do formulário) e chama esse script para que ele processe os dados.

Fases do processo de consulta a uma base de dados via web

7

3. O interpretador de PHP faz a interpretação do script mencionado e deteta um pedido de ligação a um sistema de bases de dados; se a ligação for efetivada, envia-lhe um comando SQL a executar na base de dados em causa.

4. O servidor de bases de dados (por exemplo, MySQL) recebe o comando SQL, executa-o na base de dados visada e, se houver resultados a devolver, esses resultados são enviados ao interpretador de scripts PHP.

Fases do processo de consulta a uma base de dados via web

8

5. O interpretador de scripts PHP recebe os resultados enviados pelo servidor da base de dados e prepara esses resultados para os entregar ao servidor web.

6. O servidor web recebe os dados do interpretador de PHP, insere-os num documento HTML ou página web e envia essa informação ao cliente (web browser) que a solicitou.

Fases do processo de consulta a uma base de dados via web

9

Vejamos agora os passos ou etapas que um

programador deste tipo de serviços web deve

ter em conta ao escrever scripts PHP para

interagir com bases de dados:

Fases do processo de consulta a uma base de dados via web

10

1. Captar os dados enviados com o formulário do utilizador e verificar se esses dados satisfazem os requisitos necessários.

2. Estabelecer uma ligação com o sistema de bases de dados que estiver a ser utilizado.

3. Elaborar e aplicar um determinado comando SQL.4. Preparar os dados obtidos do servidor da base de

dados para os passar ao servidor web num formato compatível com HTML e uma boa apresentação para o cliente que os vai receber.

Preparar uma base de dados no MySQL para acesso com PHP

11

Neste módulo, vamos criar uma aplicação para

exemplificar como se acede a uma base de dados no

MySQL através de scripts em PHP.

Para isso vamos começar por recordar como se cria

uma base de dados no MySQL.

Preparar uma base de dados no MySQL para acesso com PHP

12

As figuras seguintes mostram as operações principais

para criarmos uma base de dados chamada Pessoal

com uma tabela chamada Contactos.

Nos exercícios que vamos apresentar nas próximas

páginas, vamos usar apenas esta tabela.

Preparar uma base de dados no MySQL para acesso com PHP

13

A instrução Create Database Pessoal dá início à criação

da base de dados com o nome Pessoal. E a instrução

Use Pessoal permite-nos trabalhar com essa base de

dados.

Preparar uma base de dados no MySQL para acesso com PHP

14

A seguinte instrução cria a tabela Contactos (com os

campos Nome, Telef e Email):

Create Table Contactos

(Nome varchar(20) Primary Key,

Telef Varchar(9),

Email Varchar(30) );

Preparar uma base de dados no MySQL para acesso com PHP

15

O campo Nome está definido como chave primária

para evitar dois nomes iguais.

Preparar uma base de dados no MySQL para acesso com PHP

16

A seguinte instrução insere, na tabela Contactos, um conjunto de três registos:

Insert Contactos Values

(‘Abel’ , ‘912345678’, ‘abel@mail.pt’) ,

(‘Bela’, ‘923456789’ , ‘bela@hotmail.com’) ,

(‘Dina’, ‘960123456’, ‘dina@gmail.com’);

Preparar uma base de dados no MySQL para acesso com PHP

17

18

Procurar.phpProcurar.php

Listar.phpListar.php

Inserir.php

Inserir.phpInserir.php

Remover.html

Remover.phpRemover.php

Página de entrada

Nome:

ListarInserir

Remover

Procurar

Esquema global de uma aplicação para interagir com uma base de dados através dos scripts PHP.

Esquema global de uma aplicação para interagir com uma base de dados através dos scripts PHP.

19

Legenda:

Form action

Link HTML

Procurar.phpProcurar.php

Remover.html

Script PHP

Formulários HTML

DESENVOLVIMENTO DE UMA APLICAÇÃO PARA ACESSO REMOTO A UMA BASE DE DADOS

20

Neste capítulo, vamos desenvolver uma aplicação para

acesso remoto (via web) à base de dados criada no

diapositivo anterior. Para isso, vamos criar algumas

páginas HTML com formulários e escrever alguns

scripts em PHP

DESENVOLVIMENTO DE UMA APLICAÇÃO PARA ACESSO REMOTO A UMA BASE DE DADOS

21

A figura anterior apresenta um esquema global da

aplicação. Como página de entrada desta aplicação,

vamos criar um documento HTML muito simples

com o nome Entrada.html.

DESENVOLVIMENTO DE UMA APLICAÇÃO PARA ACESSO REMOTO A UMA BASE DE DADOS

22

Essa página contém um formulário com um campo (input, do

tipo “text”) para a introdução de um nome a procurar na

base de dados e um botão de comando que aciona essa

procura, através de um script chamado procurar.php

Além disso, conforme se pode ver na figura seguinte, à direita,

a página de entrada vai conter também três links para

podermos aceder a outras secções da nossa aplicação:

DESENVOLVIMENTO DE UMA APLICAÇÃO PARA ACESSO REMOTO A UMA BASE DE DADOS

23

listar.php — é um link para um script que faz listar todos os

Contactos na base de dados,

inserir.html — é um link para um formulário onde podemos

inserir novos dados; este formulário aciona o script

inserir.php que insere os dados na tabela Contactos;

remover.html — é um link para um formulário que pede um

nome a remover; este formulário aciona o script

remover.php que remove efetivamente o contato.

Página de entrada para a aplicação24

25

Na figura anterior, temos o documento entrada.html que

vai funcionar como página de entrada na nossa

aplicação. Nesta página, temos um formulário com o

seguinte cabeçalho:

Página de entrada para a aplicação

26

Estamos a prever enviar dados pelo método post que

deverão ser tratados por um script PHP com o nome

procurar.php.

Este ficheiro (procurar.php) estará dentro de uma pasta

com o nome /aplic/ situada na pasta /htdocs/ de

localhost — o Apache Server. Daí o endereço que

aparece em action:

Página de entrada para a aplicação

27

Os restantes ficheiros da aplicação serão todos colocados

dentro dessa pasta /htdocs/aplic para uma melhor

identificação e utilização.

Dentro do formulário, temos o seguinte texto e elemento

input do tipo text para a introdução do nome a enviar

para procurar na base de dados:

Página de entrada para a aplicação

28

Ainda dentro do formulário, temos um botão do tipo

submit com a palavra “ Procurar”:

Página de entrada para a aplicação

29

Para além destes elementos, temos ainda três links para as

outras secções da aplicação:

Este link passa-nos para um outro script da nossa aplicação

— listar.php — que apresenta todos os registos da tabela

Contactos.

Página de entrada para a aplicação

30

Este link envia-nos para a página com o nome inserir.html

— a partir da qual poderemos inserir novos dados na

tabela Contactos.

Página de entrada para a aplicação

31

Este último link remete-nos para a página com o nome

remover.html — onde podere- mos indicar um nome a

remover dos nossos contactos.

Página de entrada para a aplicação

32

Um script para Listar os dados da tabela Contactos

33

Na figura anterior, temos o script listar.php que faz listar os

dados da tabela Contactos da nossa base de dados

Pessoal (criada anteriormente).

Recordemos que este script é chamado a partir da página

de entrada da nossa aplicação (criada na página

anterior), através do link:

Um script para Listar os dados da tabela Contactos

34

o script começa com a seguinte instrução:

Esta instrução procura efetuar uma conexão ou ligação ao

servidor MySQL, através do servidor Apache. Vejamos os

seus elementos:

Um script para Listar os dados da tabela Contactos

35

$conexao — é uma variável criada por nós para captar o resultado da ligação ao servidor; o seu conteúdo permite-nos saber se a ligação se efetuou ou não, além disso, vai ser usada num outro comando para ligar à base de dados;

mysql_connect — é um comando PHP para estabelecer uma ligação ao MySQL.

Um script para Listar os dados da tabela Contactos

36

o comando mysql_connect requer os seguintes três

parâmetros:

Um script para Listar os dados da tabela Contactos

37

‘adress’ — indica o endereço do servidor; neste caso, como estamos a utilizar o servidor local (no próprio computador), o endereço que indicámos foi ‘127.0.0.1’; também poderia ser ‘localhost’ (servidor local);‘user’ — é um nome de utilizador do MySQL autorizado a entrar no sistema; neste exemplo, indicámos o superutilizador ‘root’; mas, numa situação real, é preferível criar um utilizador no MySQL apenas com direitos sobre a base de dados que se vai utilizar;‘password’ — refere-se à palavra-passe do utilizador mencionado no ponto anterior.

Um script para Listar os dados da tabela Contactos

38

Segue-se uma estrutura de decisão com if:

Um script para Listar os dados da tabela Contactos

39

A variável $conexao terá um valor positivo se a ligação teve

sucesso. A expressão !$conexao corresponde a uma

falha na ligação. E, se for esse o caso, é escrita a

mensagem “Falha na ligação” e uma indicação do

servidor acerca do erro ocorrido com mysql_error().

Além disso o script termina por ação do comando PHP

exit.

Um script para Listar os dados da tabela Contactos

40

Se a ligação se efetuou com êxito, passamos às instruções

abrangidas pela cláusula else. Aí, recomeçamos com a

seguinte instrução:

Um script para Listar os dados da tabela Contactos

41

Esta instrução usa o comando mysql_select_db para

indicar (selecionar) a base de dados a que nós queremos

ligar. Neste caso, a nossa base de dados chama-se

Pessoal. Também é necessário indicar a variável com que

efectuámos a ligação ($conexao).

Um script para Listar os dados da tabela Contactos

42

Segue-se uma instrução que faz uma consulta à tabela

Contactos:

Um script para Listar os dados da tabela Contactos

43

Neste caso, também é usada uma variável para captar o

resultado — a variável $resultado.

A função mysql_query() destina-se (como o nome sugere)

a fazer consultas ao MySQL. Dentro dos parênteses

curvos deve ser indicada uma string com uma instrução

em SQL. Neste caso, foi indicada a seguinte consulta:

Um script para Listar os dados da tabela Contactos

44

ou seja, pretendemos ver todos os registos existentes na

tabela Contactos.

Segue-se um ciclo while que se destina a percorrer os

registos captados, na instrução anterior, pela variável

$resultado:

Um script para Listar os dados da tabela Contactos

45

No cabeçalho do ciclo foi criada a variável $registo que

recebe cada registo captado na variável $resultado

através da função:

Um script para Listar os dados da tabela Contactos

46

A função mysql_fetch_array() permite aceder a cada um

dos conjuntos de dados do array associativo que é a

variável $resultado. Assim, a variável $registo passa a

ser também um array associativo que, neste caso,

contém os dados de um registo da tabela Contactos.

Enquanto houver registos no array $resultado, eles são

captados pela variável $registo.

Um script para Listar os dados da tabela Contactos

47

Em seguida, fazemos escrever cada campo do registo

captado; por exemplo, a instrução:

—faz escrever o campo Nome de um registo captado da

tabela Contactos.

Um script para Listar os dados da tabela Contactos

48

Repare-se que é necessário incluir o nome dos campos (da

tabela Contactos) dentro de apóstrofes e dentro de

parênteses retos; os nomes dos campos funcionam como

chaves para aceder aos dados que estão realmente dentro

desses campos.

Ainda dentro do ciclo, a instrução:

apenas acrescenta uma quebra <br> de linha.

Um script para Listar os dados da tabela Contactos

49

Por fim, a instrução:

faz com que a ligação seja fechada.

Um script para Listar os dados da tabela Contactos

50

Repare-se também como é possível terminar o código do

script e acrescentar elementos HTML para serem

apresentados na página. Neste caso, acrescentámos um

link para podermos voltar à página de entrada:

Um script para Listar os dados da tabela Contactos

51

Formulário e script para inserir novos dados

52

Na figura anterior, temos o documento inserir.html que

contém um formulário destinado a receber novos dados

para inserir na nossa tabela de Contactos.

Esta secção da nossa aplicação é chamada a partir da

página de entrada através do link:

Formulário e script para inserir novos dados

53

Na página inserir.html, temos um formulário com o seguinte

cabeçalho:

Estamos a prever enviar dados pelo método post — que

deverão ser tratados por um script PHP com o nome

inserir.php.

Formulário e script para inserir novos dados

54

Estes ficheiros (inserir.html e inserir.php) serão guardados

na pasta com o nome /aplic/ situada na directoria

/htdocs/ do servidor local.

Dentro do formulário, temos os seguintes elementos input

do tipo text para a introdução dos dados de novos

contactos:

Formulário e script para inserir novos dados

55

Ainda dentro do formulário, temos um botão do tipo

submit (“lnserir contato”):

Formulário e script para inserir novos dados

56

Para além destes elementos, temos também um link para

voltar à página de entrada:

Formulário e script para inserir novos dados

57

Na figura anterior, à direita, podemos ver o formulário

aberto no lnternet Explorer, já com alguns dados

introduzidos para exemplificação.

Agora, vamos supor que utilizamos o botão “lnserir

contacto” (que é um botão do tipo “submit”) para enviar

os dados para o script inserir.php e, daí para a nossa

base de dados.

Formulário e script para inserir novos dados

58

O código do ficheiro inserir.php é apresentado na figura

seguinte. Nessa mesma figura, à direita, podemos ver o

lnternet Explorer com o resultado do envio dos dados

inseridos na figura anterior.

Formulário e script para inserir novos dados

59

Formulário e script para inserir novos dados

60

Este script começa com as seguintes instruções:

Com estas instruções são criadas três variáveis ($nome;

$telef e $email) para captar os dados enviados pelo

formulário anterior.

Formulário e script para inserir novos dados

61

A instrução seguinte começa com if (!$nome) e avalia se o

campo $nome está vazio; se for esse o caso, é

apresentada uma mensagem e o script termina a

execução com o comando exit.

Portanto, só quando não se verifica aquela situação é que

as operações continuam.

Formulário e script para inserir novos dados

62

Os dados recebidos através das variáveis $nome, $telef e

$email são escritos na janela do browser apenas para se

ter uma indicação que eles foram recebidos no

interpretador PHP.

Em seguida, temos a já conhecida ligação ao servidor com:

Formulário e script para inserir novos dados

63

Se não houver problemas com aquela ligação, é

selecionada da base de dados “Pessoal”:

Segue-se uma instrução que cria a variável $insere para

receber o comando SQL com que vamos efetuar a

inserção na tabela Contactos:

Formulário e script para inserir novos dados

64

Repare-se que os nomes das variáveis são incluídos dentro

de apóstrofes, aspas e pontos. A inserção só é feita com

a instrução seguinte:

Formulário e script para inserir novos dados

65

O que efetua a inserção é mysql_query().

Esta é a já conhecida função PHP que executa queries no

MySQL. Neste caso, o comando SQL vai dentro da variável

$insere.

Se o resultado da operação anterior for positivo, a variável

$resultado tem um valor igual a 1 e isso permite-nos saber

se podemos informar que os dados foram (ou não)

inseridos na nossa base de dados.

Formulário e script para inserir novos dados

66

Formulário e script para remover dados

67

Na figura anterior, temos o documento com o nome

remover.html, contendo um formulário que pede um

nome, para eliminar o correspondente registo na tabela

Contactos.

Esta secção da nossa aplicação é chamada a partir da

página de entrada, através do link:

Formulário e script para remover dados

68

À semelhança dos anteriores, o formulário desta página tem

o seguinte cabeçalho:

Neste caso, será chamado o script PHP com o nome

remover.php.

Formulário e script para remover dados

69

Tal como nos casos anteriores, estes ficheiros

(remover.html e remover.php) serão guardados na

pasta /aplic/ na diretoria /htdocs/.

No formulário, temos um elemento input do tipo text para

a introdução do nome a remover:

Formulário e script para remover dados

70

Ainda dentro do formulário, temos um botão do tipo

submit com a palavra”Remover”:

Formulário e script para remover dados

71

Na figura anterior, à direita, podemos ver o formulário

aberto no lnternet Explorer, com um nome já

introduzido para exemplificação.

O código do ficheiro remover.php é apresentado na figura

seguinte. Nessa mesma figura, à direita, podemos ver o

lnternet Explorer com o resultado da execução do script.

Este script começa com a seguinte instrução:

Formulário e script para remover dados

72

Como já vimos, esta instrução cria uma variável ($nome) para

captar o dado enviado pelo formulário anterior.

A estrutura if que se segue avalia se o campo nome está vazio

e, se for o caso, pede para voltar atrás e termina o script

com exit.

Se, efetivamente, foi recebido um nome a remover, o script

continua com as instruções seguintes, começando por

escrever na janela do browser o nome recebido:

Formulário e script para remover dados

73

Segue-se a conhecida instrução com que se faz a ligação ao

servidor:

Formulário e script para remover dados

74

Formulário e script para remover dados

75

Se não houver problemas com aquela ligação, é

selecionada da base de dados “Pessoal”:

Em seguida, vamos controlar o número de registos antes e

depois da operação de remoção. Para isso, começamos

com a instrução:

Formulário e script para remover dados

76

— que define a consulta; seguindo-se a instrução:

Formulário e script para remover dados

77

A função predefinida mysql_num_rows() devolve o

número de linhas (rows) encontra- das numa consulta

(neste caso, na variável $resultado). Assim, a variável

$nr_antes conterá o número de registos na tabela

Contactos, antes das operações que se seguem. Essas

operações começam com:

Formulário e script para remover dados

78

Esta instrução cria a variável $remove que recebe a string

com o comando SQL.

Nota: Repare-se como a variável $nome é incluída na string

do comando SQL. Temos de incluir o nome da variável

dentro de apóstrofes, aspas e pontos.

Formulário e script para remover dados

79

A instrução que se segue:

utiliza a função do PHP mysql_query() com a referida

variável $remove para concretizar o comando SQL

(Delete) na base de dados.

Formulário e script para remover dados

80

As duas instruções que se seguem aplicam de novo o comando SQL

“select * from Contactos” para determinar o número de registos

existentes na tabela Contactos, após a operação de remoção.

Agora, a variável $nr_depois conterá o número de registos depois da

operação de remoção. Se não ocorreu nenhuma remoção, a

diferença entre $nr_antes e $nr_depois será 0 (zero). Se ocorreu

alguma remoção essa diferença será 1. Assim, a última instrução

do script

Formulário e script para remover dados

81

dá-nos a indicação se foi removido algum registo ou não.

Formulário e script para remover dados

82

Um script para procurar um nome na tabela Contactos

83

Na figura anterior, é apresentado o documento entrada.html

e o seu formulário, com o seguinte cabeçalho:

Um script para procurar um nome na tabela Contactos

84

Ainda na figura anterior, à direita, podemos ver o formulário

com o campo Nome, onde foi escrito o nome Abel.

O botão “ Procurar” é um botão do tipo “submit”. Como se

sabe, isto quer dizer que, quando esse botão for utilizado,

ocorre a ação prevista no cabeçalho do formulário e os

dados são enviados para serem processa- dos pelo script

com o nome procurar.php.

Um script para procurar um nome na tabela Contactos

85

Vejamos então como deverá ser o código deste script. Na

figura seguinte, podemos ver o código do ficheiro

procurar.php. À direita, na mesma figura, temos o

resultado da execução do script para o dado inserido no

exemplo da figura anterior (com o nome Abel).

O script começa com a seguinte instrução:

Um script para procurar um nome na tabela Contactos

86

Esta instrução cria a variável $nome para receber o conteúdo do

campo ‘nome’ vindo do formulário da página de entrada.

A instrução seguinte:

escreve uma string indicada por nós, seguida do nome captado na

variável $nome — usando o sinal . (ponto) para juntar as strings.

Um script para procurar um nome na tabela Contactos

87

O script continua com a instrução que procura fazer a ligação

ao servidor MySQL:

Segue-se a avaliação, através da estrutura if, se a ligação

ocorreu com sucesso ou não:

Um script para procurar um nome na tabela Contactos

88

Se a ligação não se tiver concretizado, é escrita a mensagem

indicada e o script termina com o comando PHP exit.

Um script para procurar um nome na tabela Contactos

89

Um script para procurar um nome na tabela Contactos

90

O passo seguinte é selecionar a base de dados em que

pretendemos efetuar a consulta:

A função PHP mysql_select_db() seleciona a base de dados que

indicarmos dentro dos parênteses curvos. Aí, é também

indicada a variável que captou o resultado da conexão.

Um script para procurar um nome na tabela Contactos

91

Em seguida, vamos escrever o comando SQL para executar na

base de dados visada. Neste caso, começamos por criar uma

variável à qual atribuímos o comando SQL:

portanto, pedimos para selecionar os registos da tabela

Contactos em que o campo nome seja igual ao conteúdo da

variável $nome.

Um script para procurar um nome na tabela Contactos

92

A instrução seguinte:

- utiliza a variável $resultado para receber o resultado da

execução da consulta (query).

A instrução que se segue

Um script para procurar um nome na tabela Contactos

93

utiliza a variável $n_registos para saber quantos registos

(rows) foram encontrados na consulta anterior. Este valor é

dado pela função predefinida do PHP mysql_num_rows().

Segue-se uma estrutura condicional que começa com if

($n_registos == 0). Se o número de registos for 0, o nome

não foi encontrado e apenas é escrita essa informação.

Caso contrário, vamos escrever os dados encontrados. Para

tal é usada a instrução:

Um script para procurar um nome na tabela Contactos

94

A função PHP mysql_fetch_array() permite captar os dados

no array do resultado da consulta feita com mysql_quer().

A partir daí, a variável $registo contém os dados à maneira

de um registo associativo. Por isso, a instrução

Um script para procurar um nome na tabela Contactos

95

Um script para procurar um nome na tabela Contactos

escreve o nome (campo ‘Nome’) do registo contido na variável $registo; etc.

96

top related