Bases de Dados

Propaganda
Bases de Dados
Apresentação da linguagem PHP
Tópicos
§ PHP
• blocos construtivos
• arrays
• instruções condicionais
• ciclos
• redireccionamento
• sessões
§ PHP and MySQL
• interacção com o MySQL
• utilização de formulários HTML
IST DEI ▪ Bases de Dados 2006-07
▪
2
Introdução ao PHP
§ PHP: PHP Hypertext Preprocessor
• linguagem para 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 (MySQL, Oracle, ...)
▫
especialmente bem integrada com MySQL
• possui um vasto conjunto de extensões
▫
Smarty, PEAR, …
• é software livre (aprovado pela FSF)
IST DEI ▪ Bases de Dados 2006-07
▪
3
Arquitectura
Browser
1
pedido HTTP
HTML
extensão
8
queries
*.php
SQL
Servidor 2
5
PHP
Web
7
6 SGBD
HTML
dados
3
ficheiro
*.php
código
PHP
4
Sistema de
ficheiros
IST DEI ▪ Bases de Dados 2006-07
▪
4
Uma página em PHP
variáveis
SGBD
HTML
HTML
PHP
HTML
HTML
HTML
5
IST DEI ▪ Bases de Dados 2006-07
▪
"Hello World" em PHP
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World!</p>'; ?>
</body>
</html>
(demo)
IST DEI ▪ Bases de Dados 2006-07
▪
6
Variáveis
§ Não é preciso declarar variáveis, simplesmente atribuir valor
$age = 12;
$price = 2.55;
$number = -2;
$name = "Jones";
§ Os nomes de variáveis
• começam com um $
• podem incluir apenas letras, algarismos e underscore
• não podem começar por número
§ Para "destruir" variáveis usa-se: unset($age);
§ PHP é case-sensitive!
IST DEI ▪ Bases de Dados 2006-07
▪
7
Constantes
§ Constantes são especificadas com define
define("COMPANY","ABC Pet Store");
define("AGE",29);
echo COMPANY;
echo AGE;
IST DEI ▪ Bases de Dados 2006-07
▪
8
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 2006-07
▪
9
Strings
§ Uma string
$string = 'Hello World!';
§ Caracteres especiais (" e ')
$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 2006-07
▪
10
Aspas e apóstrofes
§ Texto entre apóstrofes não é processado
$age = 12;
echo 'The age is $age';
The age is $age
§ Texto entre aspas é processado
$age = 12;
echo "The age is $age";
The age is 12
§ Caracteres especiais
• \n, \t, ...
IST DEI ▪ Bases de Dados 2006-07
▪
11
Data e hora
§ Data e hora actual
$today = time();
§ Formatar uma data
$cdate = date("d/m/y", $today);
$ctime = date("G:i:s", $today);
§ Opções de formatação
• F – mês por extenso
• M – mês abreviado (3 letras)
• …
§ Conversão de strings para datas
$prazo = strtotime("January 15 2003");
IST DEI ▪ Bases de Dados 2006-07
▪
12
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 operações
$importantDate
$importantDate
$importantDate
$importantDate
$importantDate
$importantDate
...
=
=
=
=
=
=
strtotime("tomorrow");
strtotime("now + 24 hours");
strtotime("last saturday");
strtotime("8pm + 3 days");
strtotime("2 weeks ago");
strtotime("this 4am");
IST DEI ▪ Bases de Dados 2006-07
▪
13
Expressões regulares
§ Suporte para expressões regulares
ereg("pattern", string)
• resultado do tipo verdadeiro/falso
§ Exemplo
ereg("^[A-Za-z ]+$", $name)
• verdadeiro para "Pedro Matos Chaves"
• falso para "", "Pedro Matos-Chaves" e "Conan O'Brien"
IST DEI ▪ Bases de Dados 2006-07
▪
14
Expressões regulares – símbolos
§ Símbolos em expressões regulares
•
•
•
•
•
•
•
•
•
•
•
•
"^a" – qualquer string começada por "a"
"a$" – qualquer string terminada em "a"
"ab*" – um "a" seguido de zero ou mais "b"
"ab+" – um "a" seguido de um ou mais "b"
"a?b" – um possível "a" seguido de "b"
"ab{2}" – um "a" seguido de 2 "b"
"ab{2,4}" – um "a" seguido de 2 a 4 "b"
"(b|cd)ef" – qualquer string que contenha "bef" ou "cdef"
"a(bc){1,5}" – um "a" seguido de 1 a 5 cópias de "bc"
"a." – "a" seguido de qualquer caracter (só 2 caracteres)
"^[a-zA-Z]" – qualquer string que comece por uma letra
…
IST DEI ▪ Bases de Dados 2006-07
▪
15
Outros elementos úteis
§ Mais operadores aritméticos
$counter += 2;
$counter -= 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 2006-07
▪
16
Funções
§ Exemplo
• adição de 2 números (argumentos opcionais)
function add_2_numbers($num1 = 1, $num2 = 1)
{
$total = $num1 + $num2;
return $total;
}
IST DEI ▪ Bases de Dados 2006-07
▪
17
Arrays simples
§ Array simples
$animais[1] = "gato";
$animais[2] = "tigre";
$animais[3] = "elefante";
$animais = array("gato","tigre","elefante");
IST DEI ▪ Bases de Dados 2006-07
▪
18
Arrays associativos
§ Array indexado a chaves (keys)
$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 2006-07
▪
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)
• usort($array,function) (com função auxiliar)
IST DEI ▪ Bases de Dados 2006-07
▪
20
Iterar por um array
§ Os arrays podem comportar-se como iteradores
reset($airlines);
$value = current($airlines);
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 2006-07
▪
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)
IST DEI ▪ Bases de Dados 2006-07
▪
22
Arrays multidimensionais
§ Como criar um array multidimensional
$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;
§ Como usar um array multidimensional
$shirtPrice = $productPrices['clothing']['shirt'];
IST DEI ▪ Bases de Dados 2006-07
▪
23
Arrays multidimensionais
<?php
echo "<table border=1>";
foreach($productPrices as $category)
{
foreach($category as $product => $price)
{
$f_price = sprintf("%01.2f", $price);
echo "<tr>";
echo "<td>$product</td>";
echo "<td>$f_price</td>";
echo "</tr>";
}
}
echo "</table>";
?>
(demo)
IST DEI ▪ Bases de Dados 2006-07
▪
24
Instrução if
if ($country == "Germany" )
{
$message = "Willkommen!";
}
elseif ($country == "France" )
{
$message = "Bienvenue!";
}
else
{
$message = "Welcome!";
}
echo "$message<br>";
IST DEI ▪ Bases de Dados 2006-07
▪
25
Instrução switch
switch($country)
{
case "Germany" :
$salestaxrate = 0.16;
break;
case "Portugal" :
$salestaxrate = 0.21;
break;
default:
$salestaxrate = 0.19;
break;
}
$salestax = $orderTotalCost * $salestaxrate;
IST DEI ▪ Bases de Dados 2006-07
▪
26
Ciclo for
for ($i = 0; $i < sizeof($customerNames); $i++)
{
echo "$customerNames[$i]<br>";
}
for ($i = 0, $j = 1; $t <= 4; $i++, $j++)
{
$t = $i + $j;
echo "$t<br>";
}
IST DEI ▪ Bases de Dados 2006-07
▪
27
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 2006-07
▪
28
Ciclo do…while
do
{
if ($customers[$k] == "Smith")
{
$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 2006-07
▪
29
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 2006-07
▪
30
Utilização de cookies
§ Criar cookie
• sempre antes de qualquer outro output!
setcookie("state","CA");
setcookie("state","CA",time()+3600);
§ Todos os valores dos cookies disponíveis no array
$_COOKIE
echo $_COOKIE['state'];
IST DEI ▪ Bases de Dados 2006-07
▪
31
Sessões em PHP
§ Nem sempre os cookies estão disponíveis
• PHP possui um mecanismo mais conveniente:
sessões
§ Quando uma sessão é iniciada
• se a sessão já existe usa a mesma, 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
• armazena variáveis no array $_SESSION
IST DEI ▪ Bases de Dados 2006-07
▪
32
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['state'] = "CA";
• e usá-las noutra:
echo $_SESSION['state'];
§ Fechar a sessão
session_destroy();
IST DEI ▪ Bases de Dados 2006-07
▪
33
Exemplo de sessão – página 1
<?php session_start(); ?>
<html>
<head><title>Testing Sessions page 1</title></head>
<body>
<?php
$_SESSION['session_var'] = "testing";
echo "This is a test of the sessions feature.
<form action='sessiontest2.php' method='POST'>
<input type='hidden' name='form_var'
value='testing'>
<input type='submit' value='go to next page'>
</form>";
?>
</body></html>
(demo)
IST DEI ▪ Bases de Dados 2006-07
▪
34
Exemplo de sessão – página 2
<?php session_start(); ?>
<html>
<head><title>Testing Sessions page 2</title></head>
<body>
<?php
echo "session_var =
{$_SESSION['session_var']}<br>\n";
echo "form_var = {$_POST['form_var']}<br>\n";
?>
</body></html>
(demo)
IST DEI ▪ Bases de Dados 2006-07
▪
35
Bases de Dados
PHP e MySQL
Estabelecer ligação ao MySQL
§ Abrir uma ligação
$connection =
mysql_connect($host,$user,$password)
or die("Couldn't connect to server");
§ Informação sobre erros
if (!$connection =
mysql_connect($host,$user,$password))
{
$message = mysql_error();
echo "$message<br>";
die();
}
IST DEI ▪ Bases de Dados 2006-07
▪
37
Estabelecer ligação ao MySQL
§ Escolher a BD (por nome)
$database = "bank";
$db = mysql_select_db($database, $connection);
§ Fechar a ligação
mysql_close($connection);
IST DEI ▪ Bases de Dados 2006-07
▪
38
Enviar perguntas
$result = mysql_query($query)
or die("Couldn't execute query.");
$result = mysql_query($query, $connection)
or die("Couldn't execute query.");
§ Para perguntas que devolvem um resultado
• $result é um apontador para os dados
§ Para perguntas que não devolvem um resultado
• verdadeiro ou falso, conforme sucesso da operação
IST DEI ▪ Bases de Dados 2006-07
▪
39
Acesso aos resultados
§ Para aceder aos resultados, obtém-se um array
$row = mysql_fetch_assoc($result);
while($row)
{
$valor = $row["atributo"];
echo "<p>$valor</p>";
$row = mysql_fetch_assoc($result);
}
IST DEI ▪ Bases de Dados 2006-07
▪
40
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
$sql="select * from customer";
$result = mysql_query($sql);
echo "N. of results: " . mysql_num_rows($result)";
echo "N. of columns: " . mysql_num_fields($result)";
while($row_array = mysql_fetch_array($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>";
}
?>
(demo)
</table>
IST DEI ▪ Bases de Dados 2006-07
▪
41
Processamento de formulários
§ Um formulário HTML
<form action="processform.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 processform.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 – variáveis de $_POST, $_GET e $_COOKIE
§ Exemplo: $name = $_POST['name'];
IST DEI ▪ Bases de Dados 2006-07
▪
42
Processamento de formulários – exemplo
<html>
<head><title>Customer Info</title></head>
<body>
<?php
foreach ($_POST as $field => $value)
{
echo "$field = $value<br>";
}
?>
</body>
</html>
(demo)
43
IST DEI ▪ Bases de Dados 2006-07
▪
Utilização de outros controlos
§ Usar radio buttons
<input name="curso" type="radio" value="diurno"/>Frequentar
curso diurno<br>
<input name="curso" type="radio" value="nocturno"/>Frequentar
curso nocturno<br>
§ Usar 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)
IST DEI ▪ Bases de Dados 2006-07
▪
44
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 2006-07
45
IST DEI ▪ Bases de Dados 2006-07
46
▪
Manual PHP
▪
Download