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
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
3 IST ▪ DEI ▪ Bases de Dados
• é software livre
Arquitectura
Browser Browser 1 1 Servidor Web Servidor Web PHPPHP SGBDSGBD pedido HTTP HTML extensão *.php ficheiro *.php código PHP queries SQL HTML dados 2 2 3 3 4 4 5 5 6 6 7 7 8 8 Sistema de ficheiros Sistema de ficheiros 4 4Uma página em PHP
variáveisHTML
HTML
PHP
PHP
HTML
HTML
SGBD SGBDHTML
HTML
HTML
HTML
HTML
HTML
5 IST ▪ DEI ▪ Bases de DadosServidor Cliente
<html>
<head>
"Hello World" em PHP
<title>PHP Test</title>
</head>
<body>
<?php echo('<p>Hello World!</p>'); ?>
</body>
</html>
Demo: helloworld.phpVariá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
7 IST ▪ 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
Operadores lógicos:
Instrução if
$message = ""; if ($country == "Germany" ) { $message = "Willkommen!";g }elseif ($country == "France" ) { $message = "Bienvenue!"; } else { 9 IST ▪ 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;
Formatação de strings $price = 25;
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
11 IST ▪ DEI ▪ Bases de Dados
Caracteres especiais
• \n, \t, ...
Data e hora
Data e hora actual
$today = time();
Data e hora
Formatar uma data
$cdate = date("d/m/y", $today);
$ctime = date("G:i:s", $today);
13 IST ▪ DEI ▪ Bases de Dados
http://www.php.net/manual/en/
Data e hora
Conversão de strings para datas
$prazo = strtotime("January 15 2003");
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");
15 IST ▪ 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 script
exit("The program is exiting");
die("The program is dying");
Funções
Exemplo
• adição de 2 números (argumentos opcionais)
function addnumbers($num1 = 1, $num2 = 1) {
$total = $num1 + $num2; return $total;
}
17 IST ▪ DEI ▪ Bases de Dados
Arrays
Array simples
$animais[1] = "gato"; $animais[2] = "tigre"; $animais[4] = "elefante"; $animais = array("gato","tigre","elefante"); (inicializa elementos [0], [1] e [2])Arrays
Array associativos
$airlines['BA'] = "British Airways"; $airlines['LH'] = "Lufthansa";
$airlines['AF'] = "Air France";
$airlines = array("BA" => "British Airways", "LH" => "Lufthansa", "AF" => "Air France");
19 IST ▪ DEI ▪ Bases de Dados
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)
Iterar por um array
Os arrays podem comportar-se como iteradores
reset($airlines);
$
l
($ i li
)
$value = current($airlines);
echo("$value<br>");
$value = next($airlines);
echo("$value<br>");
$value = next($airlines);
echo("$value<br>");
21 IST ▪ 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>"); }
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; 23 IST ▪ DEI ▪ Bases de Dados
Como usar um array multidimensional
$shirtPrice = $productPrices['clothing']['shirt'];
Arrays multidimensionais
<?php
echo("<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>");( / ); } } echo("</table>"); ?> Demo: multidim.php
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>");
25 IST ▪ 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>");( $ [$ ], ) }
$k++; }
Ciclo do…while
do { if ($customers[$k] == "Smith") { $t t " " $testvar = "yes"; echo("Smith<br>"); } else {echo("$customers[$k], not Smith<br>"); }
$k++;
27 IST ▪ DEI ▪ Bases de Dados
$ ;
} while($testvar != "yes")
• também é possível utilizar break e continue
Bases de Dados
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 • $_REQUEST – variáveis de $_POST, $_GET e $_COOKIE Exemplo: $name = $_REQUEST["name"];
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> 31Processamento de formulários
Outro exemplo
<html> <head><title>Customer Info</title></head> <head><title>Customer Info</title></head> <body> <?phpforeach ($_REQUEST as $field => $value) {
echo("$field = $value<br>"); }
?> </body>
Utilização de outros controlos
Radio buttons
<input name="curso" type="radio" value="diurno"/>Frequentar
di b
curso diurno<br>
<input name="curso" type="radio" value="nocturno"/>Frequentar curso nocturno<br>
Checkboxes
<input type="checkbox" name="ingrediente1" value="queijo"> Queijo<br>
33 IST ▪ 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
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
35 IST ▪ 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']);
Fechar a sessão
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">
37 IST ▪ 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> Demo: session2.php
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 39 IST ▪ DEI ▪ Bases de Dados
{
header("Location: ElectronicsCatalog.php"); }
Bases de Dados
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
41 IST ▪ 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";
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/>");
43 IST ▪ 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>"); echo("</tr>"); } echo("</table>");
PHP e Postgres
5. Fechar a ligação
pg_close($connection);
45 IST ▪ 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
p g
q
• verdadeiro ou falso, conforme sucesso da operação
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>");
47 IST ▪ 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
especiais para entidades HTML
PHP e Postgres
Documentação das funções utilizadas
• http://www.php.net/manual/en/book.pgsql.php