Bases de Dados

Propaganda
Bases de Dados
Introdução à linguagem PHP
Tópicos
ƒ PHP
• blocos construtivos
• arrays
• instruções condicionais
• ciclos
• redireccionamento
• sessões
ƒ PHP and Postgres
• interacção com o Postgres
• utilização de formulários HTML
IST ▪ DEI ▪ Bases de Dados
2
1
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
• é software livre
3
IST ▪ DEI ▪ Bases de Dados
Arquitectura
Browser
1
pedido HTTP
HTML
extensão
8
*.php
2
Servidor
Web
7
HTML
queries
SQL
5
PHP
3
ficheiro
*.php
6 SGBD
dados
código
PHP
4
Sistema
de
ficheiros
IST ▪ DEI ▪ Bases de Dados
4
2
Uma página em PHP
variáveis
SGBD
HTML
HTML
PHP
HTML
HTML
HTML
Servidor
Cliente
IST ▪ DEI ▪ Bases de Dados
5
"Hello World" em PHP
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo('<p>Hello World!</p>'); ?>
</body>
</html>
Demo: helloworld.php
IST ▪ DEI ▪ Bases de Dados
6
3
Variáveis
ƒ Não é preciso declarar variáveis, simplesmente atribuir valor
$age = 12;
$price = 2
2.55;
55;
$number = -2;
$name = "Jones";
ƒ Os nomes de variáveis
• começam com um $
podem incluir apenas
p
letras,, algarismos
g
e underscore
• p
• não podem começar por número
ƒ Para "destruir" variáveis usa-se: unset($age);
ƒ PHP é case-sensitive!
IST ▪ DEI ▪ Bases de Dados
7
Operadores
ƒ Operadores aritméticos
• +, −, *, %
• exemplo: $result = (1 + 2) * 4 + 1;
ƒ Operadores de comparação
• ==, >, <, >=, <=, != (ou <>)
• exemplos:
$weather == "raining"
$age < 13
ƒ Operadores lógicos:
• and (ou &&), or (ou ||), xor e !
IST ▪ DEI ▪ Bases de Dados
8
4
Instrução if
$message = "";
if ($country == "Germany" )
{
g = "Willkommen!";
$message
}
elseif ($country == "France" )
{
$message = "Bienvenue!";
}
else
{
$message = "Welcome!";
}
echo("$message<br>");
IST ▪ DEI ▪ Bases de Dados
9
Strings
ƒ Uma string
$string = 'Hello World!';
p
((" e '))
ƒ Caracteres especiais
$string = 'It is Tom\'s house';
ƒ Concatenação de strings
$string1 = 'Hello';
$string2 = 'World!';
$stringall = $string1 . ' ' . $string2;
ƒ Formatação de strings
$price = 25;
$fprice = sprintf("%01.2f", $price);
IST ▪ DEI ▪ Bases de Dados
10
5
Aspas e plicas
ƒ Texto entre plicas não é processado
$age = 12;
echo('The age is $age');
The
h age i
is $
$age
ƒ Texto entre aspas é processado
$age = 12;
echo("The age is $age");
The age is 12
ƒ Caracteres especiais
• \n, \t, ...
11
IST ▪ DEI ▪ Bases de Dados
Data e hora
ƒ Data e hora actual
$today = time();
http://www.php.net/manual/en/
IST ▪ DEI ▪ Bases de Dados
12
6
Data e hora
ƒ Formatar uma data
$cdate = date("d/m/y", $today);
$ctime = date("G:i:s", $today);
http://www.php.net/manual/en/
13
IST ▪ DEI ▪ Bases de Dados
Data e hora
ƒ Conversão de strings para datas
$prazo = strtotime("January 15 2003");
http://www.php.net/manual/en/
IST ▪ DEI ▪ Bases de Dados
14
7
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
$importantDate
$importantDate
$importantDate
p
$importantDate
$importantDate
...
=
=
=
=
=
=
strtotime("tomorrow");
strtotime("now + 24 hours");
strtotime("last saturday");
strtotime("8pm
p + 3 days");
y
strtotime("2 weeks ago");
strtotime("this 4am");
IST ▪ DEI ▪ Bases de Dados
15
Outros elementos úteis
ƒ Mais operadores aritméticos
$counter += 2;
$
$counter
-= 3;
3
$counter *= 2;
$counter /= 3;
ƒ Sair do script
exit("The program is exiting");
die("The program is dying");
ƒ Comentários /* ... */, // e #
IST ▪ DEI ▪ Bases de Dados
16
8
Funções
ƒ Exemplo
• adição de 2 números (argumentos opcionais)
function addnumbers($num1 = 1, $num2 = 1)
{
$total = $num1 + $num2;
return $total;
}
IST ▪ DEI ▪ Bases de Dados
17
Arrays
ƒ Array simples
$animais[1] = "gato";
$animais[2] = "tigre";
$animais[4] = "elefante";
$animais = array("gato","tigre","elefante");
(inicializa elementos [0], [1] e [2])
IST ▪ DEI ▪ Bases de Dados
18
9
Arrays
ƒ Array associativos
$airlines['BA'] = "British Airways";
$airlines['LH'] = "Lufthansa";
$airlines['AF'] = "Air France";
$airlines = array("BA" => "British Airways",
"LH" => "Lufthansa", "AF" => "Air France");
IST ▪ DEI ▪ Bases de Dados
19
Ordenação de arrays
ƒ Ordenação de arrays simples
sort($pets);
ƒ Ordenação de arrays associativos
asort($airlines);
ƒ Outros métodos de ordenação
• rsort, arsort (ordenação inversa)
• ksort, krsort (ordenação por chave)
IST ▪ DEI ▪ Bases de Dados
20
10
Iterar por um array
ƒ Os arrays podem comportar-se como iteradores
reset($airlines);
$ l
$value
= current($airlines);
($ i li
)
echo("$value<br>");
$value = next($airlines);
echo("$value<br>");
$value = next($airlines);
echo("$value<br>");
ƒ Outras funções:
• prev(), end(), sizeof()
21
IST ▪ DEI ▪ Bases de Dados
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>");
}
Demo: foreach.php
IST ▪ DEI ▪ Bases de Dados
22
11
Arrays multidimensionais
ƒ Como criar um array multidimensional
$productPrices['clothing']['shirt']
$
d tP i
[' l thi '][' hi t'] = 20
20.00;
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;
ƒ Como usar um array multidimensional
$shirtPrice = $productPrices['clothing']['shirt'];
IST ▪ DEI ▪ Bases de Dados
23
Arrays multidimensionais
<?php
echo("<table border=1>");
foreach($productPrices as $category => $prices)
{
f
foreach($prices
h($ i
as $
$product
d t =>
> $
$price)
i )
{
echo("<tr>");
echo("<td>$category</td>");
echo("<td>$product</td>");
$f_price = sprintf("%01.2f", $price);
echo("<td>$f_price</td>");
echo("</tr>");
( /
);
}
}
echo("</table>");
Demo: multidim.php
?>
IST ▪ DEI ▪ Bases de Dados
24
12
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>");
( $
)
}
IST ▪ DEI ▪ Bases de Dados
25
Ciclo while
while($testvar != "yes")
{
if ($customers[$k] == "Smith")
{
$testvar = "yes";
echo("Smith<br>");
}
else
{
echo("$customers[$k],
( $
[$ ], not Smith<br>");
)
}
$k++;
}
IST ▪ DEI ▪ Bases de Dados
26
13
Ciclo do…while
do
{
if ($customers[$k] == "Smith")
{
$t t
$testvar
= "
"yes";
"
echo("Smith<br>");
}
else
{
echo("$customers[$k], not Smith<br>");
}
$k++;
$
;
} while($testvar != "yes")
• também é possível utilizar break e continue
IST ▪ DEI ▪ Bases de Dados
27
Bases de Dados
Processamento de formulários
14
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>
</body>
</html>
Demo: form.php
29
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
• $_REQUEST
$
Q S – variáveis
iá i d
de $_POST,
$ OS $_GET
$ G e $_COOKIE
$ COO
ƒ Exemplo: $name = $_REQUEST["name"];
30
15
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>
<body>
<?php
foreach ($_REQUEST as $field => $value)
{
echo("$field = $value<br>");
}
?>
</body>
</html>
Demo: form.php + submit.php
IST ▪ DEI ▪ Bases de Dados
32
16
Utilização de outros controlos
ƒ Radio buttons
<input name="curso" type="radio" value="diurno"/>Frequentar
curso diurno<br>
di
b
<input name="curso" type="radio" value="nocturno"/>Frequentar
curso nocturno<br>
ƒ Checkboxes
<input type="checkbox" name="ingrediente1" value="queijo">
Queijo<br>
<input type="checkbox" name="ingrediente2" value="fiambre">
Fiambre<br>
<input type="checkbox" name="ingrediente3" value="tomate">
Tomate<br>
Demo: form2.php
IST ▪ DEI ▪ Bases de Dados
33
Bases de Dados
Sessões em PHP
17
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
$ SESSION
IST ▪ DEI ▪ Bases de Dados
35
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']);
ƒ Fechar a sessão
session_destroy();
IST ▪ DEI ▪ Bases de Dados
36
18
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">
</form>
</body>
</html>
Demo: session1.php
IST ▪ DEI ▪ Bases de Dados
37
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>
Demo: session2.php
IST ▪ DEI ▪ Bases de Dados
38
19
Redireccionamento de páginas
ƒ A função header() pode ser usada para
redireccionamento
• mas sempre antes de qualquer outro output !
if ($customer_age < 13)
{
header("Location: ToyCatalog.php");
}
else
{
header("Location: ElectronicsCatalog.php");
}
IST ▪ DEI ▪ Bases de Dados
39
Bases de Dados
PHP e Postgres
20
PHP e Postgres
1. Abrir a ligação e escolher a BD
$user = “istxxxxxx";
$host = “db.ist.utl.pt";
$port = 5432;
$password = “xxxxxxxx“;
$dbname = $user;
/* username sigma */
/* password psql_reset */
/* porquê? */
$connection = pg_connect("host=$host port=$port
user=$user password=$password dbname=$dbname")
or die(pg_last_error());
IST ▪ DEI ▪ Bases de Dados
41
PHP e Postgres
2. Fazer uma consulta
$sql = "select * from customer";
$result = pg_query($sql) or die(pg_last_error());
IST ▪ DEI ▪ Bases de Dados
42
21
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/>");
IST ▪ DEI ▪ Bases de Dados
43
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>");
echo("</tr>");
}
echo("</table>");
IST ▪ DEI ▪ Bases de Dados
44
22
PHP e Postgres
5. Fechar a ligação
pg_close($connection);
IST ▪ DEI ▪ Bases de Dados
45
Consultas e modificações à BD
$result = pg_query($query)
or die("Could
di ("C ld not
t execute
t query.");
")
ƒ Para perguntas que devolvem um resultado
• $result é um apontador para os dados
ƒ Para p
perguntas
g
q
que não devolvem um resultado
• verdadeiro ou falso, conforme sucesso da operação
• pg_last_error() permite determinar último erro
IST ▪ DEI ▪ Bases de Dados
46
23
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 = "
$sql
"select
l t * f
from customer";
t
"
$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
echo(
<td>{$row_array[
array['customer
customer_city
city']}</td>");
]}</td> );
echo("</tr>";
}
?>
Demo: customers.php
</table>
IST ▪ DEI ▪ Bases de Dados
47
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
$last_name = htmlspecialchars("Assunção");
IST ▪ DEI ▪ Bases de Dados
48
24
PHP e Postgres
ƒ Documentação das funções utilizadas
• http://www.php.net/manual/en/book.pgsql.php
49
25
Download