bases de dados - ulisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 bases de dados...

25
1 Bases de Dados Introdução à linguagem PHP Tópicos PHP blocos construtivos arrays instruções condicionais • ciclos • redireccionamento • sessões 2 IST DEI Bases de Dados PHP and Postgres interacção com o Postgres utilização de formulários HTML

Upload: others

Post on 22-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

1

Bases de Dados

Introdução à linguagem PHP

Tópicos

PHP• blocos construtivos• arrays• instruções condicionais• ciclos• redireccionamento• sessões

2IST ▪ DEI ▪ Bases de Dados

PHP and Postgres• interacção com o Postgres• utilização de formulários HTML

Page 2: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

2

Introdução ao PHP

PHP: PHP Hypertext Preprocessor• linguagem de server-side scripting• concebida para geração dinâmica de páginas Web• corre em muitas plataformas• integrada com vários servidores Web• suporte para muitos SGBDs• possui um vasto conjunto de extensões

3IST ▪ DEI ▪ Bases de Dados

• é software livre

Arquitectura

BrowserBrowser11

ServidorWeb

ServidorWeb PHPPHP SGBDSGBD

pedido HTTP HTML

extensão*.php

ficheiro*.php

códigoPHP

queriesSQL

HTML dados

22

33

44

556677

88

4IST ▪ DEI ▪ Bases de Dados

Sistema de

ficheiros

Sistema de

ficheiros

44

Page 3: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

3

Uma página em PHP

variáveis

HTMLHTML

PHPPHP

HTMLHTML

SGBDSGBD

HTMLHTML

HTMLHTML

HTMLHTML

5IST ▪ DEI ▪ Bases de Dados

Servidor Cliente

<html><head>

"Hello World" em PHP

<title>PHP Test</title></head><body>

<?php echo('<p>Hello World!</p>'); ?></body>

6IST ▪ DEI ▪ Bases de Dados

</html>

Demo: helloworld.php

Page 4: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

4

Variáveis

Não é preciso declarar variáveis, simplesmente atribuir valor

$age = 12;$price = 2 55;$price = 2.55;$number = -2;$name = "Jones";

Os nomes de variáveis• começam com um $• podem incluir apenas letras, algarismos e underscore

7IST ▪ DEI ▪ Bases de Dados

p p , g• não podem começar por número

Para "destruir" variáveis usa-se: unset($age);PHP é case-sensitive!

Operadores

Operadores aritméticos• +, −, *, %• exemplo: $result = (1 + 2) * 4 + 1;

Operadores de comparação• ==, >, <, >=, <=, != (ou <>)• exemplos:

$weather == "raining"$age < 13

8IST ▪ DEI ▪ Bases de Dados

Operadores lógicos:• and (ou &&), or (ou ||), xor e !

Page 5: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

5

Instrução if

