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
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
pedido HTTP HTMLficheiro*.html
códigoHTML
2244
33
4IST ▪ DEI ▪ Bases de Dados
Sistema de
ficheiros
Sistema de
ficheiros
3
Arquitectura
BrowserBrowser11
ServidorWeb
ServidorWeb PHPPHP
pedido HTTP HTML
extensão*.php
ficheiro*.php
códigoPHP
HTML
22
33
44
55
66
5IST ▪ DEI ▪ Bases de Dados
Sistema de
ficheiros
Sistema de
ficheiros
44
Arquitectura
BrowserBrowser11
ServidorWeb
ServidorWeb PHPPHP SGBDSGBD
pedido HTTP HTML
extensão*.php
ficheiro*.php
códigoPHP
queriesSQL
HTML dados
22
33
44
556677
88
6IST ▪ DEI ▪ Bases de Dados
Sistema de
ficheiros
Sistema de
ficheiros
44
4
Uma página em PHP
variáveis
HTMLHTML
PHPPHP
HTMLHTML
SGBDSGBD
HTMLHTML
HTMLHTML
HTMLHTML
7IST ▪ 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>
8IST ▪ DEI ▪ Bases de Dados
</html>
Demo: helloworld.php
5
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
9IST ▪ 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
10IST ▪ DEI ▪ Bases de Dados
Operadores lógicos:• and (ou &&), or (ou ||), xor e !
6
Instrução if
$message = "";if ($country == "Germany" ){
$message = "Willkommen!";g}elseif ($country == "France" ){
$message = "Bienvenue!";}else{
11IST ▪ 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;
12IST ▪ DEI ▪ Bases de Dados
Formatação de strings$price = 25;$fprice = sprintf("%01.2f", $price);
7
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
13IST ▪ DEI ▪ Bases de Dados
Caracteres especiais• \n, \t, ...
Data e hora
Data e hora actual$today = time();
14IST ▪ DEI ▪ Bases de Dados
http://www.php.net/manual/en/
8
Data e hora
Formatar uma data$cdate = date("d/m/y", $today);$ctime = date("G:i:s", $today);
15IST ▪ DEI ▪ Bases de Dados
http://www.php.net/manual/en/
Data e hora
Conversão de strings para datas$prazo = strtotime("January 15 2003");
16IST ▪ DEI ▪ Bases de Dados
http://www.php.net/manual/en/
9
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");
17IST ▪ 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");
18IST ▪ DEI ▪ Bases de Dados
die("The program is dying");
Comentários /* ... */, // e #
10
Funções
Exemplo• adição de 2 números (argumentos opcionais)
function addnumbers($num1 = 1, $num2 = 1){
$total = $num1 + $num2;return $total;
}
19IST ▪ DEI ▪ Bases de Dados
Arrays
Array simples
$animais[1] = "gato";$animais[2] = "tigre";$animais[4] = "elefante";
$animais = array("gato","tigre","elefante");
20IST ▪ DEI ▪ Bases de Dados
y g g
(inicializa elementos [0], [1] e [2])
11
Arrays
Array associativos
$airlines['BA'] = "British Airways";$airlines['LH'] = "Lufthansa";$airlines['AF'] = "Air France";
$airlines = array("BA" => "British Airways",
21IST ▪ DEI ▪ Bases de Dados
"LH" => "Lufthansa", "AF" => "Air France");
Ordenação de arrays
Ordenação de arrays simplessort($pets);
Ordenação de arrays associativosasort($airlines);
Outros métodos de ordenação
22IST ▪ DEI ▪ Bases de Dados
• rsort, arsort (ordenação inversa)• ksort, krsort (ordenação por chave)
12
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>");
23IST ▪ 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>");
24IST ▪ DEI ▪ Bases de Dados
}
Demo: foreach.php
13
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;
25IST ▪ 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>");
26IST ▪ DEI ▪ Bases de Dados
( / );}
}echo("</table>");
?> Demo: multidim.php
14
Tabelas HTML
Estrutura básica de tabelas em HTML
t bl<table><tr>
<td>...</td><td>...</td><td>...</td>
</tr><tr>
<td>...</td>
2 linhas
3 colunas
27
td ... /td<td>...</td><td>...</td>
</tr></table>
IST ▪ DEI ▪ Bases de Dados
3 colunas
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>");
28IST ▪ DEI ▪ Bases de Dados
( $ )}
15
Ciclo while
while($testvar != "yes"){if ($customers[$k] == "Smith"){{
$testvar = "yes";echo("Smith<br>");
}else{
echo("$customers[$k], not Smith<br>");
29IST ▪ DEI ▪ Bases de Dados
( $ [$ ], )}$k++;
}
Ciclo do…while
do{if ($customers[$k] == "Smith"){
$t t " "$testvar = "yes";echo("Smith<br>");
}else{
echo("$customers[$k], not Smith<br>");}$k++;
30IST ▪ DEI ▪ Bases de Dados
$ ;} while($testvar != "yes")
• também é possível utilizar break e continue
16
Bases de Dados
Processamento de formulários
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>
32
</body></html>
Demo: form.php
17
Processamento de formulários
Um formulário HTML<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>
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
33
• $_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>
34
18
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>");}
35IST ▪ DEI ▪ Bases de Dados
?></body></html> Demo: form.php + submit.php
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>
36IST ▪ 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
19
Bases de Dados
Sessões em PHP
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
38IST ▪ DEI ▪ Bases de Dados
• armazena variáveis no array $_SESSION
20
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['nome'] = "João";
• e usá-las noutra:echo($_SESSION['nome']);
39IST ▪ DEI ▪ Bases de Dados
Fechar a sessãosession_destroy();
Exemplo de sessão – página 1
<?php session_start(); ?><html><body><? h<?php
$_SESSION['session_var'] = "valor de sessão";echo("This is a test of the sessions feature.");
?><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">
40IST ▪ DEI ▪ Bases de Dados
</form></body></html>
Demo: session1.php
21
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>
41IST ▪ DEI ▪ Bases de Dados
Demo: session1.php + 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 < 12){header("Location: jogos.php");
}else
42IST ▪ DEI ▪ Bases de Dados
{header("Location: telemoveis.php");
}
22
Bases de Dados
PHP e Postgres
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
44IST ▪ DEI ▪ Bases de Dados
user=$user password=$password dbname=$dbname")or die(pg_last_error());
23
PHP e Postgres
2. Fazer uma consulta
$sql = "select * from customer";
$result = pg_query($sql) or die(pg_last_error());
45IST ▪ DEI ▪ Bases de Dados
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/>");
46IST ▪ DEI ▪ Bases de Dados
24
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>");
47IST ▪ DEI ▪ Bases de Dados
echo("</tr>");}echo("</table>");
PHP e Postgres
5. Fechar a ligação
pg_close($connection);
48IST ▪ DEI ▪ Bases de Dados
25
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 consultas que não devolvem um resultado
49IST ▪ DEI ▪ Bases de Dados
q• TRUE ou FALSE, conforme sucesso da operação• pg_last_error() permite determinar último erro
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>");
50IST ▪ DEI ▪ Bases de Dados
echo( <td>{$row_array[ customer_city ]}</td> );echo("</tr>";
}?>
</table> Demo: customers.php
26
Limpeza de dados
Formatação adequada dos dados (texto vs. HTML)
• strip_tags() – remove elementos HTML
$last_name = strip_tags("<p>Texto</p>");
• htmlspecialchars() – converte caracteresespeciais para entidades HTML
51IST ▪ DEI ▪ Bases de Dados
especiais para entidades HTML
$last_name = htmlspecialchars("Asserção");
PHP e Postgres
Documentação das funções utilizadas• http://www.php.net/manual/en/book.pgsql.php
52
Top Related