$message = "";if ($country == "Germany" ){

$message = "Willkommen!";g}elseif ($country == "France" ){

$message = "Bienvenue!";}else{

9IST ▪ DEI ▪ Bases de Dados

{$message = "Welcome!";

}echo("$message<br>");

Strings

Uma string$string = 'Hello World!';

Caracteres especiais (" e ')p ( )$string = 'It is Tom\'s house';

Concatenação de strings$string1 = 'Hello';$string2 = 'World!';$stringall = $string1 . ' ' . $string2;

10IST ▪ DEI ▪ Bases de Dados

Formatação de strings$price = 25;$fprice = sprintf("%01.2f", $price);

Page 6: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

6

Aspas e plicas

Texto entre plicas não é processado$age = 12;echo('The age is $age');h i $The age is $age

Texto entre aspas é processado$age = 12;echo("The age is $age");The age is 12

11IST ▪ DEI ▪ Bases de Dados

Caracteres especiais• \n, \t, ...

Data e hora

Data e hora actual$today = time();

12IST ▪ DEI ▪ Bases de Dados

http://www.php.net/manual/en/

Page 7: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

7

Data e hora

Formatar uma data$cdate = date("d/m/y", $today);$ctime = date("G:i:s", $today);

13IST ▪ DEI ▪ Bases de Dados

http://www.php.net/manual/en/

Data e hora

Conversão de strings para datas$prazo = strtotime("January 15 2003");

14IST ▪ DEI ▪ Bases de Dados

http://www.php.net/manual/en/

Page 8: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

8

Operações com datas

Operações aritméticas com datas$timeSpan = $today - $importantDate;

• devolve o número de segundos entre as 2 datas

Conversão de strings aceita muitas variantes$importantDate = strtotime("tomorrow");$importantDate = strtotime("now + 24 hours");$importantDate = strtotime("last saturday");$importantDate = strtotime("8pm + 3 days");

15IST ▪ DEI ▪ Bases de Dados

p p y$importantDate = strtotime("2 weeks ago");$importantDate = strtotime("this 4am");...

Outros elementos úteis

Mais operadores aritméticos$counter += 2;$ 3$counter -= 3;$counter *= 2;$counter /= 3;

Sair do scriptexit("The program is exiting");

16IST ▪ DEI ▪ Bases de Dados

die("The program is dying");

Comentários /* ... */, // e #

Page 9: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

9

Funções

Exemplo• adição de 2 números (argumentos opcionais)

function addnumbers($num1 = 1, $num2 = 1){

$total = $num1 + $num2;return $total;

}

17IST ▪ DEI ▪ Bases de Dados

Arrays

Array simples

$animais[1] = "gato";$animais[2] = "tigre";$animais[4] = "elefante";

$animais = array("gato","tigre","elefante");

18IST ▪ DEI ▪ Bases de Dados

(inicializa elementos [0], [1] e [2])

Page 10: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

10

Arrays

Array associativos

$airlines['BA'] = "British Airways";$airlines['LH'] = "Lufthansa";$airlines['AF'] = "Air France";

$airlines = array("BA" => "British Airways","LH" => "Lufthansa", "AF" => "Air France");

19IST ▪ DEI ▪ Bases de Dados

Ordenação de arrays

Ordenação de arrays simplessort($pets);

Ordenação de arrays associativosasort($airlines);

Outros métodos de ordenação

20IST ▪ DEI ▪ Bases de Dados

• rsort, arsort (ordenação inversa)• ksort, krsort (ordenação por chave)

Page 11: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

11

Iterar por um array

Os arrays podem comportar-se como iteradoresreset($airlines);$ l ($ i li )$value = current($airlines);echo("$value<br>");$value = next($airlines);echo("$value<br>");$value = next($airlines);echo("$value<br>");

21IST ▪ DEI ▪ Bases de Dados

Outras funções:• prev(), end(), sizeof()

Iterar por um array com foreach

Também é possível utilizar o ciclo foreach

$airlines = array("BA" => "British Airways",

"LH" => "Lufthansa", "AF" => "Air France");ksort ($airlines);foreach($airlines as $symbol => $name){

echo("$name ($symbol)<br>");

22IST ▪ DEI ▪ Bases de Dados

}

Demo: foreach.php

Page 12: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

12

Arrays multidimensionais

Como criar um array multidimensional

$ d tP i [' l thi '][' hi t'] 20 00$productPrices['clothing']['shirt'] = 20.00;$productPrices['clothing']['pants'] = 22.50;$productPrices['linens']['blanket'] = 25.00;$productPrices['linens']['bedspread'] = 50.00;$productPrices['furniture']['lamp'] = 44.00;$productPrices['furniture']['rug'] = 75.00;

23IST ▪ DEI ▪ Bases de Dados

Como usar um array multidimensional

$shirtPrice = $productPrices['clothing']['shirt'];

Arrays multidimensionais

<?phpecho("<table border=1>");foreach($productPrices as $category => $prices){

f h($ i $ d t > $ i )foreach($prices as $product => $price){

echo("<tr>");echo("<td>$category</td>");echo("<td>$product</td>");$f_price = sprintf("%01.2f", $price);echo("<td>$f_price</td>");echo("</tr>");

24IST ▪ DEI ▪ Bases de Dados

( / );}

}echo("</table>");

?> Demo: multidim.php

Page 13: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

13

Ciclo for

for ($i = 0; $i < sizeof($customerNames); $i++){

echo("$customerNames[$i]<br>");echo( $customerNames[$i]<br> );}

for ($i = 0, $j = 1; $t <= 4; $i++, $j++){

$t = $i + $j;echo("$t<br>");

25IST ▪ DEI ▪ Bases de Dados

( $ )}

Ciclo while

while($testvar != "yes"){if ($customers[$k] == "Smith"){{

$testvar = "yes";echo("Smith<br>");

}else{

echo("$customers[$k], not Smith<br>");

26IST ▪ DEI ▪ Bases de Dados

( $ [$ ], )}$k++;

}

Page 14: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

14

Ciclo do…while

do{if ($customers[$k] == "Smith"){

$t t " "$testvar = "yes";echo("Smith<br>");

}else{

echo("$customers[$k], not Smith<br>");}$k++;

27IST ▪ DEI ▪ Bases de Dados

$ ;} while($testvar != "yes")

• também é possível utilizar break e continue

Bases de Dados

Processamento de formulários

Page 15: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

15

Formulários HTML

Exemplo

<html><body><form action="submit.php" method="post"><p>Your name: <input type="text" name="name"/></p><p>Your age: <input type="text" name="age"/></p><p><input type="submit"/></p>

</form>

29

</body></html>

Demo: form.php

Processamento de formulários

Um formulário HTML<form action="submit1.php" method="post">

<p>Your name: <input type="text" name="name"/></p><p>Your age: <input type="text" name="age"/></p><p><input type="submit"/></p>

</form>

O script submit.php terá acesso aos campos do formulário através dos arrays• $_POST – se o método utilizado for POST• $_GET – se o método utilizado for GET$ Q S iá i d $ OS $ G $ COO

30

• $_REQUEST – variáveis de $_POST, $_GET e $_COOKIE

Exemplo: $name = $_REQUEST["name"];

Page 16: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

16

Processamento de formulários

Exemplo

<html><body><p> O nome é: <?php echo($_REQUEST["name"]); ?> </p><p> A idade é: <?php echo($_REQUEST["age"]); ?> </p>

</body></html>

31

Processamento de formulários

Outro exemplo

<html><head><title>Customer Info</title></head><head><title>Customer Info</title></head><body><?php

foreach ($_REQUEST as $field => $value){

echo("$field = $value<br>");}

32IST ▪ DEI ▪ Bases de Dados

?></body></html> Demo: form.php + submit.php

Page 17: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

17

Utilização de outros controlos

Radio buttons

<input name="curso" type="radio" value="diurno"/>Frequentar di bcurso diurno<br>

<input name="curso" type="radio" value="nocturno"/>Frequentar curso nocturno<br>

Checkboxes

<input type="checkbox" name="ingrediente1" value="queijo"> Queijo<br>

33IST ▪ DEI ▪ Bases de Dados

<input type="checkbox" name="ingrediente2" value="fiambre"> Fiambre<br>

<input type="checkbox" name="ingrediente3" value="tomate"> Tomate<br>

Demo: form2.php

Bases de Dados

Sessões em PHP

Page 18: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

18

Sessões em PHP

PHP implementa mecanismos de sessões

Quando uma sessão é iniciada• se a sessão já existe usa essa, senão cria nova• passa o identificador de sessão em cada página

▫ através de cookies, no URL, ou variáveis POST escondidas (transparente para o utilizador)

• armazena variáveis no array $ SESSION

35IST ▪ DEI ▪ Bases de Dados

• armazena variáveis no array $_SESSION

Utilização de sessões

Iniciar uma sessão• sempre antes de qualquer outro output

session_start();

Criar variáveis de sessão numa página:$_SESSION['user'] = "João";

• e usá-las noutra:echo($_SESSION['user']);

36IST ▪ DEI ▪ Bases de Dados

Fechar a sessãosession_destroy();

Page 19: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

19

Exemplo de sessão – página 1

<?php session_start(); ?><html><body><? h<?php

$_SESSION['session_var'] = "valor de sessão";echo("Foi criada uma variável de sessão.");

?><form action="session2.php" method="POST"><input type="hidden" name="form_var" value="valor de

formulário"><input type="submit" value="go to next page">

37IST ▪ DEI ▪ Bases de Dados

</form></body></html>

Demo: session1.php

Exemplo de sessão – página 2

<?php session_start(); ?><html><b d ><body><?php

echo("session_var = {$_SESSION['session_var']}<br/>");echo("form_var = {$_REQUEST['form_var']}<br/>");

?></body></html>

38IST ▪ DEI ▪ Bases de Dados

Demo: session2.php

Page 20: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

20

Redireccionamento de páginas

A função header() pode ser usada para redireccionamento• mas sempre antes de qualquer outro output !• mas sempre antes de qualquer outro output !

if ($customer_age < 13){header("Location: ToyCatalog.php");

}else

39IST ▪ DEI ▪ Bases de Dados

{header("Location: ElectronicsCatalog.php");

}

Bases de Dados

PHP e Postgres

Page 21: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

21

PHP e Postgres

1. Abrir a ligação e escolher a BD

$user = “istxxxxxx"; /* username sigma */$host = “db.ist.utl.pt";$port = 5432;$password = “xxxxxxxx“; /* password psql_reset */$dbname = $user; /* porquê? */

$connection = pg_connect("host=$host port=$port

41IST ▪ DEI ▪ Bases de Dados

user=$user password=$password dbname=$dbname")or die(pg_last_error());

PHP e Postgres

2. Fazer uma consulta

$sql = "select * from customer";

$result = pg_query($sql) or die(pg_last_error());

42IST ▪ DEI ▪ Bases de Dados

Page 22: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

22

PHP e Postgres

3. Determinar o número de colunas e de registos devolvidos (opcional)

echo("No. columns: " . pg_num_fields($result) . "<br/>");

echo("No. records: " . pg_num_rows($result) . "<br/>");

43IST ▪ DEI ▪ Bases de Dados

PHP e Postgres

4. Iterar pelos resultados

echo("<table>");while($row_array = pg_fetch_assoc($result)){

echo("<tr>");echo("<td>{$row_array['customer_name']}</td>");echo("<td>{$row_array['customer_street']}</td>");echo("<td>{$row_array['customer_city']}</td>");

44IST ▪ DEI ▪ Bases de Dados

echo("</tr>");}echo("</table>");

Page 23: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

23

PHP e Postgres

5. Fechar a ligação

pg_close($connection);

45IST ▪ DEI ▪ Bases de Dados

Consultas e modificações à BD

$result = pg_query($query)di ("C ld t t ")or die("Could not execute query.");

Para perguntas que devolvem um resultado• $result é um apontador para os dados

Para perguntas que não devolvem um resultado

46IST ▪ DEI ▪ Bases de Dados

p g q• verdadeiro ou falso, conforme sucesso da operação• pg_last_error() permite determinar último erro

Page 24: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

24

Acesso aos resultados – exemplo

<table border=1><tr><td><b>Name</b></td><td><b>Street</b></td><td><b>City</b></td></tr>

<?php$ l " l t * f t "$sql = "select * from customer";$result = pg_query($sql) or die(pg_last_error());echo("N. of results: " . pg_num_rows($result) . "<br/>");echo("N. of columns: " . pg_num_fields($result) . "<br/>");while($row_array = pg_fetch_assoc($result)){

echo("<tr>");echo("<td>{$row_array['customer_name']}</td>");echo("<td>{$row_array['customer_street']}</td>");echo("<td>{$row array['customer city']}</td>");

47IST ▪ DEI ▪ Bases de Dados

echo( <td>{$row_array[ customer_city ]}</td> );echo("</tr>";

}?>

</table> Demo: customers.php

Limpeza de dados

Formatação adequada dos dados (texto vs. HTML)

• strip_tags() – remove elementos HTML

$last_name = strip_tags("<p>Assunção</p>");

• htmlspecialchars() – converte caracteres especiais para entidades HTML

48IST ▪ DEI ▪ Bases de Dados

especiais para entidades HTML

$last_name = htmlspecialchars("Assunção");

Page 25: Bases de Dados - ULisboaweb.ist.utl.pt/~diogo.ferreira/bd/2009-2010/08php.pdf · 1 Bases de Dados Introdução à linguagem PHP Tópicos PHP • blocos construtivos • arrays •

25

PHP e Postgres

Documentação das funções utilizadas• http://www.php.net/manual/en/book.pgsql.php

49